Перейти до вмісту

Вбудувала кодувальник QR на 522 рядки

Перенесла в репозиторій власний кодувальник QR — код Ріда‑Соломона над GF(256), фіксоване розташування модулів, вісім шаблонів маски — на 522 рядках, замість додавати третю залежність середовища виконання, і перевірила його, зчитавши готову матрицю незалежно написаним декодером.

  • Nature, wooden, qr code
    Фото: viarami / Pixabay
  • Mosaic, hd wallpaper, tiles
    Фото: 652234 / Pixabay

522 рядків QR‑кодувальника замість третьої залежності

Ситуація. Документам потрібен був QR‑код із посиланням на онлайн‑версію. Це вміє будь‑яка доступна бібліотека, але взяти одну з них означало б додати третю залежність часу виконання до проєкту, який свідомо обмежився двома — рушієм шаблонів і рендерером PDF, — виходячи з того, що генератор документів має встановлюватися й через багато років.

Завдання. Треба було або погодитися на залежність, або реалізувати формат самостійно, причому довести, що реалізація правильна, а не просто видає щось чорне й квадратне.

Дія. Кодувальник займає 522 рядки й реалізує ті частини специфікації, які справді потрібні для цього завдання: кодування в байтовому режимі, виправлення помилок кодом Ріда — Соломона над полем Галуа з 256 елементів із твірним многочленом потрібного степеня, фіксоване розташування модулів із пошуковими, синхронізувальними й вирівнювальними візерунками, інформацію про формат і версію, а також усі вісім масок даних, кожну з яких оцінюють за чотирма штрафними правилами специфікації, щоб обрати маску з найменшим штрафом, а не завжди ту саму. Саме перевірка зробила це рішення обґрунтованим. Перевірка кодувальника за його ж логікою нічого не доводить, тому готову матрицю модулів зчитує назад декодувальник, написаний незалежно за описаним у специфікації порядком читання, а тест перевіряє, що декодований рядок збігається з вхідним. Так «воно дає правдоподібне зображення» перетворюється на «воно дає код, який декодується в правильну URL‑адресу», і це перевіряють під час кожного прогону, а не один раз на око, телефоном.

Результат. Кількість залежностей часу виконання лишилася на рівні двох, а кодувальник — єдиний вбудований (vendored) компонент у проєкті. Слід прямо сказати, що це не універсальна реалізація: вона підтримує ті режими й версії, які використовують документи, і нічого більше, а чесне обґрунтування рішення — бюджет залежностей, а не якісь заяви, що результат кращий за зрілу бібліотеку.

Одна частина довшого переліку — і він увесь на цьому сайті.

Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.

Переглянути весь перелік