Pump.io + Community = ♥
Alex Jordan
Let's talk about moi
Arch Linux
Emacs
Git
zsh
Node.js
Firefox
Also about moi
Radical FLOSS zealot
Self-hoster
Pump.io core contributor
High school senior
he/him
Let's talk about this presentation
Originally a lightning talk (5 minutes -> 60 minutes)
What & why of Pump.io
Using it
Brand-new community (+ history)
The "what & why"
Social network
Federated
Successor to StatusNet (aka GNU Social)
That thing that runs identi.ca
Pump.io != StatusNet++
Both written by Evan Prodromou
StatusNet was his first social project
identi.ca circa July-ish 2013
Very complex
Codebase problem & protocol problem
(Side note: Apache 2.0 vs. AGPL)
StatusNet protocol
(Fair warning: this is Long Before My Time™)
OStatus
Atom (status update feed)
PubSubHubbub (post push)
Salmon (comment distribution)
ActivityStreams (favorites, etc.)
Let's talk Salmon
Just as an example.
Comment distribution
Based on Atom/RSS
Data is POST
ed back to an endpoint URL in original post
Turns out this is overkill
StatusNet code problems
Everything and the kitchen sink
OpenID
Twitter cross-posting
URL shortening
Publish updates over XMPP
Content embedding (think YouTube)
A lot of this had custom server-side stuff
140 characters
Looked like Twitter
Artificial limits
Eventually evolved to support pictures, etc.
AKA: understood more and more types of ActivityStreams
Enter Pump.io
I post something and my followers see it. That's the rough idea behind the pump.
- README.md
In other words:
Pump.io is just an ActivityStreams distribution engine
ActivityStreams
Usually JSON
Actor, verb and object (+ optional target)
{
"published": "2011-02-10T15:04:55Z",
"actor": {
"url": "http://example.org/martin",
"objectType": "person",
"id": "tag:example.org,2011:martin",
"image": {
"url": "http://example.org/martin/image",
"width": 250,
"height": 250
},
"displayName": "Martin Smith"
},
"verb": "post",
"object" : {
"url": "http://example.org/blog/2011/02/entry",
"id": "tag:example.org,2011:abc123/xyz"
},
"target" : {
"url": "http://example.org/blog/",
"objectType": "blog",
"id": "tag:example.org,2011:abc123",
"displayName": "Martin's Blog"
}
}