Skip to main content

Memorable Unique Identifier

Project description

muid

Memorable Unique Identifiers

Wait you say ... that's an oxymoron

Video explanation at https://vimeo.com/397352413

Memorable unique identifiers are a provocative misnomer because memorability is antithetical to uniqueness. MUIDs might be better termed "hash-memorable" identifiers: identifiers whose SHA-256 hashes are in part memorable.

Start mining now

Just want to mine?

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/microprediction/muid/master/examples/mine_from_venv.sh)"

If it fails you might need Python 3

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install python

Using the library directly

As per https://muid.readthedocs.io/en/latest/ ...

Install

pip install muid

Hash-memorability

>>> muid.bhash(b'f601f291896bb66b8a3c3d783077713a')
b'56a33411a3ae7cfc95597911708358ad'

Don't see it?

>>> muid.pretty(b'56a33411a3ae7cfc95597911708358ad',k1=6,k2=5)
'Shammy Llama'

Create one MUID

>>> muid.create(difficulty=8, with_report=True)
[{'length': 8, 'pretty': 'Thof Clam', 'key': b'79f7faf8d1272b94eaac367972a09f7b', 'hash': b'760fc1a3368216b67a044e3d4da1fd85'}]

String version of hash

Use shash instead of bhash

>>> muid.shash('f601f291896bb66b8a3c3d783077713a')
56a33411a3ae7cfc95597911708358ad

Validation

>>> muid.animal(b'f601f291896bb66b8a3c3d783077713a')
'Shammy Llama'

>>> muid.validate(b'f601f291896bb66b8a3c3d783077713a')
True

Mining for multiple MUIDs

Runs forever and produces MUIDs of increasing length.

>>> muid.mine()

{'hash': b'56a33411a3ae7cfc95597911708358ad',
'key': b'f601f291896bb66b8a3c3d783077713a',
'length': 11,
'pretty': 'Shammy Llama'}

{'hash': b'6ea176470adcff53855f04181bca1a1b',
'key': b'fb74baf628d43892020d803614f91f29',
'length': 11,
'pretty': 'Healthy Toad'}

{'hash': b'a3e76457c0de70a153e82067845f1527',
'key': b'769adf0f307181e4ab2bc4c1b991cdc6',
'length': 11,
'pretty': 'Amethyst Cod'}

Bequeath unwanted MUIDs to a worthy statistician.

Applications

See the video at https://vimeo.com/397352413 for some motivation.

We hope you have an application that can benefit from one less join.

Implementation decisions

We welcome thoughtful suggestions at https://github.com/microprediction/muid/issues

Choice of hash

We truncate the output of hashlib.sha256 For example muid.shash('abe5') is equivalent to

sha256('abe5'.encode('ascii')).hexdigest()[:32]

Readable hex

Hex Human Hex HUman Hex Human
1 l 5 s 9 g
2 z 6 h 0 o
3 m 7 t
4 y 8 x

Miscellaneous

Collisions

MUID collision requires approximately the same computational capacity as UUID collision, or more. Thus unlikely to be an issue.

Stupid dog trick

https://vimeo.com/396819347

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

muid-0.3.5.tar.gz (14.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

muid-0.3.5-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

Details for the file muid-0.3.5.tar.gz.

File metadata

  • Download URL: muid-0.3.5.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6

File hashes

Hashes for muid-0.3.5.tar.gz
Algorithm Hash digest
SHA256 6b43c49e40953bf24491cd7a41ad469500e77fd2b895ad093a2714be5648086b
MD5 cf2d5cc5a9002de532a11b4feee70e5e
BLAKE2b-256 7db0fc26b67f41649cd01e2e9fa67fc9d80c3e1bf2e9071c87b7c8c93d88cf57

See more details on using hashes here.

File details

Details for the file muid-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: muid-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 19.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6

File hashes

Hashes for muid-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 a3596b5f17a683b9c8028ba7ef8a680e2c48c7ef45c02b4ef60a590af8174e46
MD5 9ae6658e097740b9112b7b54e71ed2ea
BLAKE2b-256 af515aa4c0abe8cedeef1cb99a15454c630f11f06986dd2b492e0f90d2f1fbee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page