Standardizing the Social Web

Open Source Bridge • June 2016

aaronpk.com / @aaronpk

CC-BY-3.0

The Early Web

  • Mostly static HTML pages
  • Content updated manually
  • Required learning HTML
  • and learning about DNS & hosting

1997-2002: Blogs

1997-2002: Blogs

  • A domain name with a blog was one's online identity
  • Blogging tools allowed people to focus on creating content rather than code
  • People made personal connections via reading and commenting on blogs
  • RSS/ATOM feeds for subscribing to others' blogs
  • Pingback to know who was linking to who

2002-2006 Rise of Social Networks

  • Friendster
  • Myspace
  • Orkut
  • Facebook

Why?

  • Easy signup
  • Follow people with one click
  • Integrated reading and posting experience

Meanwhile...

RSS vs Atom Wars

indiewebcamp.com/rss-vs-atom

  • Years of arguments
  • Debating slightly different formats
    for essentially the same purpose

Trackback - too easily spammed

Pingback - noisy user experience

Decline of Blogs

  • Distracted by format wars, blog UX stopped evolving
  • People went to social networks to connect to other people
  • Silo UX provided more meaningful interactions
  • People converted their websites to flat "business cards"...
  • ...and moved to where writing was easier

2007: Twitter popularizes simplicity

screenshot: Brian Solis

Twitter App Ecosystem

  • Twitter.com
  • TweetDeck (Windows, OS X, iOS, Android, Browser)
  • Twitterific (OS X, iOS)
  • HootSuite (browser based)
  • Echofon (Windows, OS X, iOS, Firefox)
  • Janetter (Windows, OS X, iOS, Android)
  • Tweetings (Windows, OS X)
  • Destroy Twitter (Windows, OS X, Linux)
  • ... many more!

2010: Federated Social Web Summit

Portland, Oregon

2010: Federated Social Web Summit

  • Specs were too hard
  • OpenID, OAuth 1, Salmon, XML namespaces everywhere
  • Too few implementations
  • Too much emphasis on plumbing

"I don't care about federation,
I care about my content,
and my friends."

Tantek Çelik

2011: IndieWebCamp

IndieWebCamp Principles

  • Build for yourself
  • UX and design before protocols
  • Modularity
  • Plurality of projects

indiewebcamp.com/principles

Simplify

  • OpenID → RelMeAuth → IndieAuth
  • Microformats/RDFa → Microformats 2
  • Pingback → Webmention
  • Make things easier for publishers and consumers
  • Driven by user experience

2014: W3C Social Web Working Group

Standardize protocols, APIs and vocabularies
for building the Social Web

w3.org/wiki/socialwg

Group Deliverables

  • Social Data Syntax - a JSON-based syntax to transfer status updates and other social info across systems
  • Social API - an API that can create social data, as well as consume it
  • Federation Protocol - to allow sharing information between disparate systems

Current Specs

  • Activity Streams 2.0
  • ActivityPub
  • Micropub
  • Webmention

Spec Lifecycle

  • ED - Editor's Draft
  • WD - Working Draft
  • CR - Candidate Recommendation
  • PR - Proposed Recommendation
  • REC - Recommendation

Activity Streams 2.0

Social Syntax

www.w3.org/TR/activitystreams-core/

Activity Streams 2.0

An activity stream is a collection of actions that have been taken by users in a given system

Activity Streams 2.0

  • "Amy posted a note"
  • "Ben tagged you in a photo"
  • "Chris started following you"
  • "Evan invited you to an event"
  • "Jessica commented on a post"

Examples

{
  "@context": "http://www.w3.org/ns/activitystreams",
  "type": "Travel",
  "name": "Sally went to work",
  "actor": {
    "type": "Person",
    "name": "Sally"
  },
  "target": {
    "type": "Place",
    "name": "Work"
  }
}              

Examples

{
  "@context": "http://www.w3.org/ns/activitystreams",
  "type": "Follow",
  "name": "Sally followed John",
  "actor": {
    "type": "Person",
    "name": "Sally"
  },
  "object": {
    "type": "Person",
    "name": "John"
  }
}              

Activity Streams 2.0

Current Status:

  • Working Draft - requesting CR transition soon
  • Replaces previous (XML) version of Activity Streams
  • ~2 current interoperable implementations
  • Seeking implementers and feedback

Validator

as2.rocks

Activipy

Python library for Activity Streams 2.0

Also a good tutorial!

activipy.readthedocs.io

ActivityPub

Social API

www.w3.org/TR/activitypub/

ActivityPub

An API to create Activity Streams actions and otherwise manipulate social data

as well as a way to federate Activity Streams actions between servers

Examples

{
  "type": "Like",
  "actor": "https://example.net/~mallory",
  "to": ["https://hatchat.example/sarah/",
         "https://example.com/peeps/john/"],
  "object": {
    "id": "https://example.org/~alice/note/23",
    "type": "Note",
    "author": "https://example.org/~alice",
    "content": "I'm a goat"
  }
}              

ActivityPub

  • Specifies followers/following collections
  • "Inbox" and "outbox" streams
  • Specifies audience targeting of content

ActivityPub

Current Status:

  • Working Draft
  • May split into two docs, client-server and server-server

Micropub

Social API

www.w3.org/TR/micropub/

Micropub

An API to create posts such as notes, photos, comments, etc.

Enables using third-party apps to post content to your own website

Creating a Post


              h=entry&
              content=Hello+world&
              category[]=foo&category[]=bar
              

Creating a Post


              {
                "type": ["h-entry"],
                "properties": {
                  "content": ["Hello world"],
                  "category": ["foo","bar"]
                }
              }
              

Updating a Post


              {
                "mp-action": "update",
                "url": "http://example.com/post/1",
                "replace": {
                  "content": ["Hello moon"]
                }
              }
              

Deleting a Post


              {
                "mp-action": "delete",
                "url": "http://example.com/post/1"
              }
              

Micropub

Current Status:

  • Working Draft - requesting CR transition soon
  • Several interoperable clients and servers
  • Creating posts is stable, read/update/delete is nearly stable

Micropub Apps

Micropublish

Browser Extension

Pebble App

Lithograph

updates bookmarks to add a screenshot

Webmention

Federation

www.w3.org/TR/webmention/

Webmention

A simple protocol to notify a URL when you link to it

Primarily used for cross-site comments, likes, RSVPs, etc

Example


source=https://aaronparecki.com/2016/06/04/8/&
target=http://werd.io/2016/really-happy-to-be-here-at-indiewebsummit
              

Webmention

Current Status:

  • Candidate Recommendation (CR)
  • Dozens of interoperable implementations
  • Working on extensions for presentation, anti-spam techniques, and private content

webmention.rocks

Validator / Debugger

Live Demo!

Posting a comment to webmention.rocks

Live Demo!

Receiving a comment from webmention.rocks

Get Involved

Thanks!

aaronpk.com
@aaronpk