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

Блог ·

Дієслово за чотири слова

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

Автор: Provibr

Нідерландська має два способи звертатися до читача. u є формальним, а je неформальним, і вибір не є лише справою ввічливості: він змінює дієслово, і, на відміну від французького чи німецького відповідника, форма, яка виходить, залежить від того, де стоїть дієслово. Цей сайт дрейфував до вживання обох, тож ми зупинилися на je і перетворили все. Це є двома перетвореннями, бо нідерландський текст живе у двох місцях, що не мають нічого спільного: 102 статті в markdown і каталог повідомлень із 18841 ключем. Вимірювання перед першим перетворенням: 445 формальних займенників у 44 зі 102 статей, з них 362 простих, 82 присвійних і один зворотний. Решта 58 уже були неформальними.

Якби це була мова, де займенник є лише займенником, уся справа була б однією командою заміни. Вона нею не є, і всі цікаві невдачі є нижче за течією від цього.

Таблиця, що тихо дещо пропускала

Нідерландська міняє місцями підмет і дієслово в питанні або після винесеного наперед елемента, і закінчення дієслова при цьому зникає. kunt u стає kun je, а не kunt je. Чи зникне закінчення, залежить від основи: zet u лишається zet je, але schrijft u стає schrijf je.

Тож скрипт має знати для кожного слова, що може стояти перед займенником, що станеться з тим словом. Перша версія мала таблицю дієслів, які я побачив у вибірці, і лишала все інше без змін. Це дало Duwt u creditnota's, що стало Duwt je creditnota's, і Verlaagt u een tijdstempel, що стало Verlaagt je een tijdstempel. Обидва є хибними, обидва виглядають граматичними, і обидва є цілком мовчазними. Скрипт відзвітував про успіх.

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

Таблиця тепер містить усі 84 слова, що справді стоять перед формальним займенником, полічені з корпусу, а не з памʼяті, а невідоме слово є кодом виходу 1. Із тих 84 51 не змінює нічого: сполучники, відносні займенники та прийменники, перед якими займенник є просто підметом або додатком. Дві третини таблиці існують суто заради того, щоб та третина, яка важить, не могла сховатися за усталеним значенням.

Три помилки, які знайшло лише читання

Щойно таблиця стала вичерпною, три речення після запуску все ще були хибними, і жодне з них не є проблемою таблиці. tegen u kan liegen стало tegen je kan liegen, тоді як мало б бути tegen jou kunt liegen: займенник там є додатком при прийменнику і перетворюється на наголошену форму. van u uw стало van je uw, бо перший прохід спожив позицію, потрібну пізнішому проходові. А u zich стало je zich, тоді як зворотним при неформальному займеннику є je je.

Кожна з цих помилок вимагає тримати в голові ціле речення. Жоден прохід у вікні з двох чи трьох слів їх не дасть, і жоден тест, що порівнює лічбу слів, їх не помітить.

Узгодження на відстані

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

als u die heeft ingesteld є правильним. als je die heeft ingesteld є хибним; там має бути hebt. Займенник і дієслово узгоджуються, а die сидить між ними, тож прохід, що вимагає, аби дієслово йшло одразу за займенником, не бачить геть нічого. Проходом, який тут спрацював, був той, що змінює займенник, і він не має причини дивитися далі вздовж речення.

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

Рівно три дієслова, бо лише в них форма другої особи різниться між двома регістрами. Пʼять очевидних сусідів є однаковими в обох, і їхнє включення дало чотири збіги, що ніколи не могли б бути дефектом. Перевірку, що дає рядки, з якими нікому не треба нічого робити, люди перестають читати.

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

Дві сторожі, бо маскування не можна поділити

Обидва тіла тексту тепер мають постійну перевірку, і це є окремими файлами.

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

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

Це правило є вимірюванням, а не зручністю. У статтях десять голих збігів переживають перетворення, і всі десять є в середині речення: пʼять є юнітами стійки з розділу про центри обробки даних, пʼять є самою літерою з абетки, що її навмисно оминає. У каталозі їх 61: 54 в середині речення, шість як підпис і один як одиниця в назві поля. Усі 61 прочитано, і жоден не є займенником. Записати це списком назв файлів означало б проґавити друге написання тієї самої думки; записати це формою ловить обидва.

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

Два способи бути пустопорожньо зеленим

Перевірка перетворення каталогу в браузері дала два хибні зелені, і саме вони є переносною половиною цього раунду.

Сторінка за прапорцем викочування відповідає сторінкою помилки, а сторінка помилки не містить жодних формальних займенників. Два екрани панелі закриті саме так, і сканування відзвітувало нуль знахідок на обох, що читається точнісінько як чиста сторінка. Видимим це зробила нижня межа на кількість символів: закрита відповідь мала 173 символи, а з увімкненими прапорцями ті самі два екрани мали 1335 і 557. Сканування порожньої сторінки і сканування чистої сторінки є тим самим числом.

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

Що ми б записали

  1. Займенник у флективній мові не є рядком. Його зміна переписує слова, яких він не торкається.
  2. Вичерпна таблиця перевершує вибіркову, а різниця є видною лише тоді, коли таблиця виходить на тому, чого не знає.
  3. Дві третини доброї таблиці можуть нічого не робити. Вони існують, щоб решта не могла сховатися за усталеним значенням.
  4. Вікно у два слова не бачить речення. Деякі помилки потребують читача, і обійти це ніяк.
  5. Узгодження може діяти на відстані. Наше було за чотири слова, і жоден прохід у конвеєрі не дивився так далеко.
  6. Обмежте перевірку формами, що справді можуть різнитися. Пʼять зайвих дієслів означали чотири рядки, з якими ніхто нічого не міг зробити.
  7. Перевірку, що дає рядки без дії, починають пропускати, і це є гіршим, ніж її не мати.
  8. Записуйте схвалені збіги з причиною і зазнавайте невдачі на новому. Тиша не є результатом.
  9. Закрита сторінка сканується чистою. Покладіть нижню межу на розмір того, що ви просканували.
  10. Доведіть червоний доказ. Кеш розробки зробив наш зеленим і не засвідчив би нічого.

Для ясності про те, чим це є: перетворення статей зробило 491 заміну в 44 файлах, різниця склала рівно 306 рядків усередину і 306 геть, і нічого поза нідерландським деревом джерел не зачеплено; перетворення каталогу зробило 169 замін у 115 ключах, лічба ключів лишилася незмінною на 18841 і в тому самому порядку, а різницю символів цілого файлу звірено літера за літерою. Обидва тіла тепер міряють нуль формальних займенників, а інваріант слів, що порівнює кожну пару слів, яка не є формою звертання, відзвітував нуль відмінностей і був доведений червоним тричі. Не доведено: один читач, жодного другого носія, жодного вимірювання доступності, а текст шляху помилки трьох закритих екранів ніколи не рендерився в браузері.

Із платформної роботи над Provibr. Що девʼять каталогів роблять із набором сталих елементів керування, описано в Шістнадцять тисяч ключів, девʼять мов, скрипт перетворення, що пошкодив три статті, на які його ніколи не наводили, описано в Скрипт перетворення, що пройшовся надто широко, а ще одна сторожа, що не могла побачити того, заради чого її написали, описана в Розмита множина не є числом.

Читати далі

Почніть з одного хоста й одного агента

Створіть обліковий запис, встановіть агента однією командою та підключіть свій перший хост Proxmox. Пробний період триває 14 днів і не потребує платіжних даних.