Unique Item Identifiers

Wiki tries to mark every item created with a unique identifier. We can think of each item in The Federation as a database record, and we can refer to it with this unique id however it might move through the federation, and whatever its contents.

This is different from the Permanent Web, in that we are not trying to refer to the content – rather the intent of the author.

This paragraph is intended to explain how a wiki-item can be "fluid", what it means to be fluid, and how this is different from "permanent". This is not easy to explain, I may not be good at explaining the concept – but that is my intent. I may therefore seek to improve this content, without changing the way I refer to it.

# Universal Intent

However even though we do not use content addressable references (ie mulithash-based) – we do want these references to be universal. Our software will break if our ids are not unique, and we seek to preserve content across time, and with the participation of any number of future authors.

# Permanent Snapshots

We look to archive the federation, or parts of the federation on the Permanent Web. We seek to translate wiki into a flat-file storage format which can stand the test of time.

This in not wiki, this is Dead Wiki, that is a moment of wiki's life frozen in time. We aim to provide tools that an author can use to create a permanent snapshot of their part of the federation.

To this end we need page-items to be robustly unique. We seek to avoid name clashes over The Long Now. The current wiki implementation uses an improvised item id of non-standard origin. We propose moving over to uuid version 4.

# Livecode implementation

The Mediawiki Transport and other LiveCode based Transporters have been creating wiki-pages for a while now using version 4 (random) UUID's The C++ library that creates the UUID uses a cryptographic quality pseudo-random number generator is used to generate the randomness.

We can change the type of UUID for any new items created to any version needed (this is only one line of code to change), but we recommend the use of uuid version 4 for this purpose.

# Suggested Node.js implementation

npm install uuid var uuid = require('uuid'); Then create some ids ... const uuidv1 = require('uuid/v1');uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' const uuidv4 = require('uuid/v4');uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

- https://github.com/broofa/node-uuid - https://www.npmjs.com/package/uuid

# See also