{"id":17070942,"url":"https://github.com/singpolyma/mnemonicode","last_synced_at":"2025-08-20T12:32:03.154Z","repository":{"id":531866,"uuid":"160906","full_name":"singpolyma/mnemonicode","owner":"singpolyma","description":"Fork of http://web.archive.org/web/20101031205747/http://www.tothink.com/mnemonic/","archived":false,"fork":false,"pushed_at":"2023-02-14T00:29:50.000Z","size":32,"stargazers_count":157,"open_issues_count":3,"forks_count":20,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-12-09T22:22:38.778Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/singpolyma.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2009-03-27T13:31:11.000Z","updated_at":"2024-12-03T21:29:49.000Z","dependencies_parsed_at":"2022-07-07T16:37:41.031Z","dependency_job_id":"eadab5f2-edb5-4517-bbc7-750e96506720","html_url":"https://github.com/singpolyma/mnemonicode","commit_stats":{"total_commits":31,"total_committers":7,"mean_commits":4.428571428571429,"dds":0.3548387096774194,"last_synced_commit":"315aed6f1272cf2afa2eb1e1ed4a8879a49e5a6c"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singpolyma%2Fmnemonicode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singpolyma%2Fmnemonicode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singpolyma%2Fmnemonicode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singpolyma%2Fmnemonicode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/singpolyma","download_url":"https://codeload.github.com/singpolyma/mnemonicode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230423564,"owners_count":18223435,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T11:34:38.277Z","updated_at":"2024-12-19T11:12:50.191Z","avatar_url":"https://github.com/singpolyma.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Oren Tirosh is no longer maintaining the original version of this project.\nStephen Paul Weber likes it and is making it accessible on GitHub.\n\nThese routines implement a method for encoding binary data into a sequence\nof words which can be spoken over the phone, for example, and converted\nback to data on the other side.\n\nFor more information see \u003chttp://web.archive.org/web/20101031205747/http://www.tothink.com/mnemonic/\u003e\n\nThere are some other somewhat similar systems that seem less satisfactory:\n\n- OTP was designed for easy typing, and for minimizing length, but as\n  a consequence the word list contains words that are similar (\"AD\"\n  and \"ADD\") that are poor for dictating over the phone\n\n- PGPfone has optimized \"maximum phonetic distance\" between words,\n  which resolves the above problem but has some other drawbacks:\n\n  - Low efficiency, as it encodes a little less than 1 bit per\n    character;\n\n  - Word quality issues, as some words are somewhat obscure to\n    non-native speakers of English, or are awkward to use or type.\n\nMnemonic tries to do better by being more selective about its word\nlist.  Its criteria are thus:\n\nMandatory Criteria:\n\n - The wordlist contains 1626 words.\n\n - All words are between 4 and 7 letters long.\n\n - No word in the list is a prefix of another word (e.g. visit,\n   visitor).\n\n - Five letter prefixes of words are sufficient to be unique. \n\nLess Strict Criteria:\n\n  - The words should be usable by people all over the world. The list\n    is far from perfect in that respect. It is heavily biased towards\n    western culture and English in particular. The international\n    vocabulary is simply not big enough. One can argue that even words\n    like \"hotel\" or \"radio\" are not truly international. You will find\n    many English words in the list but I have tried to limit them to\n    words that are part of a beginner's vocabulary or words that have\n    close relatives in other european languages. In some cases a word\n    has a different meaning in another language or is pronounced very\n    differently but for the purpose of the encoding it is still ok - I\n    assume that when the encoding is used for spoken communication\n    both sides speak the same language.\n\n  - The words should have more than one syllable. This makes them\n    easier to recognize when spoken, especially over a phone\n    line. Again, you will find many exceptions. For one syllable words\n    I have tried to use words with 3 or more consonants or words with\n    diphthongs, making for a longer and more distinct\n    pronounciation. As a result of this requirement the average word\n    length has increased. I do not consider this to be a problem since\n    my goal in limiting the word length was not to reduce the average\n    length of encoded data but to limit the maximum length to fit in\n    fixed-size fields or a terminal line width.\n\n  - No two words on the list should sound too much alike. Soundalikes\n    such as \"sweet\" and \"suite\" are ruled out. One of the two is\n    chosen and the other should be accepted by the decoder's\n    soundalike matching code or using explicit aliases for some words.\n\n  - No offensive words. The rule was to avoid words that I would not\n    like to be printed on my business card. I have extended this to\n    words that by themselves are not offensive but are too likely to\n    create combinations that someone may find embarrassing or\n    offensive. This includes words dealing with religion such as\n    \"church\" or \"jewish\" and some words with negative meanings like\n    \"problem\" or \"fiasco\". I am sure that a creative mind (or a random\n    number generator) can find plenty of embarrasing or offensive word\n    combinations using only words in the list but I have tried to\n    avoid the more obvious ones. One of my tools for this was simply a\n    generator of random word combinations - the problematic ones stick\n    out like a sore thumb.\n\n  - Avoid words with tricky spelling or pronounciation. Even if the\n    receiver of the message can probably spell the word close enough\n    for the soundalike matcher to recognize it correctly I prefer\n    avoiding such words. I believe this will help users feel more\n    comfortable using the system, increase the level of confidence and\n    decrease the overall error rate. Most words in the list can be\n    spelled more or less correctly from hearing, even without knowing\n    the word.\n\n  - The word should feel right for the job. I know, this one is very\n    subjective but some words would meet all the criteria and still\n    not feel right for the purpose of mnemonic encoding. The word\n    should feel like one of the words in the radio phonetic alphabets\n    (alpha, bravo, charlie, delta etc).\n\nmnemonic.h\tHeader file\nmnemonic.c\tEncoding/decoding and associated routines\nmn_wordlist.c\tThe word list itself\nmnencode.c\tSample program - encode data from stdin to stdout\nmndecode.c\tSample program - decode data from stdin to stdout\n\n== Other Implementations ==\n\nElixr:      \u003chttps://github.com/mwmiller/mnemonex\u003e\nGo:         \u003chttps://bitbucket.org/dchapes/mnemonicode\u003e\nJavaScript: \u003chttps://github.com/mbrubeck/mnemonic.js\u003e\nPython:     \u003chttps://github.com/bwhmather/python-mnemonicode\u003e\nRust:       \u003chttps://github.com/mbrubeck/rust-mnemonic\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsingpolyma%2Fmnemonicode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsingpolyma%2Fmnemonicode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsingpolyma%2Fmnemonicode/lists"}