Faces of the Federation — Jason Robinson of Socialhome
Jason Robinson was a long-term volunteer dev to the Diaspora project who made several important code contributions before deciding to roll his own federated platform. An avid Pythonista, Jason has specializes in Django development, and continues to tinker with decentralized communication.
Thanks for joining us today, Jason! Could you take a moment to describe yourself, and what it is you do?
My name is Jason Robinson and I live in Helsinki, Finland, with my wife and a small future hacker army of 3. I love to work on open source stuff, especially related to federated social networking. Professionally I work as a senior developer doing Python and Django. Sometimes I meet people and drink beer. Ideologically I’m strongly green and I believe humanity should grow up and get their act together.
“One thing had bothered me since joining the world of Diaspora: no one knew how many users there were.”
You started out in the space as a contributor to the Diaspora project. What kind of contributions did you make?
Diaspora was indeed my first touch with the federated social web space. Or open source social networks at all. I did not have much experience contributing to anything, so getting myself involved in Diaspora was a really important learning experience for me. While working on the project I learned a lot about the open source world which has helped me immensely for example in work life. A project like Socialhome would never have been possible for me without the experience through Diaspora.
My first Pull Request to Diaspora happened in November 2011 when I contributed the mobile version of the bookmarklet. Everybody who follows me knows I share a lot of links. After that I contributed various PR’s for cross-posting services, added statistics exporting, created the Terms of Service feature, added the maintenance job for removing old users and did some improvements for participations regarding reshares.
I was a Diaspora core team member for a few years up until I left in January 2016. My main contributions during that time were not code but issue management, triaging, user support, communication, release management and promotion.
You run the-federation.info — could you tell us a little bit about that project and how it got started?
The project started as “pods.jasonrobinson.me” and only later got renamed when the name “The Federation” came up as a fun name for the federated social web platforms communicating using the Diaspora protocol. One thing had bothered me since joining the world of Diaspora: no one knew how many users there were. When I started doing more promotion, it was impossible to say what the network size was, was it growing, how many servers there were, and so on.
Our community discussed this and I submitted the “statistics.json” endpoint in November 2013. At the same time I pushed up the node list which started collecting data from nodes which slowly started updating to code with the statistics. Within a few months, we had clear proof that the network was growing, along with amounts of users per pod, and how many of the total users were active.
Later on, with a redesign contributed by Fla, the site became a more generic (unofficial) “landing page” for the projects implementing the Diaspora protocol, which currently are Diaspora, Friendica, Hubzilla, Socialhome and GangGo. The idea was to offer a few words about each project and provide links to their project pages, in addition to showing some numbers.
How did the social relay solution come about for Diaspora? What problem does it solve?
Federated social networks have one huge problem where they lose out to centralized platforms. Content availability. The way federation works is to spread content around the network using social relationships. This is fine for many people, but it just doesn’t work out compared to something like Twitter, where you expect to be able to see all the content from any account.
The relay was an idea I proposed to help spread public content around the network. Simplified, it means senders carbon copy the public content their users create to a special relay server. The relay server then passes the content over to all servers who are subscribing to that type of content. Subscription can either be “I want everything” or “I want content with particular hashtags”.
I believe this has made a huge difference in the way content is available in the Diaspora protocol network. Now if you set up a new node, you don’t have to start from zero. You just subscribe to the relay, get thousands of posts a day and start building your social graph from things you find there.
You’ve been working on a federation library in Python for almost two years now. Why Python?
Because Python is the most versatile, fun and powerful programming language out there. OK, not everyone agrees, but for me it is the language I love to use. Additionally, I did not want to create just a Diaspora protocol library.
From the start the idea was to create a library that abstracts multiple protocols under a common API. Not quite there yet, but now that ActivityPub is mature, the plan is to add support for that within the early months of 2018. The library will never be a one-to-one mapping to Diaspora or ActivityPub, but rather an opinionated API for both.
“Don’t be afraid to start. Your project doesn’t have to be successful, or even something you end up using yourself.”
What inspired you to start Socialhome? How is it different from Diaspora?
The first version of Socialhome actually is from 2014. I was applying for a job to a company that does Django, so I decided to practice a bit. It powered my home page up to 2016 when I restarted the project with the aim of making it federate. This happened shortly after I left the Diaspora team.
The idea for Socialhome is very strongly rooted in the need to create a dynamic rich-content home page. That is still core functionality (though not available to all users unless marked as “trusted”, due to security). When I left Diaspora I had lots of time and a strong itch to work on some federated social stuff. So, making Socialhome federate was a natural thing to do, especially as a lot of the federation code already existed with the federation library I made for the relay system, which is also Python. Socialhome then continued as my little playground to try new things. At Diaspora some of my ideas were not always welcome or just didn’t fit the platform. With Socialhome I could do anything I wanted.
With Socialhome I’ve tried to take the best features of all the platforms I’ve used and merge them together into my own dream platform. It has a (up to) 4 column grid layout like Pinterest, which supports visually rich content and reading through lots of content fast. It supports lengthy Markdown (and HTML/JS/CSS for trusted users) formatted blog post like content, but also works totally fine for micro-blogging. One of the key features that will be added will be highly customizable streams like for example Tweetdeck has for Twitter. I also want to enhance the blogging features for things like anonymous comments, allow full text searching and other neat tools not available in many existing platforms.
What kind of things are on your development roadmap?
Currently the focus is to replace the current legacy jQuery based streams code with Vue.js. This work is being contributed by Christophe Henry (better known to some as Augier) and will make the streams code more modern and easier to extend. After that the main focus will be adding non-public content support, which is currently missing.
Next in line is full support for the ActivityPub protocol, which means Socialhome will be able to federate with even more users through platforms like Mastodon. Having been a part of the W3C group working on the ActivityPub protocol, I’m really looking forward to making this happen. There is real hope ActivityPub will unify many of the federated social platforms that either use their own protocols (like Diaspora) or an old lacking standard (like OStatus).
What is the most challenging thing that you have worked on so far?
Federation is hard and a lot of work. When I started working on implementing the Diaspora protocol, there was literally no documentation that was up to date. This meant a lot of reverse engineering and testing against live nodes.
For technical challenges, stream pre-calculation per user was an interesting thing to tackle recently. This was done for Socialhome to make all streams, no matter how heavy their calculations are, to load instantly just like on Facebook and Twitter. I hate seeing loading spinners so performance is always something I want to think of.
Do you have any advice for people in this space that might want to start their own project?
Don’t be afraid to start. Your project doesn’t have to be successful, or even something you end up using yourself. Start hacking, work on things you want and always ensure to have fun. Don’t listen to other people telling you what is good and how you should do something. Experimenting is key to learning. But also don’t expect others to instantly get excited about your idea. There will be opposition and people might even try to discourage you. No one has to be excited about the things you want to do for you to be able to do it.
Additionally, don’t be afraid to work in the open. People wont generally judge you for your code. They will however lose interested if they keep hearing about your project that has no code available. Commit early to working in the open. It will also ensure you’ll have to concentrate on code quality instead of hacky solutions.