エラー修正を使用して、ペンと紙でファイルを転送する方法


22

ペンと紙だけを使用してファイルを転送する方法を探しています。

これは、私が探している密度がはるかに低く、プリンターやスキャナーを使いたくないことを除いて、paperbakといくらか似ています。

明らかに、最初の答えはBase64エンコーディングです。しかし、このような多数の文字を読み書きすると、エラーが発生することになります。私の目的では、エラーは受け入れられません。

2番目の答えは、リードソロモンエラー修正コード(たとえば、rsbepを使用)です。ただし、これは問題でもあります。私の理解では、リードソロモンコードは挿入/削除エラーを修正しないためです。

挿入/削除を意識したエラー修正コードで任意のファイルをエンコード/デコードするプログラムはありますか?できれば、Windows、Linux、Mac OS Xで動作するはずです

明らかに、一般的な問題に対する他の解決策は大歓迎です。


書くこと、または読むだけでエラーを期待しますか?
クリスチャンマン

...私は両方のエラーを期待するが、私はまた、彼らは同等であることを期待したい
ジェレミーSalwen

あ、ごめんなさい。誤読し、印刷していると思った。手書きで書きたいですか?
クリスチャンマン

3
何色のペンを使用できますか?:)
Der Hochstapler

1
単色のペンのみ、それ以外の場合はそれを転写するのは非常に困難です。私は実際に圧縮、署名、暗号化されたテキストを送信しているため、50%の冗長率であっても、書き込みの合計量は実際に元のテキストを書き込む場合の1.5倍未満になります(圧縮を考慮すると)。ただし、英語のテキストをコピーするよりもランダムな文字をコピーするのは難しいという問題があります。それで、あなたの質問に答えるために、確かに数キロバイトの範囲でのみ。
ジェレミーサルウェン

回答:


4

otherwise transcribing it will be too difficult問題になるかどうかは疑問です。

赤、緑、青、黒があるとします。データをからの文字のコレクションに変換するスクリプトを作成することができますRGBY。例:(RGBYGBRYBGBYRYYBYBRYYGまたはRed Green Blue Black Green Blue Red Black...Excelシートでも)からやり直します。バイナリデータをベース2(またはベース16からの16進データ)からベースに、変換する色の量(この例では4)に変換するだけです。

現在、最も論理的なアプローチは、16色を取得することです。この方法では、4倍少ないドットを使用する必要があるため、ペンを切り替えるだけの価値があります。これにより、必要に応じて用紙に4倍のデータを書き込むことができます。または、ドットを配置するときに4倍の精度でなくても、スケーリングはユーザー次第です。私は本当にすべてのビットを描画しないことをお勧めします。

たとえば、グリッドに入れることができる(ではなく)5565 bytes16進数の量を取得するには、2を掛ける必要があります。11130 hexadecimals44520 bits106 x 106

データの種類に応じて、おそらくいくつかの最適化を行うことができます...

ヒント:最も明確な(最も対照的な)色を選択してみてください...

単一のペンを使用できる代替手段:

  • 異なる記号によって異なる進数を表し-/|\+、...

  • さまざまな16進数を小さなピクセルフォントで表します。アバターをご覧ください。

    これにより、Base 32(またはBase 36)のようなものを使用するのも便利です。なお、Q9あなたは右上のピクセルが必要になるので、同一のQ明確な区別のためにホワイトをします。Base 32には、53 x 53例としてグリッドと、文字を区別するための小さなスペースが必要です。


さて、これにはいくつかの問題があります。1.私は色盲です。2.たくさんのペンを購入する必要があります。3.エラー修正にはまったく役立ちません。4.それは、人間が苦手としているテキストの代わりにコードを書くことを含みます。
ジェレミーサルウェン

@JeremySalwen:うーん、グリッドに文字を書くのは本当に難しいことではありません。また、追加の縦方向チェック番号またはCRCを記述することにより、エラーを修正できます。しかし、実際には、グリッドからグリッドに文字を上書きするのは非常に簡単です。最悪の場合は、もう一度検証して検証するだけです。
タマラWijsman

1
@JeremySalwen:そして、あなたが色盲の場合、あなたは色盲である色をまったくとっていない。
タマラWijsman

1
色覚異常は、特定の色を見ることが選択的にできないことよりも、色空間の次元の減少に近い。
つまり

@Tom混乱を防ぐために、おそらく古いアバターを入れるべきです:)
ネイトコッペンヘイバー

2

データを読み書きできるようにしたい場合、Base64と多くのテキストエンコーディングの問題は、I、l、1、|、/、0、O、oなどの文字を使用していることです。お互いに。

ダグラスクロックフォードのBase32エンコーディングを調査します。そのアルファベットは、同様の文字を避けるために特に選択され、エラー検出が含まれています。


おかげで、私はおそらくこれを使用しますが、それでもエラー修正の問題は解決しません。
ジェレミーサルウェン

@ Jeremy、Crockfordの実装にはエラー検出が含まれます。エラーを修正する必要がある場合は、Forward-Error Correction(en.wikipedia.org/wiki/Forward_error_correction)を調査してください。
ドゥールハイアーチ

1

あなたのコメントを読んだ後、それはより合理的に聞こえます。このようなメガバイトのデータをエンコードするつもりなのかどうか、私にはわかりませんでした。

オリバーの提案に沿って、ベーコンの暗号からページを借用してデータ密度を高めることをお勧めします。刑務所のギャングは、2つの異なるスクリプトスタイルで書かれたミシブで隠されたメッセージをエンコードするためによく使用します-通常は、小文字または印刷物と筆記体の文字、例えば

Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
                                  =   P     A     S     T     A

ただし、目標はステグノグラフィではないため、これを使用してグリフセットを拡張するだけです。これを行うと、印刷および筆記体の英数字を使用して最大114個のグリフ、または二重文字エンコードを使用して12996個のコードポイントを作成できます。

ただし、15を超え256未満のすべてのグリフカウントはバイナリデータのストレート暗号では本質的に同じであるため(つまり、各バイトを表すには2文字が必要であり、1文字あたり4ビットのデータ密度が得られます)すべてのケース)、追加の98グリフ/ 12740コードポイントをエラー検出/修正に使用できます。

これを行う方法は次のとおりです。

  • 256の最も簡単な読み取り/書き込み文字コンボのセットを選択します。他の文字コンボが発生した場合、それはコピーエラーであることがわかります。
  • 2つのバージョンの終了文字をパリティビットとして使用します。
  • 50種類の16文字のグリフセットを作成します。その後、それらを使用してエラー訂正データを暗号エンコードできます。

    たとえば{set 1}{set 1}、次の3つのニブルが等しい0x000{set 1}{set 2}等しい0x001、などを意味します。

    これを使用して、4096個の可能な1.5バイト値のうち2500個以上を表すことができます。同様に、16セットだけを使用して次のバイトのすべての値を表すことができ、エンコードされたデータの長さを増やすことなく100%の冗長性が得られます。

または、追加の圧縮に追加のグリフを使用できます。

  • 98個の単一文字コードポイントを選択して、可変幅エンコーディングを実装します。これにより、エンコードされたコンテンツの平均サイズが約20%削減されます。
  • 異なるグリフセットまたはグリフセットの組み合わせを使用して、反復ニブル/バイトを表すことにより、ランレングスエンコーディングに似たものを実装します。例えばAb= aba; aB= abab; AB= ababab...
  • 余分なグリフまたはコードポイントを使用して、データ内で繰り返される「単語」と「フレーズ」を表します。事前に圧縮されたデータは高レベルのエントロピーを持つ可能性が高いので、これがどれほど効果的かはわかりません。


コピーエラーをさらに減らすには、エンコードされたコンテンツをグリッドラインに表示し、グラフ用紙にコピーします。列/行の色が交互に変わるカスタムステーショナリー、または文字列と番号付き行のチェス盤スタイルのチェッカーグリッドを使用してすばやく検索できる場合、コピーの精度がさらに向上します。

エラー検出の簡単な形式として、交互のグリッドレイアウトと交互の文字スタイルを組み合わせることもできます。すなわち、奇数列が常に大文字である場合、トランスクライバが奇数列に小文字を書いていることに気付いた場合、彼らはエラーを犯したことを知り、それがどこで起こったのかを追跡することができます。


あなたの主な優先事項が精度である場合、バイナリエンコーディング+ ハミングコードを使用します。標準のグラフ用紙で(12、8)短縮ハミングコードを使用すると、187バイトのみに適合し、124バイトのデータのみをエンコードできます。しかし、それは非常に迅速に転写され(1の場合はスラッシュ、0の場合は何もない)、単一のエラー修正を提供することができます。追加のパリティビット(13、8)をタックすると、SECDED(単一エラー訂正、二重エラー検出)が提供されます。(15、11)や(31、26)のような標準のハミングコードを使用すると、シートごとにそれぞれ137バイトと156バイトのデータで効率がさらに向上します。転写器の精度に応じて、さらに高いコードレートを実現できます。

また、バイナリエンコーディングは読みやすく(大声で)およびOCR / OMRになります。


もちろん、大文字を使用することも計画しています。あなたが提案したすべてのエラー修正スキームのうち、カスタムファイル形式などを設計せずにそれらを実装する方法がありません。ファイルにエラー修正保護をかける前例は本当にありませんか?おそらく、カスタムプログラムを作成することも非常に望ましくないことにも言及すべきでしょうか。エラー修正コードでファイルを保護するだけのプログラムは見つかりません。
ジェレミーサルウェン

私のポイントは、大文字だけを使用するのではなく、異なるスクリプト/フォントを使用することでした。大文字と小文字の英数字のみを使用する場合、62個のグリフ、または3844個のコードポイントしかありません。2つのスクリプトを使用して、転送に使用されているストレージメディアを利用することで、コードポイントの3倍以上を取得できます。これが私の答えの目的でした。これが書面媒体であるという事実を利用したくない場合は、エラーエンコーディングを実装するファイル形式がたくさんあります。ほとんどのアーカイブ/圧縮形式にはエラー修正機能が組み込まれています。
Lèsemajesté12年

ただし、新しいファイル形式を作成することの意味がわかりません。私が言及したすべての手法は、手書きのテキスト/マークで任意のバイナリデータを視覚的にエンコードするためのものです。そのようなコンピューターにそれらを保存することはありません(スキャンした画像を保存する以外にはできません)。基本的に、データをエンコードして、ユーザーがコピーダウンできるように画面に画像を出力するプログラムが必要です。次に、それをコンピューターに戻すには、スキャンされた画像をOCR / OMRで読み込むか、キーボード(たとえば、筆記体「a」の場合はalt+)aで入力を受け付けるデコードプログラムを使用します。
Lèseはmajesté

参照してください、それは私が問題を抱えているものです:「あなたはデータをエンコードするプログラムを持っているでしょう」...いいえ、私はしません。これを行うプログラムはありませんし、これを行うプログラムも知りません。また、他のエラーに加えて、ファイルの先頭付近から削除された(消去されていない)バイトを適切に処理できるファイル形式を認識していません。これらはデータ密度を高める方法であることは間違いありませんが、それが今の私の主な関心事ではありません。読み取り/書き込みの容易さとエラー保護です。
ジェレミーサルウェン

@Jeremy:私が言ったように、ほとんどのアーカイブ形式にはエラー修正機能が組み込まれており、ほとんどの人にとって十分に機能するようです。しかし、もしあなたが手書きのために特別に設計された何かが欲しいなら、あなたは書くか誰かにあなたのために何かを書かせる必要があるでしょう。それ以外の場合、最善の策は、高ノイズチャネルを介して送信するために設計された既存のアプリケーションを調べることです。ただし、データ密度を気にしない最も簡単なオプションは、高レベルのエラー訂正を備えたRARファイルを使用し、ヘッダーモジュールを3回繰り返してトリプルモジュラー冗長化することです。
Lèseはmajesté

1

この目的のためにSレコードを使用していました。エラー検出のために、行ごとに簡単なチェックサムがありました。通常、最後の行以外はすべて固定長であるため、行末マーカーは挿入と削除のチェックとして機能しました。ただし、行の欠落のチェックはありませんでした。このために、単に行数を数えました。ほとんどのファイルは100行未満の短いものでしたが、少なくとも1行は300行以上ありました。ファイルをシステムに入力するのは非常に面倒でした。もちろん、この方法で転送された最初のプログラムにはダウンローダーがありました;)


0

光学式マーク認識は、機械で読み取り可能な手書きフォームを作成するために何十年も使用されてきました。ウィキペディアのページには、いくつかのオープンソースバージョンへのリンクがあります。

学校は長い間テストにOMRを使用してきました。フォームは使いやすく、読みやすく、通常はキーボード入力よりも正確です。精度を高めるために、ScantronやReMarkのような商用メーカーはカスタムフォームを作成できます。


興味深いことに、残念ながら、これを行うにはスキャナーまたはコンピューターに接続された他のイメージングシステムが必要です。
ジェレミーサルウェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.