Як перенести файл через ручку та папір, з виправленням помилок


22

Я шукаю спосіб передати файл, використовуючи лише ручку та папір.

Це дещо схоже на paperbak , за винятком щільності, яку я шукаю, набагато, набагато нижче, і я не хочу використовувати принтер чи сканер.

Очевидно, що перша відповідь - кодування Base64 . Але написання та читання такої великої кількості символів неминуче призводить до помилок. У моїх цілях будь-яка помилка неприпустима.

Друга відповідь може бути кодом виправлення помилок Ріда-Соломона (наприклад, за допомогою rsbep ). Однак це також є проблемою, оскільки, наскільки я розумію, коди Рід-Соломона не виправляють помилки вставки / видалення, які, ймовірно, є більш імовірними, ніж помилки підміни в цьому випадку.

Чи є яка-небудь програма, яка буде кодувати / декодувати довільні файли з введенням / видаленням відомо про виправлення помилок? Переважно він повинен працювати в Windows, Linux та Mac OS X

Очевидно, будь-яке інше рішення загальної проблеми вітається.


Чи очікуєте помилок у написанні чи просто читанні?
Крістіан Манн

Я очікую помилок в обох, але я також очікую, що вони будуть рівнозначними ...
Джеремі Салвен

Ой, вибачте. Я неправильно читав і думав, що ти друкуєш. Ви хочете написати це вручну?
Крістіан Манн

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) у базу у кількість кольорів, які ви берете (4 у цьому прикладі).

Тепер самим логічним підходом було б отримати собі 16 кольорів. Таким чином, ви повинні використовувати в 4 рази менше крапок, що робить перемикання між ручками того вартим. Це дозволяє записати на папері в 4 рази більше даних, якщо вам потрібно, або, можливо, це може бути в 4 рази менш точним, коли ви ставите крапки, масштабування залежить від вас. Я б дуже радив не малювати кожен шматочок.

Наприклад, 5565 bytesпотрібно було б помножити на два, щоб отримати кількість шістнадцяткових знаків, які 11130 hexadecimals(на відміну від них 44520 bits), які можна помістити в 106 x 106сітку.

Залежно від типу даних, ви, ймовірно, можете отримати деякі оптимізації ...

Підказка: Спроба вибрати найвиразніші (найбільш контрастні) кольори ...

Альтернативи, які можуть використовувати одну ручку:

  • Представляє різні шістнадцятиричні різними символи -, /, |, \, +, ...

  • Представляйте різні шістнадцяткові знаки маленьким шрифтом пікселів, дивіться мій аватар.

    Це навіть корисно використовувати щось на кшталт Base 32 (або Base 36). Зверніть увагу, що і Qі 9те саме, тож ви хочете, щоб верхній правий піксель піктограми " QБілий" був чітким. База 32 вимагає лише 53 x 53сітки для вашого прикладу, плюс невеликий пробіл, щоб розрізняти літери.


Ну, є кілька питань з цим. 1. Я кольоровий. 2. Для цього потрібно придбати купу ручок. 3. Це зовсім не допомагає з виправленням помилок. 4. Він передбачає написання кодів замість тексту, у яких люди гірші.
Джеремі Салвен

@JeremySalwen: Гм, писати символи в сітку не дуже важко. А ви можете виправити помилки, записавши додаткові поздовжні контрольні номери або CRC. Але насправді дуже просто писати листи з сітки в сітку, в гіршому випадку ви просто перейдете її ще раз, щоб перевірити.
Тамара Війсман

1
@JeremySalwen: І якщо ти є сліпою кольором, ти просто не береш жодного з кольорів, для яких ти є кольоровим сліпим.
Тамара Війсман

1
Кольорова сліпота - це скоріше зменшення розмірності кольорового простору, ніж вибіркова неможливість бачити певні кольори. Я маю на увазі, я, мабуть, міг би зняти Чорний, Синій, Жовтий, Червоний, Зелений, Сірий, але не набагато більше
Джеремі Салвен

@Tom Ви, ймовірно, повинні поставити свій старий аватар, щоб запобігти плутанині :)
Nate Koppenhaver

2

Якщо ви хочете, щоб люди мали змогу читати та записувати дані, проблема з Base64 та багатьма текстовими кодуваннями полягає в тому, що вони використовують такі символи, як I, l, 1, |, /, 0, O, o і так далі, що люди плутають один з одним.

Вивчіть кодування Дугласа Крокфорда Base32 . Його алфавіт був спеціально обраний, щоб уникнути подібних символів, і він включає виявлення помилок.


Дякую, я, мабуть, використовуватиму це, але це все ще не вирішує проблему виправлення помилок.
Джеремі Салвен

@Jeremy, реалізація Crockford включає виявлення помилок . Якщо вам потрібно виправити помилки, досліджуйте виправлення помилок вперед ( en.wikipedia.org/wiki/Forward_error_correction ).
Dour High Arch

1

Прочитавши ваші коментарі, це звучить більш розумно. Я просто не був впевнений, чи маєте ви намір кодувати такі мегабайти даних.

Я б рекомендував, згідно з пропозицією Олівера, збільшити щільність даних, запозичивши сторінку з шифру Бекона , яку тюремні банди часто використовують для кодування прихованих повідомлень у місівах, написаних у двох різних стилях сценарію - як правило, це верхня версія vs. малі символи або друк проти скорописних символів, наприклад

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

Однак, оскільки ваша мета - не стенографія, ви просто використаєте це для розширення набору гліфів. Для цього у вас може бути до 114 гліфів, лише використовуючи буквено-цифрові символи друку та скоромовки, або 12996 точок коду, використовуючи кодування з двома символами.

Однак, оскільки все число гліфів більше 15 і менше 256, по суті, є однаковим для прямого шифру двійкових даних (тобто, вам все одно знадобиться 2 символи для представлення кожного байту, що дає вам щільність даних у 4 біти на символ у всі випадки), ви можете використовувати додаткові 98 гліфів / 12740 кодів для виявлення / виправлення помилок.

Способи зробити це:

  • Виберіть набір 256 найпростіших комбо для читання / запису символів. Якщо виникає будь-яке інше поєднання символів, ви знаєте, що це помилка копіювання.
  • Використовуйте дві версії кінцевого символу як біт парності.
  • Створіть 50 різних 16-символьних наборів гліфів. Потім ви можете використовувати їх для шифрування даних про виправлення помилок кодування.

    Наприклад, {set 1}{set 1}наступні 3 грибки рівні 0x000, {set 1}{set 2}рівні 0x001тощо.

    Ви можете використовувати це для відображення 2500+ з 4096 можливих значень 1,5 байта. Аналогічно, ви можете використовувати лише 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 скриптами, скориставшись тим, що середовище зберігання використовується для передачі, що було метою моєї відповіді. Якщо ви не хочете скористатися тим, що це письмовий носій, то існує безліч форматів файлів, які реалізують кодування помилок. У більшості форматів архіву / стиснення вбудовано виправлення помилок.
Lèse majesté

Я не впевнений, що ви маєте на увазі, створюючи нові формати файлів. Усі згадані мною методики призначені для візуального кодування довільних бінарних даних рукописним текстом / позначками. Ви б не зберігали їх на такому комп'ютері (ви не могли б зберегти відскановані зображення). В основному, у вас є програма для кодування даних, виведення зображення на екран, щоб користувач міг скопіювати її. Потім для того, щоб перенести його назад на комп'ютер, ви б використали програму декодування, яка або OCR / OMR - це відскановане зображення або приймає вхід за допомогою клавіатури (наприклад, alt+ aдля скоромовного "a").
Lèse majesté

Розумієте, з цим у мене проблема: "у вас була б програма для кодування даних" ... ні, я цього не роблю. У мене немає програми для цього, і я не знаю жодної програми для цього. Я також не знаю жодного формату файлу, який може витончено обробляти видалений (не стертий) байт з початку початку файлу, крім інших помилок. Я, безумовно, погоджуюся, що це методи збільшення щільності даних, але це зараз не моя головна проблема, це простота читання / запису та захист від помилок.
Джеремі Салвен

@Jeremy: Як я вже говорив, у більшості архівних форматів вбудовано виправлення помилок, яке, здається, працює досить добре для більшості людей. Але якщо ви хочете щось спеціально розроблене для ручної транскрипції, то вам знадобиться написати або домовитись когось написати для вас. В іншому випадку найкраще звернути увагу на існуючі програми, призначені для передачі по каналах з високим рівнем шуму. Хоча найпростіший варіант, не турбуючись про щільність даних, - просто використовувати файл RAR з високим рівнем виправлення помилок, а потім повторити розділ заголовка 3 рази для потрійного модульного надмірності.
Lèse majesté

1

Для цього ми використовували S-Records . Для виявлення помилок була проста контрольна сума на рядок. Зазвичай всі, крім останнього рядка, мали фіксовану довжину, тому маркер кінця рядка служив для перевірки на вставки та вилучення. Хоча не було перевірки відсутніх рядків. Для цього ми просто порахували кількість рядків. Переважно файли були короткими, менше 100 рядків, але я пам’ятаю принаймні один, який мав 300 рядків і більше. Було дуже втомливо вводити файли в систему. Звичайно, серед перших переданих таким чином програм був завантажувач;)


0

Оптичне розпізнавання знаків використовується десятиліттями для створення машиночитаних форм, написаних від руки. Сторінка Вікіпедії містить посилання на кілька версій з відкритим кодом.

Школи давно використовують OMR для тестування; форми прості у використанні та читанні, а точність, як правило, краща, ніж введення з клавіатури. Для більшої точності комерційні виробники, такі як Scantron та ReMark, можуть створювати спеціальні форми.


Це цікаво, на жаль, для цього потрібен сканер або якась інша система зображень, підключена до комп'ютера.
Джеремі Салвен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.