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

Блог ·

Вибір охоплює все речення

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

Автор: Provibr

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

Відмінність живе на шар нижче, у словах. Контейнер не має BIOS, не має віртуального диска в тому сенсі, у якому його має віртуальна машина, і не має гостьового агента. Попередній раунд занотував як незавершену нитку, що одне речення на сторінці контейнера й далі каже «віртуальна машина». Їх виявилося чотирнадцять.

Чому слово є хибною одиницею

Очевидна полагодка полягає у місці для підстановки там, де стоїть іменник. Щось на кшталт вибору за типом ресурсу, що дає «контейнер» або «віртуальна машина», вкинутого в середину речення.

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

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

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

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

Вибір, чиї гілки згодні між собою, є невидимим

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

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

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

Речення, яке ніколи не було правдою

Одне з чотирнадцяти взагалі не було питанням слів.

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

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

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

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

Старе реченняЩо в ньому було хибним на контейнері
ОбіцянкаПоки нічого не видноЦе не зміниться; код не дивиться ніколи
ПричинаГостьовий агент має працюватиКонтейнери його не мають
ПолагодкаЗапустіть гостьового агентаЗапускати нічого

Два способи, якими вимірювання стало зеленим із хибної причини

Браузерну перевірку всього цього написали першою, і вона схибила двічі, у способи, які варто назвати, бо обидва дають успішний результат.

Перший: перевірка читала видимий текст сторінки і шукала слово «контейнер». Вона його знайшла. Воно стояло в назві тестового тарифу, zz-k7-containerplan, який засіяла сама перевірка, тоді як речення трьома рядками нижче й далі казало «віртуальна машина». Тест, що засіває оснастку, а тоді шукає по всій сторінці слово, яке та оснастка містить, міряє власне приготування. Полагодка полягає в гачку на елементі, що справді несе речення, аби твердження могло справдитися лише тим, про що воно є.

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

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

Коли дві сталі носять одне імʼя

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

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

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

Що навмисно лишили як було

Три речі лишилися такими, як були, і записати чому належить до роботи.

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

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

А ліцензійний лічильник далі каже VM, бо саме це він рахує. Одиниця, за яку клієнтові виставляють рахунок, не є одиницею, на яку клієнт дивиться, і тихе перейменування зробило б так, що рядок рахунку перестав би сходитися з числом на сторінці.

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

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

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

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

Читати далі

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

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