Project Decorum: DECentralised fORUM (and protocol)

project-decorum

#1

Edit: Details about crowdfund/sale are completely outdated

Project Decorum
The aim of ‘Project Decorum’ (from DECentralised fORUM) is the realization of two products intended for usage on the SAFE Network:

  • A protocol for decentralised, serverless, persistent conversations
  • A decentralised forum that implements this protocol

The Protocol
In short, the protocol describes a way to store and find related messages on the SAFE Network without requiring some central hub to either connect the participants or to receive and store the messages in one location.

The protocol can be used to create conversations in any form, such as a comment section on a blog, a discussion forum, or simply one-on-one conversations (though SAFE’s native messaging may be more suitable for that). Because the protocol is decentralised, participants don’t have to give up ownership of their messages and can use any of their SAFE identities. This way conversations can be as censorship resistant and as strongly anonymous as the SAFE Network itself!

Moderation
The above does not mean that moderation of conversations is impossible. Every user is able to add particular identities or messages to their ignore lists, and these lists may be made public so other users can subscribe to them. In a way, everyone is their own moderator and can at the same time choose others to be their moderator as well. Active participants with sound judgement (according to the values of their community) are likely to emerge as popular moderators (i.e. having lots of subscribers to their lists).

At the same time, the owner of an app or SAFE website that implements this protocol can opt for centralised moderation as well. The owner could hardcode in a number of default moderators without a button to turn them off, or even by default hide messages that do not have shared ownership with a default moderator. Such measures could then only be bypassed by using a different implementation (app/website) of the protocol to view these messages, one that doesn’t have these rules implemented.

The Decentralised Forum
Along with the protocol, I’m developing an implementation of it as well in the form of a decentralised forum. It will not use any centralised moderation as described above, and is meant to be a general SAFE forum where everyone will be welcome.

Users will be able to create new categories (like subreddits) themselves, and the main page will act like a configurable portal. This portal may contain your favourite categories or topics, and possibly suggested categories or topics as well, based on activity of people’s whose messages you “liked” or who you’re “following” or “tipped” in the past. Like everything else, this will solely be computed client-side to maximise your privacy.

Note that the name of this forum will not be ‘Decorum’, that is just the code name for this project. I have a cooler and easier name that I won’t disclose until I reserved it in SAFE’s DNS system. :wink:

The Road Ahead
I already implemented the basics of the protocol in a decentralised forum proof of concept using JavaScript, HTML and CSS. I’m currently using a regular hash table as a substitute for SAFE’s distributed hash table, which allows me to test almost all of the functionality despite the SAFE Network not being online yet. Currently this proof of concept is able to retreive a conversation, display it as a threaded forum discussion, and to let the user add a reply to any of the messages.

The coming weeks I will work on expanding this proof of concept’s functionality and making it presentable. At the same time I will work on proper documentation of the protocol. I plan to create a more expansive topic in the near future, to show pictures or perhaps a video of the forum-in-progress and to explain the protocol in more detail.

Everything will become open source when the decentralised forum is launched, perhaps earlier. I’ll try to provide a proper implementation for comment sections on blogs as well, I imagine plenty of you will be interested in that!

Support
I have this idea to reward anyone currently registered on this forum with a special title/badge/icon to their username of choice on the decentralised forum if they make a donation (no matter how small) in MAID or BTC to support development of ‘Project Decorum’. The special title is meant as a small “thank you” for supporting this project with whatever you think it is worth and what you can afford. I don’t feel comfortable with kickstarter-style tiered rewards to shake as much as possible from you guys, hence no minimum donation level. If donations turn out to be fairly substantial, I’ll try to think of ways to use it to expand the scope of this project.

Aside from donations, I don’t have a monetization plan for this project (and I’m fine with that). One of the curious consequences of the decentralised aspect of the protocol is that the data (i.e. conversations) are completely independent from websites/apps. Users from many different apps/websites that implement the protocol could in theory all take part in the same conversation. As such there’ll likely be a lot of competition on the app/website level, which functions only as a user interface to the decentralised conversations. This means that putting ads on the forum website or bothering the user in any other way is likely suicidal. Despite being first, it is not at all guaranteed that my website will stay the most popular user interface to the decentralised conversations.

Help from any talented UI designers would be welcome as well! Let me know if this is something you want to get involved in.

Also, feel free to provide suggestions for the special title reward, I’m sure we can think of something cooler than “Pre-launch Supporter” or something like that! :smile:


Is there a list of apps people are working on?
The DAO crowdfunding is live
SAFE Crossroads Podcast #31 – Harmen Klink
Project Decorum - Crowdsale (Ended)
Discussion on the use of Public_IDs in Apps
Crowdfunding (Crowd Founding) Safe Applications
SAFE Crossroads Podcast #30 – Decorum and SAFE Altcoins
On creating SAFE alt-coins
The SAFE Social Network
SAFE Crossroads Podcast #26 | Free Trade for Real, The Safe Exchange
Using serverside programming in maidsafe
SAFE Network decentralized applications. More than just storage?
#2

Seems to me the challenge is how do you tell the universe there is another comment on a thread?

Normally a centralized database would write all the data… But With SAFE that doesn’t really work, since there isn’t a server.

I would be curious how you handle that…


#3

yes I seem to be in a land of confusion why I can not upload a server software like wamp or xamp on to the safenetwork and pay the farmers for the storage space.


#4

Sounds brilliant! I’m going to read it again later, but I know I’m look forward to my shiny badge:)

I love a world run by developers. It is like Christmas every day.


#5

You’re doing what used to be known as the “Lord’s work”, but is now more commonly referred to as “making the world a better place”.

Good luck and ${diety} bless.


#6

Hey @Seneca, sounds awesome. I think “DEforum” could also be an interesting working title.


#7

the SAFE alternative to relational database relies in something called “StructuredData” (SD).

StructuredData are records that users can use to store “database like” data on the network. SD has 4 main properties: id, owner, type, data. You can think this whole SD thing as a single (and huge) relational database table where all records, from all users and applications, are mixed and accessible to anyone.

The “type” property (actually is “type_tag”), is the “table name”. This property is what allows us to use SD as tables.

For instance, let’s say you want a “comments” table: all you need to do is to tag the new records with a “comments” content on the “type” property. Then, to retrieve the comments, you need to make an API call to get all SD records (it will scan the entire network) with this type tag. Please notice that to avoid name conflict between apps, you’ll need to use an unique id as the “table name”.

Also, notice that each SD record can be only edited/deleted by its owner. Not by the app owner, not by anyone else, just by the record’s owner.

Another thing you need to know when developing apps with SD, is to use its embedded signature capability. This capability is a handy tool to implement moderation, spam, mass record injection from other apps, and so on.

The “data” property is a simple string field. To store multiple columns, you’ll need to serialize it before store it. Also, be aware that all SD records are visible to anyone on the network - so, you’ll need to encrypt the content to provide privacy.

But I’m curious too to know if @seneca is using this design to store data, or it will be something different.


EDIT: more info here: https://github.com/maidsafe/rfcs/blob/master/implemented/0000-Unified-structured-data/0000-Unified-structured-data.md

EDIT 2: as pointed by seneca, you can’t get all SDs that have a specific type_tag with a single API call. But yes, it’s possible to use “type_tag” and “id” to get a table like behavior - not so simple as I had mentioned, but close.


#8

Scan then entire network? How is that implemented to make the scan fast enough? Sounds like a really slow operation.


#9

will be your project an engine where anyone can download, customize it and publish it (like phpBB or Discourse)? Or will be a service like StackOverflow? Will be something like Wikipedia or something like MediaWiki? An engine or a service?


#10

I confess that I don’t know the internals, but as this is the official way to implement tables, and as SAFE is being designed to store the whole internet, I think (and I hope :smile:) that they had thought enough about it and somehow it wouldn’t be a problem. My guess is that it’s achieved by the same way the network searches for a specific file on the network, or the same way fragments of a file are searched and “glued”.


#11

One idea I came to think of is to have StructuredData as indexes. So for example an SD ‘comment_index’ contains a list of IDs for all SDs tagged ‘comment’. And more complex indexes can also be created that way.

EDIT: It would be interesting to know how @Seneca will deal with the database storage. Millions of people reading a single index SD is doable because of the cashing. But what about an index that has lots of writes? That can be solved by a technique called sharding where instead of a single SD, each index is split up and distributed into several SDs.


#12

Maybe it’s worth it to have a freemium & premium model. What I would personally like about a forum is if you could charge people for commenting. Ideally even down to the character, like it’s done through bitcoinmegaphone.com.

If I make a comment on your OP, I pay directly to you. If I commented on somebody else their comment on your OP, I pay directly to them. Maybe you could also add features like the LTB Network’s ‘magic word’ (proof of participation), this would allow some parts of the forum to become podcasts or whatever. Maybe the SAFEcoins the app/website generates can be redistributed to the participants.

Maybe some forums want people to pay, before they can join a forum. This could be once, monthly or per annum etc. Even “likes” could come with a pricetag. It’s not that I’m saying ‘pay pay pay’, but it would be nice to see people put their money where their mouth is.

Please don’t forget, that you could compete with discourse and simple machine forum. You got the advantage that your forum lives in a SAFE environment, maybe you’ll even get them to come on over to the SAFE Network.

[quote=“Seneca, post:1, topic:6119”]
I already implemented the basics of the protocol in a decentralised forum proof of concept using JavaScript, HTML and CSS.
[/quote]I would advice you to create a course on Codecademy.com, if possible. This has a few advantages, first your showing people how to create a forum with html JavaScript, HTML and CSS. Second your introducing these same people to the SAFE Network. Third your exposing yourself to millions of people around the world, learning stuff through CC.

Enough out of me and I’ll support this, because I like you and like to see more apps/ideas materialize on the SAFE Network. Thanks your the second this week :stuck_out_tongue: (Hey that’s two likes, will that cost me like 2 SAFEcoins on your new forum?)


#13

You’re pretty close, but SD’s don’t allow you to create tables in the way you describe. You can’t GET all the SD’s of a certain type with a single API call, you have to ask for a SD with a specific identifier. The address of an SD object in the SAFE distributed hash table is SHA512(tag_type + identifier). The way my protocol create “links” between SD objects uploaded by different people is by describing how the identifier of a new SD object is derived from the address of an existing (parent) SD object. By knowing the parent SD address, all the child SD addresses can be recursively computed and retreived by anyone that has an implementation of the protocol. Think of it as a tree of SD objects, with the root being a website, forum category, or even a SAFE public ID.

I’ll explain it better in the near future, no worries :slight_smile:

The SAFE Network won’t be able to do distributed computing initially, so the farmers won’t be executing the code of that server software.

@19eddyjohn75 Thanks for the suggestions, that’s definitely food for thought.


SAFE Network decentralized applications. More than just storage?
#14

Naming idea:

Scatter

Example in use:

‘scatter it’
‘scat me’
‘send it via scatter’
‘stop scatting in class boys’
‘journalists were scattering the news as quickly as they could’

Cheers and good luck
If it wins, don’t name it after me.


#15

https://reviewable.io/reviews/maidsafe/rfcs/75

Launcher dealing with Structured Data; to our enjoyment;


#16

Awesome, that’s exactly what I was waiting for!


#17

Not sure where to ask, so I’ll put it here:

If I GET a SD through JavaScript, will that function block execution until the data is retrieved from the network or will it be implemented asynchronously using events/callbacks? I hope it is the latter, or that I at least can implement that myself (I think this should be possible, but I’m relatively inexperienced with JavaScript, though learning fast due to my experience with system programming languages).

Edit: Tagging @Krishna_Kumar in the hope of some wise advice. :blush:


#18

@seneca My xp with Js is as much as updating the balance on the safex site (for now);

But it sounds like you are onto the right thing


#19

@Seneca do you think we can use the same protocol to implement the basis features of a social network, personal wall, comments, share, etc?


#20

Definitely! The forum will actually have such features to some extent. A forum is not very different from a social network a la facebook, during the initial design process for the decentralised forum I realised it’s mostly a difference in interface design and some minor functional tweaks.