Что нельзя оставлять на последний день перед открытием выставки
В 2025 году мой интерактивный экспонат подвёл при посетителях: нажатие при смене страницы срабатывало уже на новой кнопке. Теперь я проверяю это первым делом.
На последний день нельзя оставлять проверку экспоната глазами посетителя: быстрые повторные нажатия, нажатие во время перехода между страницами и возврат на главную. Эту проверку делают на готовых материалах, которые экспонат будет показывать на выставке, и на исправления после неё тоже нужно время. В тот раз материалы для экспоната пришли почти перед открытием, проверить я не успел, и ошибку нашли посетители.
Я пишу программы для интерактивных экспонатов и сам запускаю их на выставках и в музеях.
Что случилось на открытой выставке
Это был информационный сенсорный киоск на выставке. На главной странице была кнопка, а на следующей на том же месте стояла другая. Посетитель нажимал первую, и страница переключалась. Если палец чуть задерживался или переход шёл очень быстро, нажатие срабатывало уже на кнопке новой страницы.
Нажатия на время перехода у меня тогда не отключались, и новая страница принимала их, пока ещё только появлялась. Программа к этому моменту не была готова открыть страницу за второй кнопкой и показывала чёрный экран. С него нельзя было ни вернуться назад, ни сделать что-то ещё.
Пришлось выкручиваться и объяснять, что подвела техника. На деле это был мой просчёт. Материалы отдали почти перед открытием, и проверить на них экспонат я не успел.
Как только мне об этом сообщили, я сел за компьютер и исправил ошибку. Через 15 минут на выставке уже работала обновлённая версия. Это было неприятно.
Почему ломается то, чего не ждут
Каждый посетитель ведёт себя по-своему, у каждого свои мысли. Тот, кто делал программу, знает, куда нужно нажать, а посетитель нажимает то, что ему хочется.
Часто у меня встречались ошибки в обработке нажатий:
- два-три быстрых резких нажатия подряд переключали экспонат не туда;
- во время перехода кнопка на новой странице ещё не появилась, но фон под ней уже принимал нажатие;
- где-то я забывал отключить кнопку.
Так бывает, когда программу делают в спешке. Такие ошибки я допускал на первых порах, когда опыта было мало.
На месте я начинаю с кнопок. Стараюсь при этом абстрагироваться от того, что делал программу сам, и действую как обычный посетитель: нажимаю то, что хочется нажать. Помогает насмотренность: я видел, что делают посетители у интерактивных экспонатов.
Полсекунды, пока проявляется новая страница
Самой большой из этих ошибок была та, что подвела меня в 2025 году: я забывал отключать нажатия на время перехода. Теперь правило такое: пока новая страница полностью не появилась, нажатия не срабатывают. Переход у меня длится секунду: полсекунды гаснет старая страница и полсекунды проявляется новая. Пока она не появилась полностью, её кнопки неактивны, чтобы посетитель не нажал их случайно.
В моих программах на C# с библиотекой интерфейсов Avalonia на время самого перехода поверх всего окна ложится прозрачный слой: он появляется вместе с началом анимации и прячется, когда она закончилась. Пока слой лежит, все нажатия достаются ему, и до кнопок под ним они не доходят.
Слою нужен фон, пусть и прозрачный. По документации Avalonia, элемент без фона не участвует в проверке нажатий на своей пустой части, поэтому слой без фона пропустил бы их к кнопкам. Чтобы на нажатия откликалась вся площадь элемента, там же советуют задать Background="Transparent".
Проверку блокировки я теперь делаю первой, когда прихожу к экспонату.
Вторая проверка: возврат на главную
Вторым я проверяю, сбрасывается ли экспонат при возврате на главную и правильно ли работает конечный автомат. Так называют схему всех страниц и состояний экспоната с переходами между ними.
Сейчас я стараюсь заранее описывать экспонат такой схемой: куда переходить, что делать по каждой кнопке, какой сценарий запускать на каждое действие посетителя. Посетитель этой логики не замечает, пока всё работает. Но решений в ней много, и часть из них принимается по месту:
- когда запускать отсчёт бездействия, после которого экспонат вернётся к началу;
- открывается ли страница после перехода с самого начала или программа запоминает последнее действие и возвращает посетителя туда, где он остановился;
- нужно ли сбрасывать прокрутку, когда посетитель возвращается на главную.
Такие вещи я делаю постоянно, и больше всего времени у меня ушло на ядро для них. По сути, это своя основа поверх готовых библиотек: в ней собраны переходы, отсчёт бездействия, сброс прокрутки и сама схема состояний.
Сброс я проверяю так: открываю страницу, прокручиваю её, возвращаюсь на главную, снова захожу на эту страницу и смотрю, сбросилась ли она так, как задумано.
Что нельзя оставлять на последний день
До открытия на каждом экране стоит пройти три проверки:
- Быстрые нажатия. Нажмите каждую кнопку, которая открывает другую страницу, два-три раза подряд. Экспонат должен сделать один переход.
- Нажатие во время перехода. Пока страницы сменяются, нажмите туда, где появится новая кнопка. Экспонат не должен на это ответить.
- Возврат на главную. Откройте страницу, прокрутите её, вернитесь на главную и зайдите снова. Страница должна открыться так, как задумано: с самого начала или с того же места.
Для этих проверок нужны готовые материалы на месте и время, чтобы исправить найденное. Если вы заказываете экспонат, спросите исполнителя, когда он успеет пройти его как посетитель на готовых материалах.
Ту ошибку 2025 года первыми нашли посетители. Теперь я ищу её первым.
А какую ошибку в ваших проектах пользователи нашли раньше вас?