Skip to content

Instantly share code, notes, and snippets.

@juliangruber
Created November 25, 2012 10:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juliangruber/4143091 to your computer and use it in GitHub Desktop.
Save juliangruber/4143091 to your computer and use it in GitHub Desktop.
channel based network

Channel based network

This is about creating (social) networks without authorities or business censoring and storing all data in one locations.

Everybody has his own content and joins several channels. Channels are like chatrooms, in a way that everyone joined gets every update by everyone else and nothing persists. Channels can have restrictions, like:

  • an IRC style channel only allows for text
  • a twitter style channel allows 140 chars of text, links, pictures and videos
  • a facebook style channel allows text, links, pictures, albums, videos etc.
  • a creative channel allows canvas drawings with descriptions only
  • a gist channel allows text only and advises clients to perform syntax highlighting based on meta data
  • a dribbble channels allows pictures only and is invite only
  • a user's channel has everything about the user and there he can be contacted also. Users can create restrictions there

Persistence

By default nothing persists, every update is just propagated to everyone in the channel.

If you want to persist something you do it yourself or ask someone you trust.

A good behaviour would be to have a server for yourself that stores all your data, so your public profile is always visible. Multiple profiles can be hosted on a server, but it is always up to the people to decide where their data lives.

Users need to state which servers they trust so bad servers can't serve wrong content about a user.

Servers vs Users

There is no technical difference between servers and users, they're both just nodes taking part in the game. However the behaviour will differ: Servers typically persist data and don't interact actively with other users, except for automated messages etc.

Links

Just link with @user

Unification

With this there is only one protocol that can be implemented once in every language and that's it. Clients can be written the interact with all content available or just focus on certain channels, still using the same basic libs and protocol.

Realtime

Because being like a chat, updates always happen instantly. You can also invite others on modifying a certain post to allow for collaboration.

TODO: o rly?

Security and private content

Private content goes into invite-only channels that are encrypted using shared keys.

Also there needn't be that one network only, you can create a network just for your friends that is even more secure because it goes of ssh tunnels into swedish proxies or whatever.

Comments

Comments happen via twitter stile reactions or it you need more you can just create a channel for a post

Offline

Clients can be configured to just cache everything they see or at least do that on every channel. This way the client becomes a content serving node and has access to everything he saw while being online.

TODO: changing stuff offline

Node discovery

As there can be multiple networks coexisting, you just need to find someone to get started with. So you connect to your best friend and then get to know everyone he knows etc.

Use cases

irc

every room is a channel with post-type restricted to plain text if necessary

email

create a private channel for your topic, invite one ore more people and post your text as first message

following a user

subscribe a user's public channel

Names

usernames need to be unique, channels are prefixed with the initiator user name, like julian/bike-talk

Meta data

Posts have meta data attached to them.

Required fields:

  • author
  • creation time

Optional fields:

  • content type (so clients can display images or canvases correctly)
  • ... you name it
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment