Две прикольные истории про программисткие будни.
Первая:
Исследователи (@maciejwolczyk, @CupiaBart), обучали нейросеть играть в NetHack, старую ролевую игру, где всё отображается текстовыми символами. Это очень старая ролевая игра из времён (1987 г.), когда нормальных пользовательских интерфейсов не было, и всё происходило в консоли. Игрок проходит уровни, собирает вещи и награды, участвует в сражениях и набирает очки — и всё выражается самыми простыми символами.
В общем, обучили. Модель стабильно набирала 5000 очков. Однако внезапно что-то пошло не так — модель начала набирать только 3000 очков. То есть показала результат существенно хуже. Отладка решений всегда дело весёлое, поэтому автор треда попробовал:
— найти проблему в коде загрузки модели агента
— откатить код на пару дней назад
— откатить код на несколько недель назад (ну там то ТОЧНО всё работает?)
— пересобрать окружение
— поменять версию CUDA (драйверов для запуска нейросетей на видеокарте)
— запустить код на персональном ноутбуке, а не сервере
Ничего не помогло — модель стабильно показывала 3000 очков.
В отчаянии автор написал создателю модели @JensTuyls, и получил неожиданный ответ:
— Возможно, сегодня полнолуние 🌕
Что?? 😑
Проверив лунный календарь, оказалось, что действительно в этот день было полнолуние. Автор запустил игру и увидел сообщение: «Ты — везунчик! Сегодня полнолуние.»
В NetHack существует механика, которая меняет игровой процесс при полнолунии, основываясь на системном времени. Персонаж становится удачливее, появляются оборотни в зверином облике, и собаки начинают выть. Модель не обучалась на данных с полнолунием, поэтому её результаты снизились до 3000 очков. Изменив системное время, автор убедился, что модель снова набирает 5000 очков.
Это не делало игру сложнее, но модель просто не понимала, как изменились правила, и старалась играть так, как привыкла — отсюда и просадка в очках. Для проверки можно сменить время на компьютере — и модель снова набирает 5000 очков.
Мораль: столкнувшись с неожиданной ошибкой, не забудьте проверить лунный календарь.
Вторая история про man в консоли.
Это такая команда, которая выдает документацию по тому, что там вторым параметром. Например, man ls выдает документацию по ls, который показывает список файлов и поддиректорий текущей директории, а man man выдает документацию о себе.
На StackExchange кто-то задался вопросом, чего это у меня тесты падают. Отвечает
Marnanel Thurman:
«Э-э, это моя вина, я предложил это. Извините. Практически вся история изложена в коммите. Программист, поддерживающий man, мой хороший друг, и однажды, шесть лет назад, я в шутку сказал ему, что если вызвать man после полуночи, он должен напечатать «gimme gimme gimme», из-за песни Abba «Gimme gimme gimme a man after midnight»:
Ну, он действительно добавил это. Кому-то было весело обнаружить это, и мы в основном забыли об этом до сегодняшнего дня.
Я не могу говорить за Cola, конечно, но я не ожидал, что это когда-либо вызовет какие-либо проблемы: какой тест сломается при разборе вывода man без указанной страницы? Полагаю, не стоило удивляться, что такой тест всё же нашёлся, но это заняло шесть лет.»

