Как сделать консоль красивой

Обновлено: 06.07.2024

Разработчики сомневались, что консоль вытянет 4К, и решили не экспериментировать.

Портирование God of War на PC заняло у Sony Santa Monica и студии Jetpack Interactive около двух лет: пришлось адаптировать под PC технологии, изначально создававшиеся для PlayStation. В интервью GameStar продюсер Мэтт ДеВальд и руководитель разработки Кори Барлог поговорили о технических аспектах порта.

На PC удалось сделать то, чего нет на PlayStation 5 — речь, конечно, о нативном разрешении 4К. Формально новая консоль может рендерить God of War в таком разрешении, но разработчики сомневались, что нигде не возникнет проблем с производительностью. PC в этом плане дает больше возможностей.

Некоторые игроки потратили на свои PC $8000-30000 и нам хотелось порадовать их потрясающими впечатлениями. Мы оптимизировали стриминг текстур, так что удалось повысить их разрешение и дальность отрисовки. А еще на PC есть нативное разрешение 4К.

Даже на PlayStation 5 его нет: там мы использовали технологию шахматного рендеринга, сделав акцент на повышение частоты кадров. Поднимать разрешение не стали, решив, что для [некстген-патча] это слишком рискованно.

Для PC-версии мы выкрутили на максимум все, что могли — качество объектов, количество теней — и сделали все возможное, чтобы игра стала еще лучше. К счастью, слишком уж сильно менять существующие ассеты не пришлось: у нас крутые художники и они делают потрясающие вещи.

Эксклюзивы PlayStation привязаны к консоли не так сильно, как можно подумать. Например, еще до начала портирования у движка God of War были кое-какие части, уже способные работать на PC.

Это произошло из-за необходимости тестировать игру. Разработчики не вдаются в подробности, но речь, видимо, идет об автоматических тестах, выполнявшихся на PC, а не на девкитах консоли.

Впрочем, портировать графическую часть движка пришлось целиком: она была жестко заточена под особенности PlayStation. Особенно много проблем, как мы знаем из других интервью, возникло с системой частиц.

Тестирование версии для PC тоже было трудоемким процессом. В основном из-за количества комплектующих, которые нужно проверить — пришлось тестировать множество комбинаций железа.

Мне кажется, у нас было 30 процессоров и 40 видеокарт. Мы комбинируем их и проводим огромное количество тестов производительности. Если выясняется, что с какой-то комбинацией есть проблемы и надо разобраться, включаем отладку и стараемся выяснить, что не так. А потом тюним.

Разрабатывать под консоли все-таки приятнее. Во-первых, не нужно думать о множестве комплектующих. Во-вторых, точно известно, что игре доступны все ресурсы — параллельно с ней не работает приложение, активно потребляющее ресурсы.

Работая над версией для PC, приходится думать о множестве моментов, связанных с конфигурацией компьютера — это утомляет. С другой стороны, благодаря этому я стал ценить разработку под консоль. Потому что тут мы можем по-настоящему сфокусироваться на создании игры под конкретное железо и не думать обо всех возможных вариантах.

На PlayStation, например, нет антивируса, но я не могу гарантировать, что на PC во время игры не будет включен антивирус и из-за него у нашей игры не возникнут проблемы. Невозможно подготовиться ко всем таким ситуациям.

Фанаты PlayStation вряд ли расстроятся, что игра вышла на PC — во всяком случае, так думает Кори Барлог. Даже наоборот: скорее всего, они обрадуются, что увеличилось число людей, с которыми можно обсудить любимую игру. Сам Барлог точно бы обрадовался.

В КС ГО можно изменить цвет основного интерфейса (HUD), можно изменить цвет шрифта в консоли, чтобы было удобнее читать нанесенный по врагам урон, а можно настроить эти параметры под себя и оставить их в cfg.

Цвета в КС ГО

Включаем консоль разработчика

Как изменить цвет HUD

В игре всего 11 цветов, каждый из которых окрашивает:

Есть ещё одна интересная команда.

Как изменить цвет консоли

Стандартный цвет шрифта в консоли не читается, когда вы играете на больших мониторах с соответствующим разрешением. Чтобы изменить цвет надписей дамага в консоли на читаемый, достаточно ввести несколько команд:

con_filter_enable 1

con_filter_enable 2

con_filter_text_out Player

con_filter_text Damage

После этих команд станет возможно изменение цвета данных показателей в консоли.

А далее можно вписать любой цвет из перечисленных:

log_color General , значение Цвет
FF25FFFFРозовый
6495EDFFГолубой
00FFFFFFБирюзовый
FF7F50FFОранжевый
FFD700FFЖелтый
008000FFЗеленый
AF0000FFКрасный
Красный не рекомендуем использовать. С ним шрифт становится невыносимо тяжело читаемым Так выглядит красный цвет с консольным шрифтом

Однако, у данного способа изменить цвет есть минус — каждый раз его придется вводить заново. Это не так проблематично, но можно решить простой записью в консоль. Чтобы сделать это, введите после все команд следующее:

host_writeconfig (название конфига)

И теперь каждый раз, когда вы будете заходить в игру, можно вводить в консоли: exec (название конфига). Вам будет удобнее, если вы занесете дополнительные команды, которые улучшают игру.

Если вам не понравилась игра с подсветкой шрифта, то введите эти команды, чтобы вернуть всё на свои места.

В 15 выпуске Perl-журнала PragmaticPerl опубликована моя статья “Простые способы сделать консольную утилиту удобнее”: ссылка. Здесь находится дополняемая и улучшаемая версия этой статьи.

Качественная командная строка – отличнейшее окружение для работы. История, автокомплит, конвейеры, перенаправления, широчайший набор готовых программ, возможность скопировать-и-вставить даже самую сложную команду – все это делает CLI мощным и удобным инструментом. Ничего удивительного, что разработчики охотно пишут собственные консольные программы и скрипты: автоматизация сборки и деплоя, разворачивание тестовой БД, статистика, мониторинг, хитроумный поиск – поводов не счесть.

В этой статье собраны несложные советы, следование которым поможет сделать свои консольные скрипты более удобными в работе.

А стоит ли вообще писать новый скрипт?

А может быть, задача решается коротким perl-однострочником, который проще написать заново 2 , чем вспоминать название готового скрипта? Кстати, perl-однострочники тоже прекрасно встраиваются в конвейеры.

Хорошее имя

Какое оно – хорошее имя для хорошей программы? Короткое или длинное? Абстрактное или описывающее поведение? Однословное или составное?

Вот несколько простых правил:

  • чем реже используется программа, тем длиннее может быть ее имя, и наоборот; сравните часто используемую ls и гораздо более редкую apt-get install ;
  • чем более узкую задачу решает скрипт, тем более подробным и точным должно быть имя; сравните обобщающе-уклончивое make и донельзя конкретное ps2pdf ;
  • имя может быть абстрактным и ничего не значащим, но ни в каком случае оно не должно вводить в заблуждение; скрипт для подготовки релиза можно назвать и make-release , и rc1 , но не стоит называть его test-mainline , launch или new-version .

Именованные параметры

Getopt::Long входит в стандартную поставку perl с 1994 года, и позволяет легко разбирать самые разнообразные опции:

  • короткие (однобуквенные),
  • длинные (многобуквенные),
  • флаги с автоматически доступным отрицанием ( --cache , --no-cache ),
  • синонимы ( -q и --quiet , -h и --help )
  • опции с обязательными значениями (тип значения можно указать: строка, число, вещественное, шестнадцатиричное),
  • умолчальные значения для опций,
  • автоматическое заполнение массивов и хешей,
  • склеивание коротких опции (как perl -lane , ls -la ).

В общем, изучить документацию на Getopt::Long и попрактиковаться в его применении – стоящее дело.

Однобуквенные или многобуквенные опции?

Мне кажется, что практически для каждой опции стоит иметь и однобуквенный, и многобуквенный варианты (как -q и --quiet ). Однобуквенные ключи удобны при интерактивной работе, так как их быстрее набирать, а многобуквенные – в мейкфайлах и других скриптах, так как более понятны при чтении.

Традиционные имена параметров

Хотите, чтобы пользователи быстрее запомнили параметры вашей утилиты – называйте привычные действия привычными именами:

-h , --help – помощь,

-V , --version – вывод версии программы,

-q , --quiet , --silent – режим с менее подробным выводом,

-v , --verbose – режим с более подробным выводом (интересный пример находим в ssh : -v , -vv , -vvv дают все более и более подробное логирование),

-n , --dry-run – пробный запуск без выполнения пишущих действий,

или -n – количество элементов, которые следует обработать,

-o , --output – файл для записи результата,

-f , --file – файл с данными для обработки,

-r , --reverse – обработка в обратном порядке,

-j , --jobs , --parallel – во сколько процессов распараллеливать обработку.

Антипримеры можно часто наблюдать в Windows-версиях популярных Unix-программ. Например, ping : бесконечная отправка пакетов включается ключом -t вместо умолчального поведения, количество пакетов регулируется ключом -n вместо -c , размер пакета -l вместо -s , TTL -i вместо -t и т.п. Или tracert в сравнении с traceroute : максимальное число прыжков -d и -m соответственно, не резолвить адреса в имена -d и -n . Такой разнобой в именовании очень неудобен, особенно если приходится работать попеременно то с одним, то с другим вариантом программы.

Как объяснить пользователю, что он неправ

Если переданные скрипту параметры не проходят разбор и валидацию, надо корректно сообщить об этом пользователю:

Посмотрим, как ведут себя популярные программы:

Здесь все коротко и по существу:

Когда приходится умирать

Умирать правильно

Скрипт обязательно должен возвращать честный код возврата: в случае успешного завершения – 0, в случае неудачи – что-нибудь другое. Правильный код выхода позволяет успешно использовать скрипт в makefile’ах, для svn-bisect и т.п.

Обратите внимание: у grep ’а есть специальный режим, когда он вообще ничего ничего не печатает, только сигнализирует кодом выхода: нашел или не нашел.

Кстати, Perl’овый die автоматически обеспечивает ненулевой код завершения.

Справка (-h)

По -h (желательно и по --help тоже) скрипт должен выводить справку о себе.

Проверьте, что в справке описано:

  • назначение программы;
  • все опции и параметры, c делением на обязательные/необязательные и принятыми умолчальными значениями;
  • типичные и заковыристые примеры использования: пользователь сможет их скопировать, и сразу же получит пример работы программы.

Иногда справку пытаются выводить в stderr . Это неправильно. Справка должна попадать в stdout , чтобы ее легко было обрабатывать grep ’ом, less ’ом и т.п.

Еще можно обращать внимание на переменную окружения $PAGER и если она выставлена – передавать справку через пайп этой программе. Например, так поступает git help .

Еще бывает, что вывод справки заканчивают ненулевым кодом выхода ( exit 2; ). Это неправильно. Если пользователь запрашивал справку, то ее вывод – успешно выполненная задача и скрипт должен сообщать, что закончился успешно ( exit 0; ).

И еще одна смешная и грустная иллюстрация того, “как не надо”: ссылка (подсказана в комментариях в PragmaticPerl).

Разумные умолчания

Хорошие умолчательные значения критически важны для эффективной работы с программой. Выбирать умолчания следует исходя из того, что является основной задачей программы и каким образом она будет использоваться чаще всего.

Чем чаще нужна какая-либо опция, тем проще она должна включаться, а самое частое значение параметра должно предполагаться по умолчанию. Идеал: программа выполняет наиболее часто требующуюся задачу вообще без параметров (например: cal , debuild , gzip , ls , make , passwd , plackup ).

И опять хороший пример подает grep : поиск в stdin делается по умолчанию; поиск по списку файлов включается простым их перечислением; рекурсивный поиск, размер контекста и нечувствительность к регистру включаются однобуквенными опциями; экзотика типа управления буферизацией – многобуквенными опциями.

Интересно устроено у GNU grep управление цветной раскраской вывода: по умолчанию при выводе на интерактивный терминал вывод раскрашен, при выводе в файл – не раскрашен, а для ручного управления раскраской есть многобуквенная опция --color .

Автокомплит

Если у вашего скрипта много возможных параметров (особенно многобуквенных), напишите и выдайте вашим пользователям функции для автокомплита (автодополнения) в популярных шеллах. Документация: для zsh, для bash.

Кстати, обратите внимание на функцию gnu_generic в zsh : если по --help ваш скрипт рассказывает о своих параметрах в достаточно общепринятом формате, для включения автодополнения по параметрам будет достаточно сделать

compdef _gnu_generic my-script.pl

Маленькая хитрость: раскраска вывода

Если вашим скриптом будут пользоваться люди в интерактивном режиме – упростите восприятие вывода, раскрасив его в разные цвета. См. например Term::ANSIColor.

Маленькая хитрость-2: молчаливый запрос пароля

Если скрипту надо спросить у пользователя пароль или иную секретную информацию, отключите отображение вводимых символов. Например, с помощью Term::ReadKey:

Итого

Таковы, по моиму опыту, простейшие способы улучшения user experience консольных программ.

Если у вас тоже есть чем поделиться на эту тему – пишите в комментариях или ответными статьями, тема того заслуживает.

Использование console.log() при отладке — один из любимых приемов разработчиков. Давайте посмотрим, как можно улучшить вывод в консоли.


Photo by Sigmund on Unsplash

1. Стилизация console.log


Для этого нужно использовать метод подстановки строк. Вы добавляете переменную %c , а затем, в качестве параметра переменной, добавляете стили.


2. Предупреждения, ошибки и дополнительная информация

Возможно, вы видели предупреждения (Warning) и ошибки (Errors) в консоли, но не знали, как их добавить.

Значок info больше не показывается, поэтому в Chrome визуально нет разницы между console.log и console.info.


Это полезно, поскольку браузер позволяет фильтровать по этим типам.


3. Очистка консоли

Если вам нужна чистая консоль, просто запустите команду:

4. Группирование

Развернутый вид


Это бывает полезно, когда вы перебираете объект в цикле и хотите показать результаты в более упорядоченном виде, как показано ниже:


Свернутый вид

Чтобы получить такой же результат, но чтобы список при этом был свернут, нужно поменять console.group на console.groupCollapsed .


5. Считаем console.log-и

Если вы хотите узнать, сколько раз рендерился компонент или вызывалась функция, вам пригодится метод console.count() . Перезапустить счетчик можно с помощью countReset .


6. Вывод массивов или объектов в виде таблицы

Организовать вывод объекта или массива можно при помощи метода console.table() .


7. Подстановка строк и шаблонные литералы

Подстановка строк все еще используется? Да, если дело касается стилизации console.log. В остальных случаях, полагаю, используются шаблонные литералы. Но вообще подстановка строк выглядит так:

То же самое можно сделать с шаблонными литералами:

Чтобы познакомиться с другими консольными методами, загляните на MDN Web Docs.

Читайте также: