Главная

QR-коды в KDL

Если в Haiku дело дошло до KDL (отладочный режим ядра), значит у вас серьёзные трудности. В KDL много инструментов пригодных для диагностики и отладки, но всё же, вполне вероятно, что вы не сможете сразу разобраться с возникшей проблемой. В этом случае, в идеале, вы должны написать хороший баг–репорт, а не сражаться с ошибками в одиночестве.

В обоих случаях крайне полезно как–нибудь зафиксировать вывод KDL. Существует несколько способов стянуть вывод отладчика, каждый из которых не идеален. Простейший «традиционный» способ — использовать последовательный кабель (COM–порт), соединенный с другим компьютером; минусы очевидны: нужен другой компьютер, кабель и наличие COM–порта на отлаживаемой машине, что по нынешним временам редкость. Второй способ — выудить вывод KDL из сислога; это просто и удобно до тех пор, пока не отказали компоненты системы, вовлечённые в запись логов. Учитывая вышесказанное, многие просто фотографируют экран и прикладывают фото к баг–репорту. Это рабочий вариант, конечно, но крайне неудобный: нужно сделать хорошо читаемую фотографию с близкого расстояния и не оставить за кадром (в прямом и переносном смысле) существенные данные. Кроме того, фотографии — довольно тяжелый контент и текст на них не индексируется и не ищется, что уменьшает эффективность баг–трекера. (ну и глаза майтейнеров не казённые)

Чтобы улучшить ситуацию, я реализовал возможность рисовать QR–коды прямо из KDL. QR (Quick Response) коды это разновидность двухмерных чёрно–белых штрих–кодов (ну, все знают, IMHO :). Плюсами QR–кодов являются машиночитаемость и контроль целостности информации (100% читаемы данные с фотографий низкого качества). QR–декодеры есть на абсолютном большинстве смартфонов (и вообще на большинстве наличествующих в этой реальности платформ). Соответственно, вместо фотографирования экрана или (жуть какая!) переписывания вывода KDL вручную на бумажку, можно просто сосканировать с экрана несколько картинок телефоном. Это довольно удобно, хотя и не без минусов — плотность информации получается довольно низкая. Разрешение экрана позволяет разместить относительно небольшие QR–коды. По умолчанию используется ver. 19 QR code, который кодирует максимум 792 байта. Если наличествует больше свободного места, то можно использовать более «плотные» изображения, вплоть до 177x177 матрицы вмещающей 2953 байта. Однако, в связи с нынешними ограничениями по памяти KDL, такие высокие разрешения, скорее всего, сгенерировать не получится. В случае если требуется стянуть большой объём информации, можно выдать несколько QR–кодов последовательно. Дальше я расскажу как пользоваться QR–кодировщиком в KDL и как использовать веб–сервис, чтобы сделать сбор данных более удобным.

Текущие ограничения

<переводчик не в курсях особенностей реализации дебагера и предупреждает о возможном неадеквате в переводе>
Прежде всего объясню некоторые не вполне очевидные особенности работы с кодировщиком, проистекающие из ограничений реализации. qrencode — это загружаемый add–on ядерного дебагера, который добавляет в дебагер команды через публичный API оного. Хотя в KDL и использует пайпы в некоторых командах, соответствующее API ещё на стало публичным, соответственно qrencode не может им пользоваться. Если вы соединяете некую команду и qrencode через пайп, то: исходная команда выполняется, для каждой строки её вывода вызовется qrencode, причём эта строка будет передана в кодировщик как первый аргумент. Соответственно программа не может определить когда передаваемые данные начинаются, а когда кончаются. Поэтому сброс данных приходится выполнять вручную.

Создание QR–кодов

QR–коды можно создать двумя способами:

  • команда qrencode преобразует одну вводимую строку напрямую в QR–код
  • команда qrappend буферизует вводимые строки, после чего буфер можно сбросить в QR–код командой qrflush

Какой способ использовать — смотрите по обстоятельствам. В одиночку qrencode не слишком полезна, она рисует один QR–код из каждой передаваемой строки и завершает работу. Если вы скормите в qrencode многострочный текст — она сгенерирует серию QR–кодов (одна строка — один код), которые последовательно затрут друг–друга и вы просто не успеете их отсканировать. Команда qrencode полезна только в ситуации, когда вам нужно немедленно выдать одну строку (например вывод команды call):

kdebug> qrencode test

kdebug> call 10 -3 | qrencode

Большую эффективность даёт QR–буфер, который управляется командами qrappend, qrflush и qrclear. Нетрудно догадаться, что это команды «добавить», «сбросить» и «очистить» соответственно.
Команда qrappend добавляет строку в буфер, что идеально подходит для отлова вывода в конце пайпа:

kdebug> sc | qrappend

Результат выполнения команды ( в приведённо случае команды sc) будет добавлен в QR–буфер. Буфер ограничен в объёме. Если qrappend заполнит буфер на 100%, то начнётся автоматическая сброс данных в QR–код, чтобы освободить место под новый ввод, иначе qrappend завершится «тихо», что означает успешное добавление данных в буфер. qrflush сбросит все данные из буфера, выдав соответствующие QR–коды. Обратите внимание, что даже если qrappend выдала QR–код, это не значит, что буфер пуст, это значит что часть данных не поместилась в буфер и была выдана на экран, а «хвост» всё ещё остался в буфере. Нужно всегда вызывать qrflush после qrappend.

Если вы хотите сбросить буфер без показа QR–кодов, например очистить его перед началом буферизации новых данных, — используйте qrclear. Одна команда — одно действие, и никаких аргументов.

Создание URL–ов из данных

Рассмотренные выше QR–коды содержали в себе только простой текст, который придётся распознать и сохранить. QR–коды совместно с подходяшим декодером позволяют организовать работу с данными более удобным образом. Если вам требуется сохранить очень большой объём данных (полный сислог, например), вам потребуется вручную отсканировать и сохранить большое число QR–кодов, что довольно неудобно и утомительно. Для этих целей в нашем ядерном add–on предусмотрена команда qrwebpost, которая позволяет создавать QR–коды, хранящие URL–ы, а не просто текст. qrwebpost вызывается с аргументом start либо stop. start означает, что вы начинаете создание серии URL–ов и требует вторым аргументом какой–нибудь идентификатор, по которому сервер сгруппирует именно эту порцию данных. Сервер <что за сервер не ясно> не умеет разрешать коллизии от разных пользователей, т.е. при совпадении идентификаторов вывод будет каждый раз перезаписываться. Так что при выдумывании идентификатора включите фантазию и попытайтесь создать уникальный идентификатор.

Пример использования команды qrwebpost:

debug> qrwebpost start test

Эта команда немедленно выдаст QR–код, содержащий начальный URL. Отсканировав этот код, вы получите ссылку, а не текст. Большинство декодеров позволяют быстро открыть эту ссылку в момент распознания, это сильно упростит вашу работу. При открытии такой «начальной» ссылки старые данные, помеченные этим идентификатором, будут удалены сервером, так что, начиная новую сессию вытягивания данных, убедитесь, что вы не затираете на сервере чего–нибудь нужного с таким же идентификатором.

Теперь, когда вы всё настроили, вы можете использовать qrencode, qrappend и qrflush как обычно. Создаваемые теперь QR–коды будут содержать не текст, а URL–ы, в которых текст будет входить в query–часть ссылки <видимо xxx.com?=encoded+text, надо проверить>. Открывая эти ссылки, вы попадёте на (веб–интерфейс) сервера, где кусочки данных добавляются к тексту с соответствующим идентификатором.

Если вы желаете вернуться в режим создания обычных текстовых QR–кодов, то используйте qrwebpost stop

Оптимизация выдачи

Конечно, теперь вы можете собрать большой объём текста быстрее и удобнее, но всё равно сканирование множества кодов может быть очень утомительным. Рекомендую прикинуть заранее, сколько и каких данных вы хотите сохранить. Фильтрация выдачи командами head, tail и grep поможет вам не утонуть в тексте.

Версии QR–кодов

По умолчанию используется 19–я версия QR–кодов, которая представляет собой матрицу 93х93. Этот размер отлично подходит под размер экрана 800х600, но может не устроить вас. Если у вас экран больше, вы можете увеличить матрицу до 177х177 (40–ая версия), но следует иметь в виду, что из–за небольшого объёма доступной памяти (определяется на этапе компиляции) вы, скорее всего, не сможете использовать большие матрицы. После смены версии QR–кодов проверяйте работоспособность генератора командой qrencode. Кроме того, матрицы высокого разрешения может быть трудно распознать из–за некачественной камеры. <автор лаконичнейше забыл сказать КАК, собственно, задать версию QR–кода>

Заключение

Использование QR–кодов позволяет добывать текст из KDL при помощи смартфона с камерой или аналогичного устройства. Ограниченный объём данных делает этот метод не всегда удобным, но определённо легче, чем фотографирование вывода экрана KDL или переписывания оного вручную.

P.S.
QR–декодеры онлайн:

Оригинал: (слава mmlr!)
http://www.haiku-os.org/blog/mmlr/2012–07–01_qr_encode_your_kdl_output

Перевод:

  • playful anonymous (also known as uncle Axeld) — Главный редактор. в•в©в•®ппёпёпёп
  • Гость 1 (aka Guest One)
  • Diver — tiny typo fixes
  • Flame —//—

Послесловие переводчика и топикстартера (Гость 1)

Когда я создавал этот фиче–реквест, я честно говоря, не думал что его воплотят. Однако вот. За это я и люблю Haiku–комьюнити, за ять и ударение в русской раскладке, за QR коды эти, за кучу ненужной, но милой фигни на haikuware.
Для тех кто не понял зачем эта фича нужна: когда KDL впервые осчастливил меня своим появлением — мой единственный вопрос был: «Как, мля, скопипастить вот этот текст, когда нечем копировать и некуда вставлять?!!", — сия мысль оформилась в тикет и вот оно. :) Пишите тикеты, любите друг друга, переходите на Haiku, слава mmlr, ура!

Развеиваю

Развеиваю неясности:
1) Версия QR–кода задаётся командой qrconfig
2) Команада qrwebpost генерит урлы вида:
http://haiku.mlotz.ch/q?i=qubetest&clear=yes
http://haiku.mlotz.ch/qrencode/store.php?i=qubetest&d=OLOLOLOLOLO
и т.п.

энкодер немного бажный.

Переводчику

Переводчику решпект за перевод. Тема очень любопытная. Хотя конечно доступное руководство по использованию step-by–step весьма потребно для не сильно продвинутых юзверей типа меня грешнаго.

Переводчикам,

Переводчикам, там внизу отмечены они.

Кто «они»

Кто «они» отмечены переводчикАм?

имелось в виду,

имелось в виду, что статью делало несколько переводчиков. и соответственно, Вас поправили, насчет того,что благодарность нужно выражать переводчикАм

А!.. Спасибо

А!.. Спасибо переводчикам!

Там какие–то отчеты (квартальные что–ли?..) пишут гугловские студенты. В двух словах, никто не скажет, как у них дела?

Четыре новости

Четыре новости полстраницей ниже

x64–порт:
собирается ядро. загрузчик грузит ядро. можно посмотреть KDL.

befs resizer:
автор разобрался как всё должно быть. реализовал перемещение инодов, осталось собственно перемещение файлов и каталогов.

nfs4:
листинг,открытие и чтение файлов реализовано и работает. осталось реализовать различные служебные команды и состояния

openjdk:
похоже что всё работает. остались только баги и вопросы совмесимости

Спасибо

Спасибо огромное!
Я вроде как видел их. Только совсем плохо понимаю свободный стиль изложения современной молодежью…

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
F
Q
g
6
c
m
Enter the code without spaces and pay attention to upper/lower case.