There are no reviews yet. Be the first to send feedback to the community and the maintainers!
Oren Tirosh is no longer maintaining the original version of this project. Stephen Paul Weber likes it and is making it accessible on GitHub. These routines implement a method for encoding binary data into a sequence of words which can be spoken over the phone, for example, and converted back to data on the other side. For more information see <http://web.archive.org/web/20101031205747/http://www.tothink.com/mnemonic/> There are some other somewhat similar systems that seem less satisfactory: - OTP was designed for easy typing, and for minimizing length, but as a consequence the word list contains words that are similar ("AD" and "ADD") that are poor for dictating over the phone - PGPfone has optimized "maximum phonetic distance" between words, which resolves the above problem but has some other drawbacks: - Low efficiency, as it encodes a little less than 1 bit per character; - Word quality issues, as some words are somewhat obscure to non-native speakers of English, or are awkward to use or type. Mnemonic tries to do better by being more selective about its word list. Its criteria are thus: Mandatory Criteria: - The wordlist contains 1626 words. - All words are between 4 and 7 letters long. - No word in the list is a prefix of another word (e.g. visit, visitor). - Five letter prefixes of words are sufficient to be unique. Less Strict Criteria: - The words should be usable by people all over the world. The list is far from perfect in that respect. It is heavily biased towards western culture and English in particular. The international vocabulary is simply not big enough. One can argue that even words like "hotel" or "radio" are not truly international. You will find many English words in the list but I have tried to limit them to words that are part of a beginner's vocabulary or words that have close relatives in other european languages. In some cases a word has a different meaning in another language or is pronounced very differently but for the purpose of the encoding it is still ok - I assume that when the encoding is used for spoken communication both sides speak the same language. - The words should have more than one syllable. This makes them easier to recognize when spoken, especially over a phone line. Again, you will find many exceptions. For one syllable words I have tried to use words with 3 or more consonants or words with diphthongs, making for a longer and more distinct pronounciation. As a result of this requirement the average word length has increased. I do not consider this to be a problem since my goal in limiting the word length was not to reduce the average length of encoded data but to limit the maximum length to fit in fixed-size fields or a terminal line width. - No two words on the list should sound too much alike. Soundalikes such as "sweet" and "suite" are ruled out. One of the two is chosen and the other should be accepted by the decoder's soundalike matching code or using explicit aliases for some words. - No offensive words. The rule was to avoid words that I would not like to be printed on my business card. I have extended this to words that by themselves are not offensive but are too likely to create combinations that someone may find embarrassing or offensive. This includes words dealing with religion such as "church" or "jewish" and some words with negative meanings like "problem" or "fiasco". I am sure that a creative mind (or a random number generator) can find plenty of embarrasing or offensive word combinations using only words in the list but I have tried to avoid the more obvious ones. One of my tools for this was simply a generator of random word combinations - the problematic ones stick out like a sore thumb. - Avoid words with tricky spelling or pronounciation. Even if the receiver of the message can probably spell the word close enough for the soundalike matcher to recognize it correctly I prefer avoiding such words. I believe this will help users feel more comfortable using the system, increase the level of confidence and decrease the overall error rate. Most words in the list can be spelled more or less correctly from hearing, even without knowing the word. - The word should feel right for the job. I know, this one is very subjective but some words would meet all the criteria and still not feel right for the purpose of mnemonic encoding. The word should feel like one of the words in the radio phonetic alphabets (alpha, bravo, charlie, delta etc). mnemonic.h Header file mnemonic.c Encoding/decoding and associated routines mn_wordlist.c The word list itself mnencode.c Sample program - encode data from stdin to stdout mndecode.c Sample program - decode data from stdin to stdout == Other Implementations == Elixr: <https://github.com/mwmiller/mnemonex> Go: <https://bitbucket.org/dchapes/mnemonicode> JavaScript: <https://github.com/mbrubeck/mnemonic.js> Python: <https://github.com/bwhmather/python-mnemonicode> Rust: <https://github.com/mbrubeck/rust-mnemonic>
shttpd
An HTTP server written in POSIX shell scriptOpenPGP-Python
A port of OpenPGP-PHP to Pythonsingpolyma-kernel
A basic microkernelunexceptionalio
IO without any PseudoExceptionscheogram
Moved to https://git.singpolyma.net/cheogramwai-session
Flexible session middleware for WAIFuseFS
Port FuseFS to Ruby1.9openpgp-spec
Simplified, modular OpenPGP specificationst-sdl
SDL based terminal derived from stCopyright-Act-Citizens--Draft
This project is about writing the people's ideal copyright law.social-search-me
The Open Web's people search engineOpenPGP-Haskell
xgame
High-level game framework based on rubygamemustache2hs
An attempt to compile Mustache templates to Haskell codethingmenu
HTML2Markdown
Convert HTML to Markdown in rubytheveeb-ecosystem
Only kinda a secret.sgx-vitelity
XMPP Gateway using Vitelity as a backend.git-date-haskell
Bindings onto the date parsing code from Gitgit-mediawiki
Talk to a mediawiki from gitcs-top-and-bottom
Teaching CS from the top and bottomtwitter2omb
This app lets users subscribe to Twitter.com contacts on any OpenMicroBlogging compatible platfrom.ripple-rails
Rails integration for Ripple payment notifications.git-ticket
Distributed ticket trackingCopyright-Act-of-Canada
icefilms-scripts
singpolyma
This repository is just miscellaneous stuff. It is from my old devjavu SVN repo. Some of this stuff should get it's own repo.haskades
Autogenerate bindings for using Haskell with BB10route-generator
Utility to generate routes for use with yesod-routesNNTP-Forum
A webforum fronend onto an NNTP newsgroup.OpenPGP-CryptoAPI
Implementation of cryptography for use with OpenPGP using the crypto-api librariesplivo-haskell
Plivo API wrapper for HaskellDesktop-Entry-Utility
And librarymusearch
Search ALL the microblogs!ecdsa-haskell
ECDSA stuff in Haskellsingpolymaplay
Code from singpolymaplay.ning.comtagging
Code from tagging.ning.comOpenPGP-Crypto
Implementation of cryptography for use with OpenPGP using the Crypto libraryhttp-pool
Apache-like pool of HTTP subprocessessimple-form-haskell
sock2stream
Tunnel a socket over a single datastream (stdin/stdout)someblogs
Code from someblogs.ning.comwai-hastache
Nice wrapper around hastache for use with WAIruby-oauth-app
Uses oauth_providerPublic-Domain-Calculator
Powered by Freebasepinp
PINP is not Perlshowpath
search-folders
Uses FUSE and locate/updatedb to create "search folders"wrinks
Code from wrinks.ning.comcreole
Utilities that transform from/to creole markuppapercut-wordpress
A WordPress backend for Papercut (NNTP server in Python)ripple-pos
filess
Code from filess.ning.com and jscripts.ning.comMyLibrary
Showcase your books and let other suggest books to you.BitBrawl
An isometric PvP brawler with energyimapmd
Simple single-connection IMAP server for Maildir that speaks STDIN/STDOUTtheveeb-ecosystem-server
Server-side componentsmnw
xoxotools
This is the code from the Ning site. I can no longer actually update the code on the Ning site, as they've taken away that feature.openexchangerates-haskell
Fetch exchange rates from OpenExchangeRates.orgmv
A portable POSIX-compliant implementation of the mv commandadventure
A DSL for writing adventure games.OrdClock
Ordinal clock display widget for Androidwordpress-extended-profile
Pulled out of the DiSo project to this repositoryXNNTPD
eXtensible NNTP DaemonRPNR
Reverse Polish Notation for Rubyelerea-sdl
Elerea FRP wrapper for SDLEmail-Verify
Verify SMTP email addresses using OpenID and Google App Enginenoflash
demand.openid clone in portable PHPchipmunk
Fork of Chipmunk to provide debian packaging for ruby bindingsripple-haskell
Implementation of Ripple client protocol in Haskellaggregator
GSWoT
Gossamere Spider Web of Trust DocumentsHTTP-over-BTP
HTTP over Browser Transfer Protocol (broken HTTP subset)sortable-coding-challenge
hCard-to-Google-Bookmarklet
Because Google SucksNME-Haskell
Bindings onto NME for Haskellredo-gal
Simple photogallery based on redopktree-haskell
Implementation of PKtrees in Haskellipfs-websub
A WebSub hub for all of IPFSbase58address
Parsing and serialization for Base58 addresses (Bitcoin and Ripple)posix-filelock-haskell
Nice wrapper around POSIX fcntl advisory locksroshambo
Simple RPS game webapp in Haskell with WAIsimple-slides
A simple image-and-music slideshow tooltrysh
An interactive POSIX shell tutorial.actionstream-data
YAML and icons for Action Streamssmtp2mta
Listen for SMTP traffic and send it to an MTA scriptraw-materials
Some notes about https://www.hillelwayne.com/post/raw-materials/unexceptionalio-trans
Wrapper around unexceptionalio for ergonomic use with transformerswai-util
Utility functions for WAI that haven't found another home yetwai-digestive-functors
Helpers to bind digestive-functors onto wai requestsWEdit
Edit/view documents with wikitextpermute-RankNTypes
Permutation parsers using higher-kinded polymorphismnntp-maillist
Mailing list-like bridge onto NNTPmualbum
Salmon
Fork of Salmon GAE code to use OpenPGPwai-session-tokyocabinet
Session store based on Tokyo Cabinetbadcode.rocks
currency-haskell
Types representing standard and non-standard currenciesLove Open Source and this site? Check out how you can help us