Skip to content

Instantly share code, notes, and snippets.

Verifying that +samuli is my blockchain ID. https://onename.com/samuli

Dynamic content in distributed applications

30mins

Description

At the heart of every application is a database. In the decentralized web, the peer-to-peer paradigm doesn't use servers, so how can we develop compelling applications and user experiences? This talk will demonstrate orbit-db, a distributed peer-to-peer database built on IPFS. We'll show how we can create traditional data models, such as a key-value store, in a distributed fashion and create applications without servers. We'll cover the underlying data structures and transport mechanisms provided by IPFS, take a look at CRDTs (Conflict-free Replicated Data Types) and show how they can be leveraged to create different types of databases. Using IPFS and orbit-db, we'll show examples of how to build news feeds, real-time chat and comment systems in distributed applications that can run purely in the browser.

Additional resources

orbit-db

orbit-db is a distributed, peer-to-peer database built on IPFS. By saving all data in IPFS and

@haadcode
haadcode / Software Development Process and Managing It - PL Team Week Lisbon 2016.md
Last active July 17, 2016 17:08
Software Development Process and Managing It - PL Team Week Lisbon 2016.md

Software Development Process and Managing It

Introduction

  • We're growing in terms of team and the product
  • We're moving from "prototyping" to "production" --> our needs change
  • Need to shift our mindset to "delivering"
  • Need a way to manage all the 1001 endeavours we have

Introduction to Methodologies

ImmutableDB

An interface for immutable databases

ImmutableDB is an abstract interface for content-addressed databases that:

  1. save the same blob of data to the same key every time (write)
  2. return the same blob of data with the same query key every time (read)

The difference to a a traditional key-value store is that the key doesn't get specified explicitly. Instead, the key gets calculated based on the data using a hashing function. This is also called content-addressed storage.

'use strict';
// const ipfsd = require('ipfsd-ctl');
const IPFS = require('ipfs')
const ipfsd = require('ipfsd-ctl');
const OrbitDB = require('../src/OrbitDB');
const Timer = require('./Timer');
// usage: benchmark.js <network hash> <username> <channel>;

clients

  • orbit-electron
  • orbit-textui (--> orbit-terminal?)

core

  • orbit-core (orbit_)
    • orbit-crypto
    • orbit-db
      • orbit-db-store
  • ipfs-log
fs.init(1 * 1024 * 1024, (err) => {
if(err) {
logger.error("Couldn't initialize file system:", err)
} else {
logger.debug("FileSystem initialized")
}
})
@haadcode
haadcode / pubsub.js
Last active November 24, 2016 06:28
'use strict'
const PubsubMessageStream = require('ipfs-pubsub-message-stream')
class Pubsub {
constructor (send: Function) {
this._subscriptions = {}
this._send = send
}
/* Components for Orbit */
'use strict'
const styles = {
layout: {
flex: {
display: 'flex',
},
row: {