{ "info": { "author": "Moritz Neikes", "author_email": "moritz@post-apocalyptic-crypto.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: Public Domain", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7" ], "description": "Mustache Donkey Pants\n=====================\n\nThis is a small tool to generate deterministic, pronounceable and memorable words from a given input.\nInspired by https://destructible.io/ and https://what3words.com/.\n\nInstall\n-------\n\n::\n\n pip install mdpants\n\nOr::\n\n git clone git@github.com:25A0/MustacheDonkeyPants.git\n python setup.py develop\n\n\nUsage\n-----\n\n:: \n\n % echo 'Hello World!' > myfile\n % mdpants myfile\n Plottage.Hypoazoturia.Congresswomen\n\nThe output depends on the file content, not the filename::\n\n % echo 'Thanks for all the fish!' > myfile\n % mdpants myfile\n Noncalculable.Cremationist.Somersetted\n % echo 'Thanks for all the fish!' | mdpants -\n Noncalculable.Cremationist.Somersetted\n\n\nYou can vary the number of words that the output is comprised of::\n\n % echo 'Hello World' > myfile\n % mdpants -N5 myfile\n Plottage.Hypoazoturia.Congresswomen.Affiliable.Specks\n\nYou can specify a different list of words if you want::\n\n % echo \"foo\\nbar\\nbaz\" > foolist\n % echo 'Hello World!' | mdpants --in foolist -\n Bar.Bar.Foo\n\nIt works with emoticons, too::\n\n % echo 'Hello World!' > myfile\n % mdpants --emoticons myfile\n \ud83d\ude33.\ud83d\ude1f.\ud83d\ude0d\n\nTo change the delimiter between words, use the ``-c`` option::\n\n % echo 'Never gonna give you up' > myfile\n % mdpants -c ' - ' myfile\n Lings - Distractedness - Buhl\n\nIf you do want a result that is pseudorandomly generated, rather than\ndeterministically, use the ``-R`` flag::\n\n % mdpants -R\n Unplagiarized.Cytotropism.Ravelings\n % mdpants -R\n Bismuthous.Fizzwater.Maxicoats\n\nHow it works\n============\n\nIt's embarrassingly simple:\n\n1. Hash the content of the given file\n2. Use that hash to seed a PRNG (for the non-deterministic version, the seed comes from ``os.urandom``.)\n3. Use that seeded PRNG to get the indices of the ``N`` words\n4. Print out the concatenated words\n\nYes, you could probably do this in a bash script and it would work just fine.\nHowever, reading and writing the aligned word lists was easier in Python.\n\nAligned wordlists\n-----------------\n\nReading through more than 300,000 words can take a while. To speed things up,\nrun ``make`` to produce a more efficient version of the word list. Then run\nmdpants with the ``--bin `` option, like so::\n\n % echo 'Hello World' > myfile\n % mdpants --bin words.bin myfile\n\nWhile the generation of the binary wordlist takes a while, and the resulting\nfile is quite a bit larger than the original file, you will find that mdpants\nfinishes much faster with the binary wordlists.\n\nWords\n=====\n\nThe words used by this tool come from a mildly curated version of the\n_\"Single\"_ word list of the `Moby project`_. The original list was\nreleased to the public domain in 1996, and contained 354,984 words. The\nmodified version used in this project contains `wc words.txt` words.\n\nWhat I've changed compared to the original list:\n\n- any line matching ``[^a-z\\s]`` was removed\n- any single-letter words were removed\n\nThus, all words contain only a-z and have a length of at least 2.\n\nBut... why?\n===========\n\nHere's what I will use this tool for: I often share files by putting them in a\nfolder on my server without access restriction. But I don't want people to be\nable to see what else is lying around there. The content of that folder is not\nenumerable, but people could still try to guess filenames. Using the hash of\nthe file as the filename would solve that, but those URLs would not be\npronounceable. With Mustache Donkey Pants I can easily generate unique,\nmemorable and pronounceable file names without having to worry about collisions\nor people guessing URLs.\n\nDisclaimer\n==========\n\nAlthough ``alias md5=mdpants --emoticons -N 16`` sounds like a great idea, you\nreally shouldn't use this as a sort of weird replacement for a hash function.\n\nFinal note\n==========\n\nI'll buy you a beer if you find the file that produces ``Mustache.Donkey.Pants``!\n\n.. _Moby project: http://icon.shef.ac.uk/Moby/mwords.html\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/25A0/MustacheDonkeyPants", "keywords": "tool hash deterministic pronounceable words", "license": "Public Domain", "maintainer": "", "maintainer_email": "", "name": "mdpants", "package_url": "https://pypi.org/project/mdpants/", "platform": "", "project_url": "https://pypi.org/project/mdpants/", "project_urls": { "Homepage": "https://github.com/25A0/MustacheDonkeyPants" }, "release_url": "https://pypi.org/project/mdpants/0.8.9/", "requires_dist": [ "numpy", "pytest; extra == 'test'" ], "requires_python": "", "summary": "A small tool to generate deterministic, pronounceable and memorable words from a given input", "version": "0.8.9" }, "last_serial": 2517928, "releases": { "0.8.7": [ { "comment_text": "", "digests": { "md5": "30ec11cf0a6c5d71eac628cc25e99572", "sha256": "0e5c1aac6d61364168aade990057aac2aac9b8e00496457b4dbc5b238d4ca101" }, "downloads": -1, "filename": "mdpants-0.8.7-py2-none-any.whl", "has_sig": false, "md5_digest": "30ec11cf0a6c5d71eac628cc25e99572", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 1036419, "upload_time": "2016-11-04T19:18:10", "url": "https://files.pythonhosted.org/packages/83/32/9f818dc7d1120d1ed8bd0036c88ba2ca6adcfabbf2600f9d284a7b3a1d51/mdpants-0.8.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f8f2e77b2308c8850371955c7d779fc", "sha256": "a7ad4a2a9e51cc7e44fa20bad43f6d9b6d369de5b89aa869cb51895f44de9b9b" }, "downloads": -1, "filename": "mdpants-0.8.7.tar.gz", "has_sig": false, "md5_digest": "9f8f2e77b2308c8850371955c7d779fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1033905, "upload_time": "2016-11-04T19:18:14", "url": "https://files.pythonhosted.org/packages/4d/04/6ddf0bc933b95dccee30808851263e03a87f9eceba664686c276e6d27083/mdpants-0.8.7.tar.gz" } ], "0.8.8": [ { "comment_text": "", "digests": { "md5": "078120183b18fe80380053296954bcd7", "sha256": "78ffab1c5c77e24076eeda35efd6ee2a3cedac1ee6bf42fdb49f6c66938de9e6" }, "downloads": -1, "filename": "mdpants-0.8.8-py2-none-any.whl", "has_sig": false, "md5_digest": "078120183b18fe80380053296954bcd7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 2396360, "upload_time": "2016-11-04T21:10:16", "url": "https://files.pythonhosted.org/packages/ac/24/a23e4b5c51338fe918b797ac754a844854462de136df507ebb9b42f14db8/mdpants-0.8.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d6d7625cd54d4f1c0bd7c5e77c6d63e", "sha256": "7be5639ef714bcd8e2be3be574e07b361cab6af70926376c4616933c6e9e2416" }, "downloads": -1, "filename": "mdpants-0.8.8.tar.gz", "has_sig": false, "md5_digest": "8d6d7625cd54d4f1c0bd7c5e77c6d63e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2373334, "upload_time": "2016-11-04T21:10:21", "url": "https://files.pythonhosted.org/packages/99/41/963fa5f074e2cfbd731dd46b6bf3da642837a89a518ffb9cdcafb1ee8ed5/mdpants-0.8.8.tar.gz" } ], "0.8.9": [ { "comment_text": "", "digests": { "md5": "69f6f6d288cebfe5abc00b737dc1d21e", "sha256": "5d43c17f3f7d87d6538419edfe2d27ea50bca9236d642564e613dcaac617a953" }, "downloads": -1, "filename": "mdpants-0.8.9-py2-none-any.whl", "has_sig": false, "md5_digest": "69f6f6d288cebfe5abc00b737dc1d21e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 2396998, "upload_time": "2016-12-14T05:48:26", "url": "https://files.pythonhosted.org/packages/50/a3/a332076e5f03dd17ed466fa6eea848991190e1b880edb348471ee1448a14/mdpants-0.8.9-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e5d350acbb091980b22a8ebe49c8b7ad", "sha256": "eec2a2b8c083076f468c8a990787c8ad11abb7d56f6f85fb28d9e61b784f5abb" }, "downloads": -1, "filename": "mdpants-0.8.9.tar.gz", "has_sig": false, "md5_digest": "e5d350acbb091980b22a8ebe49c8b7ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2373637, "upload_time": "2016-12-14T05:48:31", "url": "https://files.pythonhosted.org/packages/f1/8a/7c160105f5eb35e2e9989e8c9acc9603921ec8a09e952b02d79297985902/mdpants-0.8.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "69f6f6d288cebfe5abc00b737dc1d21e", "sha256": "5d43c17f3f7d87d6538419edfe2d27ea50bca9236d642564e613dcaac617a953" }, "downloads": -1, "filename": "mdpants-0.8.9-py2-none-any.whl", "has_sig": false, "md5_digest": "69f6f6d288cebfe5abc00b737dc1d21e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 2396998, "upload_time": "2016-12-14T05:48:26", "url": "https://files.pythonhosted.org/packages/50/a3/a332076e5f03dd17ed466fa6eea848991190e1b880edb348471ee1448a14/mdpants-0.8.9-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e5d350acbb091980b22a8ebe49c8b7ad", "sha256": "eec2a2b8c083076f468c8a990787c8ad11abb7d56f6f85fb28d9e61b784f5abb" }, "downloads": -1, "filename": "mdpants-0.8.9.tar.gz", "has_sig": false, "md5_digest": "e5d350acbb091980b22a8ebe49c8b7ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2373637, "upload_time": "2016-12-14T05:48:31", "url": "https://files.pythonhosted.org/packages/f1/8a/7c160105f5eb35e2e9989e8c9acc9603921ec8a09e952b02d79297985902/mdpants-0.8.9.tar.gz" } ] }