Jason Robinson



4 months ago (edited)

Open source advocate, Pythonista and Djangonaut. Lead Developer at Anders Innovations.

Independent federated social web hacker. Author and maintainer of Socialhome, Social-Relay, Python federation and The-Federation.info.

3 days ago (edited)


10 months ago (edited)

4 months ago (edited)

github-activity - A widget for displaying GitHub activity for a user.

a month ago (edited)
a year ago (edited)

My projects: Socialhome

Django application that provides users the ability to create content for their profile which is then displayed in grids. Content can be Markdown or HTML, featuring a WYSIWYG editor.

All content is designed to be federated using the Diaspora protocol. In addition to profile content, users will be able to create non-profile content (in a more traditional status message way) and read streams of other user content from local users or other nodes via the federation layer.

Powers this site.

Tech stack

Django, Channels, Bootstrap 4, jQuery, Masonry, RQ, PostgreSQL, uWSGI, Circus, Py.test, Whitenoise, Mocha, federation.


2 months ago (edited)

My projects: federation

Python library to abstract social federation protocols. Currently supports a subset of the Diaspora protocol.

Used by Socialhome and Social-Relay.

Tech stack

Python, lxml, pycrypto, Py.test.


2 months ago (edited)

My projects: The-Federation.info

Statistics hub and node list for The Federation (Diaspora*, Friendica, Hubzilla).

Tech stack

Node.js, Express, Nunjucks, Sass.


2 months ago (edited)

My projects: Social Relay

Social Relay is an application to relay public posts between nodes of The Federation (diaspora* and compatible social networking servers).

Keeps track of nodes and their subscription preferences, receives payloads and forwards the payloads to subscribers. The aim is to pass public posts around in an efficient way so any new node in the network can quickly subscribe to lots of public activity, without having to wait a long time to create social relationships.

Tech stack

Flask, RQ, PostgreSQL, Peewee, Circus, federation, Py.test.


2 months ago (edited)

Decided work computer didn't have quite enough #stickers. Much better now.

2 months ago


Hacker Public Radio @ FOSDEM'15


Biertaucher-Podcast @ FOSDEM'15


Knightwise @ FOSDEM'15

a year ago (edited)
profile for jaywink at Ask Ubuntu, Q&A for Ubuntu users and developers profile for jaywink at Stack Overflow, Q&A for professional and enthusiast programmers
a year ago (edited)

6 months ago (edited)


Python Helsinki meetup at F-Secure @ 7th Jan 2015

PyLadies Helsinki meetup at Anders Innovations @ 16th Dec 2014

a year ago (edited)

a year ago (edited)

PyCharm <3

a year ago (edited)

DJ mixes

Some mixes and live sets from my ealier breakbeat / drum'n'bass hobby.

Check more at hearthis.at.

20 days ago (edited)

#climatechange #humanity

4 months ago

HBD #EU <3

4 months ago

7 months ago (edited)

federation version 0.13.0 released

This #Python #federation library release mostly fixes compatibility with the latest #Diaspora federation protocol changes that are rolling out to some nodes.



Backwards incompatible changes

  • When processing Diaspora payloads, entity used to get a _source_object stored to it. This was an etree.Element created from the source object. Due to serialization issues in applications (for example pushing the object to a task queue or saving to database), _source_object is now a byte string representation for the element done with etree.tostring().


  • New style Diaspora private encrypted JSON payloads are now supported in the receiving side. Outbound private Diaspora payloads are still sent as legacy encrypted payloads. (issue)
    • No additional changes need to be made when calling handle_receive from your task processing. Just pass in the full received XML or JSON payload as a string with recipient user object as before.
  • Add created_at to Diaspora Comment entity XML creator. This is required in renewed Diaspora protocol. (related issue)


  • Fix getting sender from a combination of legacy Diaspora encrypted payload and new entity names (for example author). This combination probably only existed in this library.
  • Correctly extend entity _children. Certain Diaspora payloads caused _children for an entity to be written over by an empty list, causing for example status message photos to not be saved. Correctly do an extend on it. (issue)
  • Fix parsing Diaspora profile tag_string into Profile.tag_list if the tag_string is an empty string. This caused the whole Profile object creation to fail. (issue)
  • Fix processing Diaspora payload if it is passed to handle_receive as a bytes object. (issue)
  • Fix broken Diaspora relayables after latest 0.2.0 protocol changes. Previously relayables worked only because they were reverse engineered from the legacy protocol. Now that XML order is not important and tag names can be different depending on which protocol version, the relayable forwarding broke. To fix, we don't regenerate the entity when forwarding it but store the original received object when generating a parent_author_signature (which is optional in some cases, but we generate it anyway for now). This happens in the previously existing entity.sign_with_parent() method. In the sending part, if the original received object (now with a parent author signature) exists in the entity, we send that to the remote instead of serializing the entity to XML.
    • To forward a relayable you must call entity.sign_with_parent() before calling handle_send to send the entity.


  • Post.photos entity attribute was never used by any code and has been removed. Child entities of type Image are stored in the Post._children as before.
  • Removed deprecated user private key lookup using user.key in Diaspora receive processing. Passed in user objects must now have a private_key attribute.

Python library for abstracting social federation protocols

6 days ago

Social-Relay version 1.4.0 released

This release adds compatibility with the latest #Diaspora #protocol changes. Also now Social-Relay will verify received payloads to ensure receivers get payloads from only resolvable valid senders.


What is the relay system?

The #relay system handles distribution of public content using the #Diaspora protocol. This helps new nodes get into the network and allows subscribing to hashtags from around the network. This is an unofficial network addition not directly related to the Diaspora protocol or project itself.

If as a #podmin you want to hook up to the relay system, do as follows:

  • Enable your outbound/inbound relay configuration in your Diaspora pod settings or for #Friendica / #Hubzilla check your own settings/documentation on how to do it.
  • Ensure your node is registered at The-Federation.info. The relay system polls this list for nodes to check.
  • Profit within one hour!

Discuss and improve

Let me know if you have ideas for improving the relay system or just questions about it. Contact me here, GitHub issues or via IRC.



  • Accept new style Diaspora public payloads without xml=payload form data.
  • Add profile model. Store remote profile handle + public key for later use, since we don't want to always fetch them.
  • Start validating signatures in sent payloads. This requires fetching remote profiles. Closes #31.

Ping @{David Morley; davidmorley@diasp.org}

social-relay - Public post relay for the Diaspora federated social network protocol

4 days ago

Some basic #search on #Socialhome finally starting to come together. Only on my personal node atm though. Explains why many people got a follow from me just now as I'm eagerly searching and following people from my #diaspora contacts :) Remote direct match lookup is still to come though, so can't reach all pods who don't push over the relay system (btw, you should!). Currently the search is for profiles only. Tags will be added soon, after that full text for content.

On the technical side, after prototyping some solutions, went with django-haystack for the search framework and whoosh for the engine. Whoosh is a pure #Python backend with a file index. While this might not offer the performance we will need for large index full text search (from all content!), using Haystack on top means we can just switch transparently to #Elasticsearch at any time without touching pretty much any code - or even support using one or the other. Some people running nodes might not want to install ES.

Landing soon in master, you can try it at my own site if you are interested. It's basic but works.

#django #devdiary

3 days ago