32c3: Gated Communities

I periodically reflect back on my experience first time attending Europe's largest hacker conference. The Chaos Communication Congress is an annual four-day conference on technology, society and utopia and is going onto its 33rd year. I planned my trip in advance with the goal of participating in the congress with some amazing virtual art. The response was amazing and a very positive feeling to be amongst the most brilliant minds in the world. I made sure this experience is one I'll never forget.



During CCC I sampled various bits around the congress and created my own mini congress inside AVALON.



Successful test with Pirateox GL-inets. AVALON nodes configured in a meshnet.



Congress inside the congress, multiple people can connect to the AVALON mesh network and congregate inside a private virtual world. You can use Avahi to browse for services that are being broadcast on the local network. The command-line tool can be used to see mesh connected nodes and their ipv6 address. With Janus, you can just open a portal to that room.



Interplanetary Scale

Using IPFS, we can build a global distributed supercomputer to upgrade the internet to a metaverse.

The goal of IPFS (InterPlanetary File System) is to connect all devices with the same system of files, like the web plus Git and Bittorrent. In some ways, this is similar to the original aims of the Web. It creates a P2P swarm that allows the exchange of IPFS objects that aims to make the web faster, safer, and more open.

https://hackaday.io/project/5077/log/18650-general-update

Issues with HTTP works that are not scaling with our uses of the network and our uses of the web in general. In terms of how websites store data on the internet, HTTP is quite brittle. We need protocol to reason how data moves and properties in links that you have to check integrity or cryptographic proofs.

The core problem with HTTP is that it's location addressed (IP address / domain name to access computers to server information you're requesting: problem when you can't access those resources). Short lifespan to websites and links become stale / broken. (Internet Archive has been trying to make backups, IPFS can make it more automatic).

IPFS enables websites that are completely distributed, do not have any origin, can run on client side browsers without any service to talk to.

Read this excellent comparison of HTTP versus IPFS here:

https://ipfs.io/ipfs/QmNhFJjGcMPqpuYfxL62VVB9528NXqDNMFXiqN5bgFYiZ1/its-time-for-the-permanent-web.html

Quick Summary of IPFS

libp2p is the guts of the IPFS network



IPFS is a protocol:

defines a content-addressed file system

coordinates content delivery

combines Kademlia + BitTorrent + Git

IPFS is a filesystem:

has directories and files

mountable filesystem (via FUSE)

IPFS is a web:

can be used to view documents like the web

files accessible via HTTP at http://ipfs.io/<path>

browsers or extensions can learn to use ipfs:// directly

hash-addressed content guarantees authenticity

IPFS is modular:

connection layer over any network protocol

routing layer

uses a routing layer DHT (kademlia/coral)

uses a path-based naming service

uses bittorrent-inspired block exchange

IPFS uses crypto:

cryptographic-hash content addressing

block-level deduplication

file integrity + versioning

filesystem-level encryption + signing support

IPFS is p2p:

worldwide peer-to-peer file transfers

completely decentralized architecture

no central point of failure

IPFS is a CDN:

add a file to the filesystem locally, and it's now available to the world

caching-friendly (content-hash naming)

bittorrent-based bandwidth distribution

IPFS has a name service:

IPNS, an SFS inspired name system

global namespace based on PKI

serves to build trust chains

compatible with other NSes

can map DNS, .onion, .bit, etc to IPNS

Example Use Cases:



IPFS delivers speed which is important for having quality WebVR.

Ideally we will need a pubsub (publish subscribe) system in order to achieve milisecond resolution on the network. IPFS knows this: https://github.com/ipfs/notes/issues/64



Experiments

Gallery 1: http://janusweb.metacade.com/#janus.url=http://ipfs.io/ipfs/QmWr3KSK8U5xHK8eN76xJYZLxL2kYwt5gHE3uHisqeYF8Q/



IPFS used for hosting the Janus web app with functioning multiplayer support.



Comparing JanusVR (left) versus JanusWeb (right), need to fix the lighting of certain objects.

32c3: http://janusweb.metacade.com/#janus.url=https://ipfs.io/ipfs/QmXwG57htZagbFUHdJsnyB9vuqkva2mfbFq4LiQhetKBq7/



The total size of the room is < 100mb. It has been seeding for 3 months and loads very fast now.



JanusWeb rendering has some bugs such as the lack of alpha channels for GIFs and transparent images and duplicate textures seen in the background photospheres.

Gallery 2: http://janusweb.metacade.com/#janus.url=http://ipfs.io/ipfs/QmYVbaf1seCvuFveHZZKcEM3bfEJDZfa2cL6KTZFwAkxcG/stage1.html



Shader support is buggy right now, this Tango scan has the metallic gold color stuck by the disco light shader from Metaverse Party.



Running the entire JanusWeb app on IPFS



There were a number of steps I took to get here. I first had to import files janusweb.js janusweb.css from elation and media/ from elation and edit the index.html file to look something like this:

<!DOCTYPE html> < html > < head > < title > JanusWeb </ title > < link rel = "stylesheet" type = "text/css" href = "janusweb.css" media = "all" /> < script src = "janusweb.js" > </ script > </ head > < body > < script > elation.janusweb.init() </ script > </ body > </ html >

There's also a config file one has to setup, although this step in the process is looking to be automated in the future. https://github.com/jbaicoianu/janusweb/blob/master/scripts/config.js



After configuration, you can ipfs add -r the directory and grab the last hash representing the root. I published the latest hash to my IPFS id. The IPNS system allows anyone tand choose to share thao store a reference to an IPFS hash under the namespace of your peerID ( hash of your public key ). This is an immutable ID meaning it won't change when you update it. View examples.

IPNS: /ipns/QmYqXsApqs4BwU1eLBDMjV9XYeP4XCgjZgw2UYrJh1GAK3/



So close. Next time this is updated I'll have it.

Links



Janus Art Galleries: http://imgur.com/a/s9ovA

Distributed, peer-to-peer chat application on IPFS called Orbit: https://github.com/haadcode/orbit



c-base created the most badass IPFS deaddrop.

https://github.com/c-base/ipfs-deaddrop

https://github.com/ipfs/ipfs/blob/master/README.md#who-designed-it

https://medium.com/@ConsenSys/an-introduction-to-ipfs-9bba4860abd0#.26qm803nv

http://whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example/

32c3 had a lot of cool talks, videos are freely available to public here: https://media.ccc.de/c/32c3

