QRSAY: долаючи прірву. Адаптуємо технологію QR-кодів

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Зауважте, що стаття створена спеціально до 1 квітня і має жартівливий характер.

Останні кілька років все більшого розповсюдження набувають так звані «розумні» телефони. Ці прилади комбінують в собі мультимедійні та мережеві можливості персональних комп’ютерів з функціями традиційних «дурнуватих» апаратів. На жаль, через недогляд компаній-виробників, «розумні» телефони практично не сумісні з іншим популярним класом приладів: персональними комп’ютерами під управлінням операційної системи MS DOS. Цей недолік значно зменшує їх корисність для професійних користувачів ПК. Зіткнувшись з такою проблемою я вирішив виправити ситуацію самотужки. У загальному вигляді задача не є тривіальною, тож для початку було вирішено обмежитись одним випадком: передачею даних від ПК до телефону.

Проаналізувавши наявні можливості, я дійшов висновку, що для бездротової комунікації між ПК та телефоном найбільш зручними є два канали: аудіо та відео. Дані, звичайно, потрібно закодувати у формі, яка підходить до розповсюдження в цільовому середовищі. Очевидним вибором для цього є звук: технологія передачі інформації по аудіоканалам вже давно розроблена і доступна у вигляді модемів. Щоб використати її потрібно:

  • Перетворити послідовність байтів на послідовність частот.
  • Зіграти їх в гучномовець.
  • На стороні приймача записати потік з мікрофона.
  • Перетворити назад в байти за допомогою DSP алгоритмів.

Цей підхід, на жаль, має декілька практичних недоліків:

  • Потребує спеціального програмного забезпечення для телефона.
  • Швидкість передачі даних може бути суттєво обмежена можливостями ПК-гучномовця.
  • Раптові негармонічні звуки неприроднього походження можуть значно погіршити стосунки з близькими та негативно вплинути на стан домашніх тварин з тонкою нервовою організацією.

Візуальний канал, на перший погляд, позбавлений недоліків (2) та (3) але все ще потребує спеціального додатка. Проте це лише на перший погляд! Провівши детальний аналіз доступних телефонів від Google та Apple (які є найбільшими виробниками операційних систем в сегменті «розумних» телефонів), я виявив, що стандартний додаток «Камера» обох компаній підтримує зчитування QR кодів.

Технологія QR кодування були розроблена в Японії і активно використовується японським автомобільними компаніями. Я підозрюю, що Google та Apple додали її підтримку, щоб мати можливість сертифікувати свої вироби як стандартне обладнання на виробництві в автопромисловості. Як би то не було, це рішення значно полегшило шлях до вирішення проблеми. Все, що залишилось зробити — написати генератор таких кодів для MS DOS. Так почалася робота над додатком QRSAY.

QR код — це квадрат, що складається (як і людське життя) зі світло-темних елементів. В залежності від кількості таких елементів код може містити різний об’єм даних. Так, наприклад, найменший варіант (або версія 1) має розмір 21 на 21 та може передати 17 байтів. Найбільший (версія 40) — 177 на 177 та 2953 байтів відповідно.

Щоб охопити якнайбільше моделей ПК, я вирішив, що QRSAY має працювати лише в текстовому режимі, використовуючи символи псевдографіки. Стандартний текстовий екран персонального комп’ютера має розмір 80 на 25 символів. В свою чергу кожен символ є матрицею з 8 на 16 пікселів. Оскільки елементи QR коду мають бути квадратами — кожен символ може закодувати два елементи розміром 8×8 пікселів. Для цього можна використати символи 20h, DBh, DCh, DFh розширеної таблиці ASCII. Такий підхід дозволяє відобразити версії QR кодів до 8-ї (49 на 49) включно.

Але чи можна покращити цей результат? Виявляється — так! На допомогу приходить переривання 10h (операції BIOS-а пов’язані з відео), а саме його функція 11h — перевизначення таблиць кодогенератора. За допомогою цієї функції можна задати власні матриці 8×16 для кожного з 256 можливих значень символів. Якщо прийняти розмір елемента QR коду за 4×4, то один символ складатиметься з 2×4, або ж 8 елементів. Тобто 256 матриць досить щоб відтворити будь-який фрагмент QR коду. Максимальна версія, яку можна зобразити на екрані використовуючи цей метод — 20 (97 на 97 елементів). На малюнку нижче приведено згенеровану таблицю, що використовується для відображення QR кодів з підвищеною роздільною здатністю.

Для реалізації додатку я обрав мову Turbo Pascal 5.5. Окрім потужного інтегрованого середовища розробки з операціями відладки, версія 5.5 включає в себе підтримку методології об’єктно-орієнтованого програмування. Це зручний інструмент який полегшує як саму розробку так і повторне використання коду в інших проектах.

Результатом наполегливої праці стала утиліта командного рядка, яка включає в себе:

  • Підтримку кодування в режимах Numeric, Alphanumeric, Byte.
  • Можливість задати версію, рівень корекції помилок, шаблон маскування коду.
  • Повідомлення для кодування може передаватись як аргумент або зчитуватись з файла.
  • Можливість зберегти QR код у окремий файл.

Нижче приведені приклади використання додатку в обох режимах.

Без модифікації кодогенератора:

З модифікацією:

Сам додаток та його код можна завантажити з сторінки проекту моїх DOS-утиліт на порталі GitHub: github.com/gonzoua/DOS

Звичайно, QRSAY є лише першим кроком у напрямку адаптації технології QR кодів. Наступним етапом буде реліз QRSDKCK — резидентної програми, за допомогою якої можна виділити будь-який фрагмент екрану та конвертувати його в QR код.

Серед подальших планів також розробка та реалізація QRTP, протоколу передачі файлів на основі QR кодів. QRTP комбінуватиме метадані файлу з його вмістом в один масив байтів, і демонструватиме секції масиву та секційні метадані на екрані як серію QR кодів, з певною затримкою і по колу. Клієнт на телефоні зчитуватиме фрагменти і в якийсь момент зможе зібрати з них повний файл. Тут вже не обійтись без розробки спеціалізованого програмного забезпечення для розумнофонів, але я налаштований позитивно: розглядаю це як можливість ознайомитись з новими технологіями і сподіваюсь монетизувати QRTP в середовищі професійних користувачів ПК.

👍НравитсяПонравилось1
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Вот что получается, когда редакция DOU задерживает выкладку статьи аж на один день.

Бесполезно конечно. Но изобретательность налицо. Завидую.

ТС, если ты принимаешь какие-то препараты, плиз, поговори с доктором. Похоже что у тебя серьезные сайд эфекты и нужно скорректировать дозировку.

Turbo Pascal 5.5
резидентної програми

и-и-и я аж молодість згадав

Подписаться на комментарии