A small tool to generate deterministic, pronounceable and memorable words from a given input
Mustache Donkey Pants
pip install mdpants
git clone firstname.lastname@example.org:25A0/MustacheDonkeyPants.git python setup.py develop
% echo 'Hello World!' > myfile % mdpants myfile Plottage.Hypoazoturia.Congresswomen
The output depends on the file content, not the filename:
% echo 'Thanks for all the fish!' > myfile % mdpants myfile Noncalculable.Cremationist.Somersetted % echo 'Thanks for all the fish!' | mdpants - Noncalculable.Cremationist.Somersetted
You can vary the number of words that the output is comprised of:
% echo 'Hello World' > myfile % mdpants -N5 myfile Plottage.Hypoazoturia.Congresswomen.Affiliable.Specks
You can specify a different list of words if you want:
% echo "foo\nbar\nbaz" > foolist % echo 'Hello World!' | mdpants --in foolist - Bar.Bar.Foo
It works with emoticons, too:
% echo 'Hello World!' > myfile % mdpants --emoticons myfile 😳.😟.😍
To change the delimiter between words, use the -c option:
% echo 'Never gonna give you up' > myfile % mdpants -c ' - ' myfile Lings - Distractedness - Buhl
If you do want a result that is pseudorandomly generated, rather than deterministically, use the -R flag:
% mdpants -R Unplagiarized.Cytotropism.Ravelings % mdpants -R Bismuthous.Fizzwater.Maxicoats
How it works
It’s embarrassingly simple:
- Hash the content of the given file
- Use that hash to seed a PRNG (for the non-deterministic version, the seed comes from os.urandom.)
- Use that seeded PRNG to get the indices of the N words
- Print out the concatenated words
Yes, you could probably do this in a bash script and it would work just fine. However, reading and writing the aligned word lists was easier in Python.
Reading through more than 300,000 words can take a while. To speed things up, run make to produce a more efficient version of the word list. Then run mdpants with the --bin <file> option, like so:
% echo 'Hello World' > myfile % mdpants --bin words.bin myfile
While the generation of the binary wordlist takes a while, and the resulting file is quite a bit larger than the original file, you will find that mdpants finishes much faster with the binary wordlists.
The words used by this tool come from a mildly curated version of the _”Single”_ word list of the Moby project. The original list was released to the public domain in 1996, and contained 354,984 words. The modified version used in this project contains wc words.txt words.
What I’ve changed compared to the original list:
- any line matching [^a-z\s] was removed
- any single-letter words were removed
Thus, all words contain only a-z and have a length of at least 2.
Here’s what I will use this tool for: I often share files by putting them in a folder on my server without access restriction. But I don’t want people to be able to see what else is lying around there. The content of that folder is not enumerable, but people could still try to guess filenames. Using the hash of the file as the filename would solve that, but those URLs would not be pronounceable. With Mustache Donkey Pants I can easily generate unique, memorable and pronounceable file names without having to worry about collisions or people guessing URLs.
Although alias md5=mdpants --emoticons -N 16 sounds like a great idea, you really shouldn’t use this as a sort of weird replacement for a hash function.
I’ll buy you a beer if you find the file that produces Mustache.Donkey.Pants!
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size mdpants-0.8.9-py2-none-any.whl (2.4 MB)||File type Wheel||Python version py2||Upload date||Hashes View|
|Filename, size mdpants-0.8.9.tar.gz (2.4 MB)||File type Source||Python version None||Upload date||Hashes View|