Cách chuyển tập tin qua bút và giấy, với sửa lỗi


22

Tôi đang tìm cách chuyển tập tin chỉ bằng bút và giấy.

Điều này hơi giống với paperbak , ngoại trừ mật độ tôi đang tìm kiếm thấp hơn nhiều, và tôi không muốn sử dụng máy in hoặc máy quét.

Rõ ràng, câu trả lời đầu tiên là hóa Base64 . Nhưng viết và đọc một số lượng lớn các ký tự như vậy chắc chắn sẽ dẫn đến lỗi. Đối với mục đích của tôi, bất kỳ lỗi là không thể chấp nhận.

Câu trả lời thứ hai có thể là mã sửa lỗi của Reed-Solomon (ví dụ: sử dụng rsbep ). Tuy nhiên, đây cũng là một vấn đề, bởi vì theo hiểu biết của tôi, mã Reed-Solomon không sửa lỗi chèn / xóa, có lẽ nhiều khả năng hơn lỗi thay thế trong trường hợp này.

Có chương trình nào sẽ mã hóa / giải mã các tệp tùy ý với các mã sửa lỗi nhận biết chèn / xóa không? Tốt nhất là nó nên hoạt động trên Windows, Linux và Mac OS X

Rõ ràng bất kỳ giải pháp khác cho vấn đề chung đều được hoan nghênh.


Bạn có mong đợi lỗi trong văn bản, hoặc chỉ đọc?
Christian Mann

Tôi mong đợi lỗi ở cả hai, nhưng tôi cũng mong chúng tương đương ...
Jeremy Salwen

Ồ xin lỗi. Tôi đọc sai và nghĩ rằng bạn đang in. Bạn muốn viết nó ra bằng tay?
Christian Mann

3
Tôi có thể sử dụng bao nhiêu màu bút? :)
Der Hochstapler

1
Chỉ một cây bút màu duy nhất, nếu không thì việc sao chép nó sẽ quá khó khăn. Tôi thực sự đang truyền văn bản được nén, đã ký, được mã hóa, do đó, giả sử thậm chí tỷ lệ dự phòng là 50%, tổng số lượng văn bản sẽ gấp <1,5 lần so với thực tế viết ra văn bản gốc (một khi bạn tính đến việc nén ). Tuy nhiên, có một vấn đề là sao chép các ký tự ngẫu nhiên khó hơn sao chép văn bản tiếng Anh. Vì vậy, để trả lời câu hỏi của bạn, chắc chắn chỉ trong một vài phạm vi kb.
Jeremy Salwen

Câu trả lời:


4

Tôi nghi ngờ nếu otherwise transcribing it will be too difficultsẽ là một vấn đề.

Giả sử bạn có Đỏ, Xanh lục, Xanh lam và Đen. Bạn có thể viết một tập lệnh biến dữ liệu của bạn thành một tập hợp các chữ cái từ RGBY, ví dụ: RGBYGBRYBGBYRYYBYBRYYG(hoặc thậm chí Red Green Blue Black Green Blue Red Black...trong một bảng Excel) và quay lại. Đây chỉ là vấn đề cơ sở chuyển đổi dữ liệu nhị phân của bạn từ cơ sở 2 (hoặc dữ liệu thập lục phân từ cơ sở 16) sang cơ sở theo số lượng màu bạn lấy (4 trong ví dụ này).

Bây giờ, cách tiếp cận hợp lý nhất sẽ là lấy cho mình 16 màu. Bằng cách này, bạn phải sử dụng số chấm ít hơn 4 lần , điều này làm cho việc chuyển đổi giữa các cây bút trở nên đáng giá. Điều này cho phép bạn viết gấp 4 lần dữ liệu trên giấy nếu bạn cần, hoặc có lẽ có thể chính xác hơn 4 lần khi đặt dấu chấm của bạn, tỷ lệ tùy thuộc vào bạn. Tôi thực sự sẽ khuyên không nên vẽ từng bit một.

Chẳng hạn, 5565 bytessẽ phải được nhân với hai để có được số lượng hexadecimals 11130 hexadecimals(trái ngược với 44520 bits) có thể được đưa vào 106 x 106lưới.

Tùy thuộc vào loại dữ liệu bạn có thể có thể đi kèm với một số tối ưu hóa ...

Gợi ý: Cố gắng chọn các màu khác biệt (tương phản nhất) ...

Các lựa chọn thay thế có thể sử dụng một cây bút duy nhất:

  • Đại diện cho hexadecimals khác nhau bằng các ký hiệu khác nhau -, /, |, \, +, ...

  • Đại diện cho các hexadecimals khác nhau bằng một phông chữ pixel nhỏ, xem hình đại diện của tôi.

    Điều này làm cho nó thậm chí hữu ích để sử dụng một cái gì đó như Base 32 (hoặc Base 36). Lưu ý rằng Q9giống nhau, vì vậy bạn sẽ muốn pixel trên cùng bên phải Qlà Trắng để phân biệt rõ ràng. Cơ sở 32 chỉ yêu cầu một 53 x 53lưới cho ví dụ của bạn, cộng với một chút khoảng cách để phân biệt giữa các chữ cái.


Vâng, có một vài vấn đề với điều này. 1. Tôi bị mù màu. 2. Nó đòi hỏi phải mua một loạt bút. 3. Nó không giúp gì cả với việc sửa lỗi. 4. Nó liên quan đến các bài viết mã thay vì văn bản, mà con người tồi tệ hơn.
Jeremy Salwen

@JeremySalwen: Uhm, viết các ký tự trong một lưới không thực sự khó. Và bạn có thể sửa lỗi bằng cách viết thêm một số số kiểm tra theo chiều dọc hoặc CRC. Nhưng thực sự, rất dễ dàng để viết các chữ cái từ lưới sang lưới, trường hợp xấu nhất là bạn chỉ cần lướt qua nó một lần nữa để xác nhận.
Tamara Wijsman

1
@JeremySalwen: Và nếu bạn bị mù màu, bạn không nên lấy bất kỳ màu nào mà bạn bị mù màu.
Tamara Wijsman

1
Mù màu là một sự giảm kích thước của không gian màu hơn là không có khả năng chọn lọc để nhìn thấy một số màu nhất định. Ý tôi là, tôi có thể có thể kéo ra Đen, Xanh lam, Vàng, Đỏ, Xanh lục, Xám, nhưng không nhiều hơn nữa
Jeremy Salwen

@Tom Có lẽ bạn nên đặt hình đại diện cũ của mình vào để tránh nhầm lẫn :)
Nate Koppenhaver

2

Nếu bạn muốn mọi người có thể đọc và ghi dữ liệu, vấn đề với Base64 và nhiều mã hóa văn bản là họ sử dụng các ký tự như I, l, 1, |, /, 0, O, o, v.v. với nhau

Điều tra mã hóa Base32 của Douglas Crockford . Bảng chữ cái của nó được chọn đặc biệt để tránh các ký tự tương tự, và nó bao gồm phát hiện lỗi.


Cảm ơn, có lẽ tôi sẽ sử dụng cái này, nhưng nó vẫn không giải quyết được vấn đề sửa lỗi.
Jeremy Salwen

@Jeremy, triển khai của Crockford bao gồm phát hiện lỗi . Nếu bạn cần sửa lỗi, hãy điều tra Sửa lỗi chuyển tiếp ( en.wikipedia.org/wiki/Forward_error_correction ).
Dour High Arch

1

Sau khi đọc bình luận của bạn, điều đó nghe có vẻ hợp lý hơn. Tôi chỉ không chắc chắn nếu bạn có ý định mã hóa megabyte dữ liệu như thế này.

Tôi khuyên bạn, dọc theo dòng gợi ý của Oliver, bạn nên tăng mật độ dữ liệu bằng cách mượn một trang từ mật mã của Bacon , mà các băng đảng nhà tù thường sử dụng để mã hóa các tin nhắn ẩn trong các tên lửa được viết theo 2 kiểu chữ viết khác nhau - thường là trên ký tự chữ thường hoặc in so với ký tự chữ thảo, vd

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

Tuy nhiên, vì mục tiêu của bạn không phải là bản sao, bạn chỉ cần sử dụng mục tiêu này để mở rộng bộ glyph của mình. Làm điều này, bạn có thể có tới 114 glyphs chỉ bằng cách sử dụng các ký tự chữ và số in chữ thảo hoặc 12996 điểm mã bằng cách sử dụng mã hóa ký tự kép.

Tuy nhiên, vì tất cả số lượng glyph lớn hơn 15 và nhỏ hơn 256 về cơ bản là giống nhau cho một mật mã thẳng của dữ liệu nhị phân (nghĩa là, bạn vẫn sẽ cần 2 ký tự để biểu thị mỗi byte, cung cấp cho bạn mật độ dữ liệu 4 bit cho mỗi ký tự tất cả các trường hợp), bạn có thể sử dụng thêm 98 điểm glyphs / 12740 điểm để phát hiện / sửa lỗi.

Các cách để làm điều này bao gồm:

  • Chọn một bộ gồm 256 bộ ký tự dễ đọc / ghi nhất. Nếu bất kỳ kết hợp ký tự nào khác xảy ra, bạn biết đó là lỗi sao chép.
  • Sử dụng hai phiên bản của ký tự kết thúc dưới dạng một bit chẵn lẻ.
  • Tạo 50 bộ glyph 16 ký tự khác nhau. Sau đó, bạn có thể sử dụng chúng để mã hóa dữ liệu sửa lỗi.

    Ví dụ: {set 1}{set 1}3 nibble tiếp theo bằng nhau 0x000, {set 1}{set 2}bằng nhau 0x001, v.v.

    Bạn có thể sử dụng điều này để biểu thị 2500+ trong số 4096 giá trị 1,5 byte có thể. Tương tự, bạn có thể sử dụng chỉ 16 bộ để biểu diễn tất cả các giá trị của byte sau, mang lại cho bạn 100% dự phòng mà không làm tăng độ dài dữ liệu được mã hóa của bạn.

Ngoài ra, bạn có thể sử dụng glyphs bổ sung để nén bổ sung:

  • Thực hiện mã hóa độ rộng thay đổi bằng cách chọn 98 điểm mã ký tự đơn. Điều này sẽ làm giảm kích thước nội dung được mã hóa trung bình khoảng 20%.
  • Thực hiện một cái gì đó tương tự như mã hóa độ dài chạy bằng cách sử dụng các tập hợp glyph hoặc tập hợp glyph khác nhau để biểu diễn các nibble / byte lặp lại. Ví dụ Ab= aba; aB= abab; AB= ababab...
  • Sử dụng các glyphs hoặc điểm mã bổ sung để thể hiện "từ" và "cụm từ" được lặp lại trong dữ liệu của bạn. Mặc dù dữ liệu được nén trước có thể sẽ có mức độ entropy cao, vì vậy tôi không biết hiệu quả của việc này sẽ như thế nào.


Để tiếp tục giảm lỗi sao chép, tôi sẽ hiển thị nội dung được mã hóa theo đường lưới và sao chép vào giấy vẽ biểu đồ. Nếu bạn có thể sử dụng văn phòng phẩm tùy chỉnh có màu sắc cột / hàng xen kẽ hoặc lưới rô theo kiểu bàn cờ với các cột chữ và hàng được đánh số để tra cứu nhanh, điều đó sẽ tăng thêm độ chính xác sao chép.

Bạn cũng có thể kết hợp bố cục lưới xen kẽ với các kiểu ký tự xen kẽ như một hình thức phát hiện lỗi dễ dàng. Tức là nếu các cột lẻ luôn được viết hoa, nếu người chuyển đổi thấy mình viết các chữ cái viết thường trong các cột lẻ, thì họ biết rằng họ đã mắc lỗi và có thể bắt đầu theo dõi lại để xem nó xảy ra ở đâu.


Mặc dù nếu ưu tiên chính của bạn là độ chính xác, tôi sẽ sử dụng mã hóa nhị phân + mã Hamming . Sử dụng mã Hamming rút gọn (12, 8) trên giấy vẽ đồ thị tiêu chuẩn, bạn có thể chỉ phù hợp với 187 byte, chỉ mã hóa 124 byte dữ liệu. Nhưng nó có thể được sao chép rất nhanh (dấu gạch chéo cho 1, không có gì cho 0) và cung cấp sửa lỗi đơn. Việc xử lý một bit chẵn lẻ bổ sung (13, 8) sẽ cung cấp SECDED (sửa lỗi đơn, phát hiện lỗi kép). Sử dụng mã hamming tiêu chuẩn như (15, 11) hoặc (31, 26), bạn sẽ có được hiệu quả thậm chí tốt hơn với lần lượt là 137 và 156 byte dữ liệu trên mỗi tờ. Thậm chí tỷ lệ mã cao hơn có thể đạt được, tùy thuộc vào mức độ chính xác mà bạn nghĩ rằng người chuyển đổi của bạn có thể.

Mã hóa nhị phân cũng sẽ dễ đọc hơn (to) và OCR / OMR.


Rõ ràng tôi cũng đang lên kế hoạch sử dụng các ký tự chữ hoa. Trong số tất cả các lược đồ sửa lỗi mà bạn đã đề xuất, tôi không thấy cách nào để thực hiện chúng mà không thiết kế định dạng tệp tùy chỉnh, v.v. Có thực sự không có tiền lệ cho việc bảo vệ sửa lỗi trên các tệp không? Có lẽ tôi cũng nên đề cập rằng việc tạo các chương trình tùy chỉnh cũng rất không mong muốn? Tôi dường như không thể tìm thấy bất kỳ chương trình nào sẽ chỉ bảo vệ các tệp của bạn với mã sửa lỗi.
Jeremy Salwen

Quan điểm của tôi không chỉ là sử dụng các ký tự chữ hoa mà còn sử dụng các tập lệnh / phông chữ khác nhau. Nếu bạn chỉ sử dụng các ký tự chữ và số viết hoa và viết thường, bạn chỉ có 62 glyphs, hoặc 3844 điểm mã. Bạn có thể nhận được nhiều hơn gấp ba số lượng điểm mã đó bằng cách sử dụng 2 tập lệnh, tận dụng phương tiện lưu trữ được sử dụng để chuyển, đó là mục đích trả lời của tôi. Nếu bạn không muốn lợi dụng thực tế rằng đây là một phương tiện bằng văn bản, thì có rất nhiều định dạng tệp thực hiện mã hóa lỗi. Hầu hết các định dạng lưu trữ / nén đều được tích hợp sửa lỗi.
Lèse majesté

Tôi không chắc ý của bạn là gì khi tạo các định dạng tệp mới. Tất cả các kỹ thuật tôi đã đề cập là để mã hóa trực quan dữ liệu nhị phân tùy ý trong văn bản / nhãn hiệu viết tay. Bạn sẽ không lưu trữ chúng trên máy tính như thế (bạn không thể lưu trữ hình ảnh được quét). Về cơ bản, bạn sẽ có một chương trình mã hóa dữ liệu, xuất hình ảnh trên màn hình để người dùng sao chép xuống. Sau đó, để chuyển nó trở lại vào máy tính, bạn sẽ sử dụng chương trình giải mã OCR / OMR là hình ảnh được quét hoặc chấp nhận đầu vào qua bàn phím (ví dụ alt+ acho chữ "a" khó hiểu).
Lèse majesté

Hãy xem, đó là điều tôi gặp vấn đề với: "bạn sẽ có một chương trình để mã hóa dữ liệu" ... không, tôi không có. Tôi không có chương trình để làm việc này và tôi không biết có chương trình nào để làm việc này. Tôi cũng không nhận thức được bất kỳ định dạng tập tin đó một cách duyên dáng có thể xử lý một byte loại bỏ (không bị xóa) từ gần đầu của tập tin trên đầu trang của các lỗi khác. Tôi chắc chắn đồng ý rằng đây là những phương pháp để tăng mật độ dữ liệu, nhưng đó không phải là mối quan tâm chính của tôi bây giờ, nó dễ đọc / ghi và bảo vệ lỗi.
Jeremy Salwen

@Jeremy: Như tôi đã nói, hầu hết các định dạng lưu trữ đều có sửa lỗi được xây dựng trong đó dường như hoạt động đủ tốt cho hầu hết mọi người. Nhưng nếu bạn muốn một cái gì đó được thiết kế đặc biệt để sao chép bằng tay, thì bạn sẽ cần phải viết hoặc nhờ ai đó viết một cái gì đó cho bạn. Mặt khác, cách tốt nhất của bạn là xem xét các ứng dụng hiện có được thiết kế để truyền qua các kênh có độ ồn cao. Mặc dù tùy chọn dễ nhất không liên quan đến mật độ dữ liệu là chỉ sử dụng tệp RAR với mức độ sửa lỗi cao, sau đó lặp lại phần tiêu đề 3 lần để dự phòng ba mô-đun.
Lèse majesté

1

Chúng tôi thường sử dụng S-Records cho mục đích này. Có một tổng kiểm tra đơn giản, trên mỗi dòng, để phát hiện lỗi. Thông thường tất cả ngoại trừ dòng cuối cùng là độ dài cố định, do đó, điểm đánh dấu cuối dòng được dùng làm kiểm tra để chèn và xóa. Không có kiểm tra cho các dòng bị thiếu mặc dù. Đối với điều này, chúng tôi chỉ đơn giản là đếm số lượng dòng. Hầu hết các tệp đều ngắn, dưới 100 dòng, nhưng tôi nhớ ít nhất một dòng có 300 dòng trở lên. Nó rất tẻ nhạt gõ các tập tin vào hệ thống. Tất nhiên, trong số các chương trình đầu tiên được chuyển theo cách này là một trình tải xuống;)


0

Nhận dạng nhãn hiệu quang học đã được sử dụng trong nhiều thập kỷ để tạo ra các hình thức viết tay có thể đọc được bằng máy. Trang Wikipedia có các liên kết đến một số phiên bản Nguồn mở.

Các trường từ lâu đã sử dụng OMR để thử nghiệm; các hình thức đơn giản để sử dụng và đọc, và độ chính xác thường tốt hơn so với nhập bằng bàn phím. Để có độ chính xác cao hơn, các nhà sản xuất thương mại như Scantron và ReMark có thể tạo các biểu mẫu tùy chỉnh.


Thật không may, thật không may, điều này đòi hỏi một máy quét hoặc một số hệ thống hình ảnh khác được gắn vào máy tính để hoạt động.
Jeremy Salwen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.