It's 2013

Let's make a new social network!

Ideas for a lightweight, scalable and modern decentralized social networking server

Florian Hülsmann / cbix.de

No, wait..! A whole new social network!?

Use existing ones, speak their language (protocol) and keep all your virtual friends!

The problem with current implementations:

Choose a protocol:

CC by-nc xkcd.com

Client side (web browser)

Server side

Go

A compiled programming language for scalable, fast server applications.

Supports concurrency:

func (p *Post) Distribute() {
    for _, h := range p.ReceiveHosts {
        go h.QueuePostNotification(p)
    }
}

goroutines

communicate through channels.

func PostsListener(c chan *Post) {
    for p := range <-c {
        go db.StorePost(p)
        go hub.PostNotify(p)
    }
}

func main() {
    postChan := make(chan *Post)
    protoHandler := proto.NewHandler()
    protoHandler.SetPostChan(postChan)
    go PostsListener(postChan)
    // ...
}

Websockets

func (hub *WebsocketHub) PostNotify(p *Post) {
    for _, client := range hub.ConnectedClients {
        client.MsgQueue <- p
    }
}

Performance optimized full text / #hashtag search

Go packages to be used

crypto for encrypted server to server communication

net/http as protocol base

encoding/json for client API

html/template for frontend templates

image for creating thumbnails etc.

Further ideas

/

#