Unlaw 3.12.2: игры и студия записи в ul desk, новый ul capture
Что я сделал в Unlaw с 3.11.0 по 3.12.2. Игры в браузере с общими рекордами, переписанная с нуля запись экрана, камеры и звука, студия в духе OBS и большой разбор ошибок.
原文の言語:ロシア語
Вышел Unlaw 3.12.2. Ниже всё, что я сделал в релизах 3.11.0–3.12.2. Обновиться можно командой ul update.
3.11.0: игры в ul desk
- Во вкладке Games в
ul deskтеперь можно играть во все игры изul game: Tetris, Snake, Minesweeper, Space Invaders и Chomp. Работают клавиатура и мышь. - Отдельную копию игр для браузера я писать не стал. Desk запускает те же терминальные игры через
ul game --stream, а страница только рисует картинку. - Поэтому и рекорды общие: терминал и браузер пишут в один файл, рекорд из браузера виден в терминале и наоборот.
- Если уйти со вкладки или свернуть страницу, игра встаёт на паузу.
- Заодно переделал дизайн desk: вкладки Board / Today / Stats / Games / Studio (клавиши 1–5), поиск, справка по клавише
?.
3.12.0: новый ul capture
Команды для скриншотов и записи экрана я переписал с нуля. Хотел, чтобы в них разобрался любой пользователь.
ul captureбез аргументов открывает меню, где действие выбирается номером.- Скриншоты: весь экран, область или окно. Можно выбрать дисплей, задержку или сразу скопировать в буфер обмена.
- Запись: экран со звуком Mac и микрофоном, экран с камерой в углу, только камера, только аудио (m4a, mp3, wav).
- Звук Mac пишется без BlackHole и других виртуальных драйверов.
- Пауза и продолжение: куски записи склеиваются в один файл без перекодирования.
--duration 30пишет ровно 30 секунд с таймером в терминале и сразу сохраняет.- Библиотека: список записей, открыть, показать в Finder, скопировать, удалить в Корзину, обрезать, конвертировать (MP4, GIF, MP3 и другие).
ul capture devicesпоказывает дисплеи, камеры и микрофоны и предупреждает, если вместо микрофона выбрано виртуальное устройство.- Камеру и микрофон можно выбрать по имени.
defaultберёт то, что выбрано в системе, так что номера устройств помнить не нужно. - Старые команды (
ul capture screenshot,area,screen,audio) я оставил, они работают как раньше. - Файлы никогда не перезаписываются.
3.12.0: Studio в ul desk
Поверх ul capture я собрал вкладку Studio, маленькую студию записи в духе OBS.
- Четыре режима: экран, экран с камерой, камера, аудио. Выбор дисплея, камеры, микрофона и формата.
- Большая кнопка записи (
r), пауза (p) и таймер. - Скриншоты экрана, области или окна прямо со страницы.
- Превью экрана, камеры и уровня микрофона.
- Библиотека с миниатюрами: видео и аудио играют прямо на странице, с перемоткой, обрезкой, конвертацией и удалением.
- Индикатор REC виден на любой вкладке.
- Запись, начатая в терминале, видна в браузере, и наоборот. Если закрыть страницу, запись продолжается.
3.12.1: быстрее и с волной звука
- Запись теперь стартует почти вдвое быстрее: 0,8 с вместо 1,3–1,8 с (замерял на своём MacBook Pro M3 Pro).
- Кнопка реагирует мгновенно, таймер больше не убегает вперёд.
- Пока идёт запись, превью экрана ставится на паузу, чтобы не тормозить запись.
- Волна звука, как в Voice Memos. Во время записи она бежит в реальном времени, записываемая часть красная. В просмотре файла видна волна всей записи: по ней можно кликнуть для перемотки и отметить кусок для обрезки.
ul capture waveрисует ту же волну символами прямо в терминале.- Если сохранение не удалось, куски записи больше не теряются, а
ul capture stopпробует ещё раз.
3.12.2: разбор ошибок
После стольких новых функций я устроил полный аудит проекта и нашёл 28 проблем. Все исправил, вот самые важные.
- Безопасность. Чужой сайт больше не может отправить задачу локальному серверу моделей
ul lmчерез служебный адрес. - Агент. Добавление задач и напоминаний теперь требует подтверждения, как и любое другое изменение. Файл из Telegram с хитрым именем больше не может сохраниться за пределами папки загрузок.
- Команды с таймаутом (
core.command_timeout) завершают и свои дочерние процессы, а команды, которые ждут ввода с клавиатуры, больше не зависают. - Игры. Рекорд сохраняется сразу после конца игры, а не после экрана «GAME OVER», так что закрытая вкладка его больше не теряет.
- Запись. Если рекордер упал (отключили дисплей или устройство), записанное сохраняется сразу. Ctrl+C во время сохранения больше не оставляет запись в состоянии «сохраняется». Сломанные миниатюры не застревают в кэше.
- Редактор ule не портит файлы в неизвестной кодировке и не перезаписывает молча чужие изменения файла.
- ul zip правильно распаковывает
.tar.zstи не путает с опциями файлы, имя которых начинается с-. - ul tg download не скачивает файл повторно, если он уже лежит как
name 2.ext.
На все исправления я написал тесты: 487 тестов на Python и около 270 на Rust. Тесты не трогают настоящие устройства, сеть и личные настройки.
Что не изменилось
Я ничего не удалял, старые команды и конфиги работают. Команды, которые вы отредактировали вручную, обновление не трогает, а нетронутые обновляются сами.
Дальше
Студию буду развивать, пока пользуюсь ей сам. Следующие крупные планы: локальная модель ul lm laya и память агента.