Cara mentransfer file melalui pena dan kertas, dengan koreksi kesalahan

22

Saya mencari cara untuk mentransfer file hanya menggunakan pena dan kertas.

Ini agak mirip dengan paperbak , kecuali kepadatan yang saya cari jauh, jauh lebih rendah, dan saya tidak ingin menggunakan printer atau pemindai.

Jelas, jawaban pertama adalah encoding Base64 . Tetapi menulis dan membaca jumlah karakter yang tinggi pasti akan menghasilkan kesalahan. Untuk tujuan saya, kesalahan apa pun tidak dapat diterima.

Jawaban kedua mungkin kode koreksi kesalahan Reed-Solomon (misalnya, menggunakan rsbep ). Namun, ini juga masalah, karena dari pemahaman saya, kode Reed-Solomon tidak memperbaiki kesalahan penyisipan / penghapusan, yang mungkin lebih mungkin daripada kesalahan substitusi dalam kasus ini.

Apakah ada program yang akan menyandikan / mendekode file sewenang-wenang dengan kode koreksi kesalahan penyisipan / penghapusan? Lebih disukai itu harus bekerja pada Windows, Linux dan Mac OS X

Tentunya ada solusi lain untuk masalah umum ini.

Jeremy Salwen
sumber
Apakah Anda mengharapkan kesalahan dalam penulisan, atau hanya membaca?
Christian Mann
Saya mengharapkan kesalahan dalam keduanya, tetapi saya juga mengharapkan mereka setara ...
Jeremy Salwen
Oh maaf. Saya salah membaca dan mengira Anda sedang mencetak. Anda ingin menuliskannya dengan tangan?
Christian Mann
3
Berapa banyak warna pena yang bisa saya gunakan? :)
Der Hochstapler
1
Hanya satu pena warna, jika tidak menyalinnya akan terlalu sulit. Saya benar-benar mentransmisikan teks terkompresi, ditandatangani, dienkripsi, sehingga dengan asumsi bahkan tingkat redundansi 50%, jumlah total penulisan akan <1,5 kali lebih banyak daripada benar-benar menulis teks asli akan (setelah Anda memperhitungkan kompresi ). Namun, ada masalah bahwa menyalin karakter acak lebih sulit daripada menyalin teks bahasa Inggris. Jadi untuk menjawab pertanyaan Anda, tentu hanya di kisaran beberapa kb.
Jeremy Salwen

Jawaban:

4

Saya ragu apakah otherwise transcribing it will be too difficultakan menjadi masalah.

Katakanlah Anda memiliki Merah, Hijau, Biru dan Hitam. Anda dapat menulis skrip yang mengubah data Anda menjadi kumpulan huruf dari RGBY, misalnya: RGBYGBRYBGBYRYYBYBRYYG(atau bahkan Red Green Blue Black Green Blue Red Black...dalam lembar Excel) dan kembali lagi. Ini hanya masalah basis mengkonversi data biner Anda dari basis 2 (atau data heksadesimal dari basis 16) ke basis dalam jumlah warna yang Anda ambil (4 dalam contoh ini).

Sekarang, pendekatan yang paling logis adalah mendapatkan 16 warna. Dengan cara ini, Anda harus menggunakan 4 kali lebih sedikit titik yang membuat pergantian antar pena sepadan. Ini memungkinkan Anda untuk menulis data sebanyak 4 kali lebih banyak di atas kertas jika Anda perlu, atau mungkin memiliki 4 kali lebih akurat saat meletakkan titik-titik Anda, penskalaan terserah Anda. Saya akan sangat menyarankan untuk tidak menggambar setiap bit.

Misalnya, 5565 bytesharus dikalikan dua untuk mendapatkan jumlah heksadesimal yang 11130 hexadecimals(sebagai lawan dari 44520 bits) yang dapat dimasukkan ke dalam 106 x 106kotak.

Bergantung pada jenis data Anda mungkin dapat datang dengan beberapa optimasi ...

Petunjuk: Cobalah untuk memilih warna yang paling berbeda (paling kontras) ...

Alternatif yang dapat menggunakan satu pena:

  • Mewakili hexadecimals yang berbeda dengan simbol yang berbeda -, /, |, \, +, ...

  • Mewakili heksadesimal yang berbeda dengan font piksel kecil, lihat avatar saya.

    Ini membuatnya bahkan berguna untuk menggunakan sesuatu seperti Basis 32 (atau Basis 36). Perhatikan bahwa Qdan 9sama, sehingga Anda ingin piksel kanan atas Qmenjadi Putih untuk perbedaan yang jelas. Basis 32 hanya membutuhkan 53 x 53kisi untuk contoh Anda, ditambah sedikit jarak untuk membedakan antara huruf.

Tamara Wijsman
sumber
Nah, ada beberapa masalah dengan ini. 1. Saya buta warna. 2. Ini membutuhkan membeli banyak pena. 3. Tidak membantu sama sekali dengan koreksi kesalahan. 4. Ini melibatkan kode tulisan alih-alih teks, yang membuat manusia lebih buruk.
Jeremy Salwen
@JeremySalwen: Uhm, menulis karakter dalam kotak tidak terlalu sulit. Dan Anda dapat memperbaiki kesalahan dengan menulis beberapa nomor cek ekstra longitudinal atau CRC. Tapi sungguh, sangat mudah untuk menulis lebih dari surat dari kotak ke kotak, jika Anda hanya pergi lagi untuk memvalidasi.
Tamara Wijsman
1
@ JeremySalwen: Dan jika Anda buta warna, Anda hanya tidak mengambil salah satu warna yang Anda buta warna.
Tamara Wijsman
1
Buta warna lebih merupakan pengurangan dimensionalitas ruang warna daripada ketidakmampuan selektif untuk melihat warna tertentu. Maksudku, aku mungkin bisa melakukan Hitam, Biru, Kuning, Merah, Hijau, Abu-abu, tetapi tidak lebih
Jeremy Salwen
@ Tom Anda mungkin harus memasukkan avatar lama Anda untuk mencegah kebingungan :)
Nate Koppenhaver
2

Jika Anda ingin orang dapat membaca dan menulis data, masalah dengan Base64 dan banyak penyandian teks adalah mereka menggunakan karakter seperti I, l, 1, |, /, 0, O, o, dan seterusnya sehingga orang bingung satu sama lain.

Menyelidiki pengkodean Base32 Douglas Crockford . Alfabetnya secara khusus dipilih untuk menghindari karakter yang serupa, dan itu termasuk deteksi kesalahan.

Lengkungan Tinggi
sumber
Terima kasih, saya mungkin akan menggunakan ini, tetapi masih tidak menyelesaikan masalah koreksi kesalahan.
Jeremy Salwen
@ Jeremy, implementasi Crockford mencakup deteksi kesalahan . Jika Anda perlu memperbaiki kesalahan, selidiki Koreksi Maju-Kesalahan ( en.wikipedia.org/wiki/Forward_error_correction ).
Dour High Arch
1

Setelah membaca komentar Anda, itu terdengar lebih masuk akal. Saya hanya tidak yakin apakah Anda bermaksud menyandikan megabita data seperti ini.

Saya akan merekomendasikan, di sepanjang saran Oliver, bahwa Anda meningkatkan kepadatan data Anda dengan meminjam halaman dari cipher Bacon , yang geng penjara sering gunakan untuk menyandikan pesan tersembunyi dalam missives yang ditulis dalam 2 gaya skrip yang berbeda - biasanya baik atas vs. huruf kecil atau cetak vs. karakter kursif, mis

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

Namun, karena tujuan Anda bukan stegnografi, Anda cukup menggunakan ini untuk memperluas set mesin terbang Anda. Melakukan ini, Anda bisa memiliki hingga 114 mesin terbang hanya menggunakan karakter alfanumerik cetak & kursif, atau 12996 poin kode menggunakan pengkodean karakter ganda.

Namun, karena semua jumlah glyph lebih besar dari 15 dan kurang dari 256 pada dasarnya sama untuk cipher data biner lurus (artinya, Anda masih akan membutuhkan 2 karakter untuk mewakili setiap byte, memberikan Anda kepadatan data 4 bit per karakter dalam semua kasus), Anda dapat menggunakan poin kode 98 glyphs / 12740 tambahan untuk deteksi / koreksi kesalahan.

Cara untuk melakukan ini termasuk:

  • Pilih satu set 256 kombinasi karakter yang paling mudah dibaca / ditulis. Jika ada kombo karakter lain terjadi, Anda tahu itu adalah kesalahan penyalinan.
  • Gunakan dua versi karakter akhir sebagai bit paritas.
  • Buat 50 set mesin terbang 16-karakter yang berbeda. Anda kemudian dapat menggunakannya untuk menulis sandi data koreksi kesalahan.

    Misalnya {set 1}{set 1}berarti 3 camilan berikutnya sama 0x000, {set 1}{set 2}sama dengan 0x001, dll.

    Anda dapat menggunakan ini untuk mewakili 2500+ dari 4096 nilai 1,5 byte yang mungkin. Demikian pula, Anda bisa menggunakan hanya 16 set untuk mewakili semua nilai byte berikut, memberi Anda 100% redundansi tanpa meningkatkan panjang data Anda yang disandikan.

Atau, Anda dapat menggunakan mesin terbang tambahan untuk kompresi tambahan:

  • Terapkan pengodean lebar variabel dengan memilih 98 poin kode karakter tunggal. Ini akan mengurangi ukuran konten yang dikodekan rata-rata sekitar 20%.
  • Menerapkan sesuatu yang mirip dengan pengkodean run-length dengan menggunakan set mesin terbang yang berbeda atau kombinasi set mesin terbang untuk mewakili nibbles / byte berulang. Misalnya Ab= aba; aB= abab; AB= ababab...
  • Gunakan mesin terbang tambahan atau titik kode untuk mewakili "kata" dan "frasa" yang diulang dalam data Anda. Meskipun data pra-kompresi kemungkinan akan memiliki tingkat entropi yang tinggi, jadi saya tidak tahu seberapa efektif ini.


Untuk lebih mengurangi kesalahan penyalinan, saya akan menampilkan konten yang disandikan dalam garis kisi dan menyalin ke kertas grafik. Jika Anda dapat menggunakan alat tulis khusus yang memiliki warna kolom / baris bergantian atau kisi kotak-kotak bergaya catur dengan kolom berhuruf & baris bernomor untuk pencarian cepat, yang selanjutnya akan meningkatkan akurasi penyalinan.

Anda juga dapat menggabungkan tata letak grid bergantian dengan gaya karakter bergantian sebagai bentuk mudah deteksi kesalahan. Yaitu jika kolom aneh selalu dikapitalisasi, jika transcriber menemukan diri mereka menulis huruf kecil dalam kolom aneh, maka mereka tahu mereka telah membuat kesalahan dan dapat mulai melacak kembali untuk melihat di mana itu terjadi.


Padahal jika prioritas utama Anda adalah akurasi, saya akan menggunakan kode biner + Hamming . Dengan menggunakan kode Hamming (12, 8) yang disingkat pada kertas grafik standar, Anda mungkin hanya memuat 187 byte, hanya mengkodekan 124 byte data. Tapi itu bisa ditranskripsi sangat cepat (garis miring untuk 1, tidak ada untuk 0) dan memberikan koreksi kesalahan tunggal. Mengolah bit paritas ekstra (13, 8) akan memberikan SECDED (koreksi kesalahan tunggal, deteksi kesalahan ganda). Menggunakan kode hamming standar seperti (15, 11) atau (31, 26), Anda mendapatkan efisiensi yang lebih baik dengan data masing-masing 137 dan 156 byte per lembar. Bahkan tingkat kode yang lebih tinggi dapat dicapai, tergantung pada seberapa akurat Anda menurut pelanggan Anda.

Pengkodean biner juga akan lebih mudah dibaca (keras) dan OCR / OMR.

Lèse majesté
sumber
Jelas saya berencana menggunakan karakter huruf besar juga. Dari semua skema koreksi kesalahan yang Anda sarankan, saya tidak melihat cara untuk mengimplementasikannya tanpa merancang format file khusus, dll. Apakah benar-benar tidak ada preseden untuk menempatkan perlindungan koreksi kesalahan pada file? Mungkin saya juga harus menyebutkan bahwa membuat program khusus juga sangat tidak diinginkan? Sepertinya saya tidak dapat menemukan program yang hanya akan melindungi file Anda dengan kode koreksi kesalahan.
Jeremy Salwen
Maksud saya bukan hanya menggunakan karakter huruf besar tetapi juga menggunakan skrip / font yang berbeda. Jika Anda hanya menggunakan karakter alfanumerik huruf besar & kecil, Anda hanya memiliki 62 mesin terbang, atau 3844 poin kode. Anda bisa mendapatkan lebih dari tiga kali lipat jumlah poin kode dengan menggunakan 2 skrip, memanfaatkan media penyimpanan yang digunakan untuk transfer, yang merupakan tujuan dari jawaban saya. Jika Anda tidak ingin memanfaatkan fakta bahwa ini adalah media tertulis, maka ada banyak format file yang menerapkan pengkodean kesalahan. Sebagian besar format arsip / kompresi memiliki koreksi kesalahan
bawaan
Saya tidak yakin apa yang Anda maksud dengan membuat format file baru. Semua teknik yang saya sebutkan dimaksudkan untuk menyandikan data biner sewenang-wenang secara visual dalam teks / tanda tulisan tangan. Anda tidak akan menyimpannya di komputer seperti itu (Anda tidak bisa tidak menyimpan gambar yang dipindai). Pada dasarnya, Anda akan memiliki program untuk menyandikan data, menghasilkan gambar di layar untuk disalin oleh pengguna. Kemudian untuk mentransfernya kembali ke komputer, Anda akan menggunakan program decoding yang baik OCR / OMR adalah gambar yang dipindai atau menerima input melalui keyboard (misalnya alt+ auntuk kursif "a").
Lèse majesté
Lihat, itulah yang saya punya masalah dengan: "Anda akan memiliki program untuk menyandikan data" ... tidak, saya tidak punya. Saya tidak punya program untuk melakukan ini, dan saya tidak tahu ada program untuk melakukan ini. Saya juga tidak mengetahui adanya format file apa pun yang dapat menangani byte yang dihapus (tidak terhapus) dari dekat awal file di atas kesalahan lainnya. Saya benar-benar setuju bahwa ini adalah metode untuk meningkatkan kepadatan data, tapi itu bukan perhatian utama saya sekarang, itu kemudahan membaca / menulis dan perlindungan kesalahan.
Jeremy Salwen
@ Jeremy: Seperti yang saya katakan, sebagian besar format arsip memiliki koreksi kesalahan yang dibangun di mana tampaknya berfungsi cukup baik bagi kebanyakan orang. Tetapi jika Anda menginginkan sesuatu yang dirancang khusus untuk transkrip tangan, maka Anda perlu menulis atau meminta seseorang menulis sesuatu untuk Anda. Jika tidak, taruhan terbaik Anda adalah melihat ke dalam aplikasi yang sudah ada yang dirancang untuk mentransmisikan melalui saluran noise tinggi. Meskipun opsi termudah tanpa memperhatikan kepadatan data adalah dengan hanya menggunakan file RAR dengan koreksi kesalahan tingkat tinggi, dan kemudian ulangi bagian header 3 kali untuk redundansi modular tiga.
Lèse majesté
1

Kami biasa menggunakan S-Records untuk tujuan ini. Ada checksum sederhana, per baris, untuk deteksi kesalahan. Biasanya semua kecuali baris terakhir adalah panjang tetap, jadi penanda garis akhir berfungsi sebagai cek untuk penyisipan dan penghapusan. Tidak ada pemeriksaan untuk garis yang hilang. Untuk ini, kita cukup menghitung jumlah garis. Sebagian besar file pendek, kurang dari 100 baris, tapi saya ingat setidaknya satu yang memiliki 300 baris atau lebih. Itu sangat membosankan file mengetik ke dalam sistem. Tentu saja, di antara program pertama yang ditransfer dengan cara ini adalah pengunduh;)

Spy Pensiunan
sumber
0

Optical Mark Recognition telah digunakan selama beberapa dekade untuk membuat formulir tulisan tangan yang dapat dibaca mesin. Halaman Wikipedia memiliki tautan ke beberapa versi Open Source.

Sekolah telah lama menggunakan OMR untuk pengujian; formulirnya mudah digunakan dan dibaca, dan akurasi biasanya lebih baik daripada input keyboard. Untuk akurasi yang lebih tinggi, produsen komersial seperti Scantron dan ReMark dapat membuat formulir kustom.

Lengkungan Tinggi
sumber
Itu menarik, sayangnya, ini membutuhkan pemindai atau sistem pencitraan lain yang terpasang pada komputer untuk bekerja.
Jeremy Salwen