Блог
[одна машина и один день на запись; запись есть у 10 из 596 команд; tri cast пока не входит в релиз tri] Записанную команду можно проиграть и проверить, описанную — только принять на веру. tri cast записывает настоящий вывод терминала, чистит и проверяет его и публикует страницу, карточку-превью и плеер.
Команду, описанную словами, можно оспорить; записанную команду можно проиграть заново. tri cast записывает настоящую команду в терминале, проверяет запись и публикует её страницей с карточкой-превью, GIF для GitHub и плеером для блога. У десяти из 596 команд tri карточка инструмента теперь заканчивается собственной записью, и каждую можно открыть на t27.ai/term/.
tri selftest · the dependencies tri needs
В прошлых постах мы писали, что команда напечатала, и давали ссылку на лог. Читателю приходилось верить, что лог получен от этой команды в этот день. Скриншот ещё хуже: это картинка, её можно отредактировать или поставить. Нам нужна запись, которую читатель может проиграть и которая несёт собственные проверки.
tri cast record запускает каждую команду в псевдотерминале и сохраняет файл asciicast v2: настоящие байты вывода с настоящим временем их появления.tri cast scrub заменяет домашний каталог на ~ в каждом событии и пишет об этом в заголовке файла (redacted). Это единственная правка, которую может нести опубликованная запись.tri cast check завершается с кодом 1, если какая-то команда вышла не с 0, домашний путь остался или в тексте встречается ключ из локального файла ключей.tri cast render рисует сессию GIF-ом для GitHub; tri cast publish создаёт страницу t27.ai/term/<id>/ с записью, карточкой-превью 1200×630, meta.json и тегами og: и twitter:, пересобирает галерею и кладёт копию в архив вне рабочего дерева.tri. Имя, общее у двух из трёх инструментов tri, остаётся без записи, а не привязывается не к тому инструменту.Страница — обычный статический HTML, и это намеренно. X не читает метаданные отдельного поста за хеш-маршрутами сайта, поэтому у записи должен быть собственный адрес, чья карточка-превью и есть то, что показывает пост.
| Часть записи | Статус |
|---|---|
| Приглашение и набор | Поставлено: набирается ровным темпом, чтобы команду можно было прочесть |
| Каждый байт, который напечатала команда, и когда он пришёл | Настоящее |
| Пауза дольше 2 с | Сокращена до 2 с, и кадр об этом говорит |
| Домашний каталог в путях | Заменён на ~ командой scrub, отмечено в заголовке |
Страница говорит то же самое. Если вывод неверный — устаревший баннер, опечатка в команде, текст не на том языке, — ответ один: записать заново. Запись никогда не правится.
В первой записи сессии на плате был баннер, не совпадавший с названием проекта, а перезапись изменила числа: один и тот же fasm2frames занял 33,3 с в одном дубле и 36,8 с в следующем. Пришлось менять все подписи и все фразы, цитировавшие первый дубль. Поэтому пост берёт числа из той записи, которую встраивает, и поэтому числа не копируются вручную во второе место.
Для начала записали восемь, выбрав те, что идут секунды, не требуют платы и печатают то, что читатель может оценить: tri fpga-specs, fpga-keycheck, fpga-selftest, game-selftest, game-tick, game-vault, blog list и selftest. С двумя прежними сессиями (прогон на плате и FPGA-flow) выходит десять. У остальных 586 команд карточка есть, а записи пока нет.
Не из релиза. tri cast — команда из каталога навыков мейнтейнера на одном Python-скрипте, и в релиз tri она не входит. Плеер и опубликованные страницы открыты: записи играют в галерее и в этом посте без установки.
tri cast пока нельзя установить из релиза.Поработаем вместе
Я аудирую RTL и строю независимые побитово точные модели, затем провожу результат через синтез и, когда это полезно, проверяю на плате Artix-7. Первый модуль проверки — бесплатно.