программирование

0W-Tube: история и скорость

Скриншот истории просмотров: фильмы «Отец солдата» (1965), «Через тернии к звёздам» (версия 2001) и мультсериал «Волик. Пилот отменённого мультсериала».
Внешний вид экрана истории просмотра

Несколько дней дал себе отдохнуть от вайбкодинга. Занятие слишком увлекательное: в последнее время я как-то чрезмерно им увлёкся и спал очень мало. Несколько недель в таком режиме начали сказываться на самочувствии. Чтобы восстановиться, решил дать себе отдых, да и повод подоспел: в один момент я потратил все недельные токены в первый же день и понял, что это хороший повод прерваться.

Сегодня токены возобновились, поэтому я продолжил работу сразу по четырём проектам. Первый из них — «0W-Tube». Выпустил очередную версию с изменением скорости воспроизведения и историей просмотра.

Скорость меняется в настройках воспроизведения, которые поглотили кнопку зеркалирования, а история доступна по жесту смахивания.

На «Андроиде ТВ» история вызывается и скрывается клавишами «вниз» и «вверх» соответственно. Появившиеся в этой версии настройки воспроизведения доступны через кнопку «≡» («меню»).

Из малозаметных изменений: портировал из утилиты yt-dlp различные особенности работы с видеохостингами, которые в основной код этой утилиты пока не попали. По моей просьбе нейросеть прошерстила предложенные исправления и побочные ветки и добавила нам всё полезное.

20 комментариев

Видеонаблюдение: ускорение

Очень понравилось, каким получился проект «Видеонаблюдение». Я написал собственное приложение, которое опрашивает домофоны, установленные в нашем дворе, и распознаёт лица. Если приложение узнаёт человека, оно автоматически открывает соответствующий домофон.

Проблема пока одна — время реакции достигает нескольких секунд. Основная загвоздка в том, что устройству тяжело одновременно обрабатывать несколько видеопотоков. Можно использовать альтернативный вариант: получать с каждой камеры отдельные снимки. Такая возможность есть, но изображения обновляются всего раз в секунду. В итоге, пока устройство накопит несколько кадров, чтобы исключить ложноположительные срабатывания, проходит несколько секунд.

Мне пришла в голову идея разделить камеры на два периметра — внешний и внутренний. Обычно человек проходит их последовательно: сначала попадает во двор через калитку внешнего периметра, а затем подходит к подъездной двери.

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

Интерфейс устройства с заголовком «Связи»: список из четырёх записей («Общая калитка 1–4») с привязанными входами («Основной вход», «Домофон у входа 2») и таймером «3 мин» справа.
Скетч интерфейса связи калиток, нарисованный нейросетью «Нанабанана 2»

Новая версия «Видеонаблюдения» теперь работает так: когда человек со знакомым лицом проходит через одну из внешних калиток, программа на три минуты запускает видеопоток с соответствующей камеры в подъезде, не забывая получать картинки и с других камер (вдруг придёт ещё кто-то).

Я ещё не испытал эту схему, но ожидаю, что время прохода двери в подъезд должно сильно сократиться.

2 комментария

Человек и вайбкодинг

Когда-то мемы вытеснили анекдоты. И трудно отрицать, что сегодня они гораздо популярнее, хотя иногда выглядят так же: часть мемов — тот же текст, только в виде скриншота. Мне кажется, секрет их успеха — во времени жизни. Анекдоты жили годами, а порой и десятилетиями, тогда как мемы рождаются и умирают тысячами каждый день. Благодаря этой эфемерности они становятся идеальным зеркалом момента.

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

Особенно показательна ситуация с вайбкодингом. В феврале этого года, как я когда-то писал, появилась первая нейросеть, которая пишет код лучше среднего программиста. Это очень сильно поменяло правила игры. Если раньше вайбкодинг был занятием для смелых, то с февраля он стал мало чем отличаться от работы с командой программистов. Для тимлида большой команды любая разработка в каком-то смысле — вайбкодинг.

Тут, кстати, тоже есть неочевидный момент: программисты (которых больше) и тимлиды (которых меньше) по-разному воспринимают вайбкодинг. Тимлидам всегда приходилось доверять решениям других людей, пишущих код, поэтому вайбкодинг прекрасно встроился в сознание опытных тимлидов, тогда как программистам принять это тяжелее.

А так как программистов больше, именно они формируют наиболее распространённый взгляд отрасли на вайбкодинг. По крайней мере, именно так это выглядит из-за информационного шума на профильных ресурсах.

Это, вкупе с неглубоким погружением в предмет, рождает огромное количество дремучих страхов, которые кочуют из статьи в статью, подогреваемые эффектом толпы.

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

Пресловутые «техдолг» и «архитектура» — туда же. Чем нас вообще пугают техдолг и кривая архитектура? Тем, что человеку придётся долго в этом разбираться, а потом ещё дольше всё исправлять. Но сеть не устаёт, не нервничает, просматривает код и программирует со скоростью, которую человеку уже не догнать. И создают столько же техдолга, как средний программист, а может и меньше — сейчас некоторые сети уже находятся на синьорском уровне.

Разумеется, за сетью пока должен стоять нормальный тимлид. Пока — так. Но обвязки постепенно движутся к тому, чтобы сети сами организовывали свою работу. И здесь они довольно забавно повторяют человеческую эволюцию. Не в том порядке, но всё же: сначала у них рос «мозг», потом они освоили разделение труда, а теперь начинают общаться друг с другом на равных. Буквально несколько дней назад я наблюдал, как у меня в чате начали общаться два агента, работающие над одним проектом в разных вкладках одной и той же обвязки.

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

22 комментария

Видеонаблюдение: что вышло

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

Вчера вечером, когда я вернулся домой, решил взять запись моей утренней попытки открыть дверь лицом и скормить её нейросети внутри терминала, чтобы посмотреть, насколько быстро она меня узнает. К моему удивлению, это произошло почти моментально.

Оказалось, что приложение уже работало, просто очень медленно — пришлось бы торчать у камеры примерно полминуты, прежде чем опрос камер дошёл бы до меня и распознал лицо.

На экране планшета отображается результат диагностики: «Готово», кадров 46, лиц найдено 43, совпадений ≥0.42: 23, Consensus: 21, путь к файлу report.json.
Тестовая обработка заснятых кадров нейросетью бывшего платёжного терминала

То есть проблема была в том, что приложение очень медленно обходит камеры.

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

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

Заодно снизил расход памяти. Часы выводятся случайными шрифтами, чтобы было интереснее, и раньше все 1500 шрифтов регистрировались при запуске, занимая память. Теперь это место переделано: загружаются случайные сто шрифтов, которые перевыбираются каждые пять минут.

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

При таких условиях даже довольно хиленькое оборудование терминала заработало как надо. Попробую ещё снизить время обработки, но три секунды на распознавание — уже хороший результат.

Оставить комментарий

Видеонаблюдение

Возможно, помните, как я приспособил купленный на «Авито» платёжный терминал под настольные часы. Поскольку сейчас я много времени провожу в кабинете, решил встроить туда ещё и систему видеонаблюдения, чтобы было удобно открывать домофоны со всех сторон дома.

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

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

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

Экран видеодомофона с заголовком «Домофоны» и сеткой из шести камер: «Домофон у входа 2», «Вход 2», «Основной вход», «Общая калитка 1», «Общая калитка 2», «Общая калитка 3».
Изображение нарисовано сетью «Нанабанана 2» по мотивам реального фото интерфейса

3 комментария

«0W-Tube»: зеркалирование

Скриншот видеоплеера с фильмом «Через тернии к звездам»: два мужчины в профиль на тёмном фоне, прогресс-бар на 1:26:05 из 2:20:09, кнопки перемотки ±15/+30 сек и пауза.

Выпустил новую версию своего агрегатора видео, который я пишу для своего проектора (хотя он запускается на любом устройстве с «Андроидом»).

Добавил поддержку новых способов получения видео, которые подсмотрел в ещё не принятых коммитах утилиты yt-dlp, а также реализовал функцию, которую давно хотел сделать, — отзеркаливание видео.

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

8 комментариев

«МК-61s»: инструкция к играм (подробности)

Хочу чуть подробнее рассказать о том, как сделана инструкция к играм для «MK-61s».

Как я уже говорил, если при входе в папку Проводник ретроконсоль обнаруживает внутри файл autoexec.m61, она запускает его. Файл содержит инструкции для терминала. Это существовавший ещё до моего прихода в проект простой язык, который я довольно сильно расширил под свои нужды. Сейчас в нём есть даже условные конструкции и подпрограммы. То есть это аналог BAT-файла из мира «Виндоуса» или шелл-скрипта из мира «Линукса» и «Мака».

В данном случае autoexec.m61 первым делом командой open открывает для просмотра маркдаун-файл manual.md. Маркдаун — хорошо документированный и широко используемый формат. В ретроконсоли реализовано лишь его подмножество, так как полная поддержка не имела смысла.

На скриншоте видно оба файла. В маркдауне видно всю разметку, которая потом во что-то превращается на экране (например, символы «решётки» выделяют заголовки) и ссылки на картинки в формате WBMP — был такой очень простой формат однобитной графики во времена интернета для кнопочных сотовых телефонов. На графическом экране графика внедрённая, то есть на месте, где в файле находится ссылка на картинку, будет выведена сама картинка.

Скриншот manual.md: инструкция к игре «Погоня». Управление, цель — врезаться в машину мафиози. Сообщения: «ВСЕ» — победа, «ЕГГОГ» — авария.

После того как пользователь выйдет из инструкции, запустится сама игра — в данном случае она вводится в шестнадцатеричных кодах командой hin, потом выставляются регистры, а в конце подаются команды для старта.

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

Оставить комментарий

«МК-61s»: инструкция к играм

Игры для калькулятора «МК-61» рассчитаны на бурную фантазию — без неё играть практически невозможно. На его экран много не выведешь, поэтому многое приходится обозначать условно. Но даже с самой развитой фантазией без инструкции часто невозможно понять, что же происходит на экране.

У меня давно была мысль сделать для ретроконсоли «MK-61s» возможность собирать игры в некий пакет, в который будут включены как сама игра, так и её описание, а по возможности — даже иллюстрации. Мне это виделось как папка в файловой системе, при открытии которой автоматически запускается файл, показывающий инструкцию, после чего запускается сама игра.

Я давно, шаг за шагом начал реализовывать этот проект и вчера вечером наконец-то его завершил. Для этого пришлось последовательно сделать файловую систему, потом папки на ней, расширить команды терминала и сделать из этого псевдоязык для управления устройством, добавить виртуальный графический экран, просмотр графических файлов в формате WBMP, поддержку файлов в формате «маркдаун» и автозапуск файла autoexec.m61 — это как раз файл, содержащий управляющие команды терминала.

Скриншот игры «Погоня» Сергея Шинкевича (1991): пиксельный город, машина мафии, инструкция «Вы — полицейский. Погоняйте машину мафии...
Тут я склеил три экрана для наглядности

Вышло, на мой взгляд, очень здорово и уместно. Я в качестве теста сделал инструкцию к одной из игр, мне понравилось как это всё смотрится, возможно только листание надо переделать по более плавное, чтобы можно было прочитать разрезанные фразы. Но это уже косметика, которая легко правится.

Оставить комментарий

«Флог»: блог в одном файле

«Флог» — это проект, который я давно вынашивал и даже когда-то начинал программировать. Вайбкодинг подарил этой идее вторую жизнь.

Его смысл в том, что вы можете вести персональный секретный блог прямо в файле. Поэтому он и называется «флог» — «файловый лог».

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

Никакой регистрации, отдельного приложения и обязательного облака для этого не нужно. Чтобы перенести флог на другой компьютер, достаточно скопировать его файл. А если хочется синхронизации, его можно самостоятельно положить в удобное вам облако.

У флога есть пять скинов, возможность задать собственный фон и две темы — тёмная и светлая. Все эти настройки, разумеется, тоже сохраняются внутрь самого файла.

Ниже — два примера скинов:

Запись блога «Поиск прадеда: логика» от 28 июля 2026 г. о том, как нейросеть нашла предка по соседям по призыву — способ, который автор ранее предлагал поисковику.
Флог в стиле «консоль» с зелёным фоном
Скриншот поста блога «Мой персональный флог» от 28 июля 2026 г. с заголовком «Поиск прадеда: логика» и текстом о поиске предка через нейросеть и форум.
Флог в стиле «сердечки» с розовым фоном

Кроме редактора, который, кстати, позволяет вставлять картинки, нескольких скинов и поиска, тут есть ожидаемая для персонального дневника возможность зашифровать флог паролем.

Шифрование происходит прямо в браузере. Пароль никуда не отправляется и нигде не сохраняется, поэтому, если вы его забудете, восстановить доступ уже не получится. Никакой кнопки «я забыл пароль» тут принципиально нет.

На экране — окно с надписью «Мой персональный флог» и иконкой замка; подзаголовок: «Нажмите на замок, чтобы открыть». В правом нижнем углу — уведомление: «Блог закрыт».
Флог, закрытый паролем, в стиле «нормкор»

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

Есть ещё один важный момент с обновлением. Поскольку файл флога и есть сам флог, просто заменить его более свежей версией нельзя: вместе со старым файлом вы потеряете все свои заметки. Поэтому для обновления внутренней программы надо скачать новую версию из моего репозитория и кинуть её в браузер на окно текущего флога. После этого он обновит себя сам, сохранив записи и настройки.

Наверное, больше всего мне здесь нравится сама конструкция: это сайт, который не нужно никуда выкладывать, и документ, для которого не нужно устанавливать отдельную программу. Всё необходимое — код, оформление, настройки, картинки и сами записи — находится внутри одного переносимого файла.

Проект вместе с инструкцией выложен в моём репозитории.

26 комментариев

«МК-61s»: бинарные приложения

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

Уже сейчас такое оборудование существует — у тех, кто собирает эту ретроконсоль на контроллере STM32F401CC, полная прошивка не собирается: не хватает памяти. Мне давно хотелось сделать для этого случая подгружаемые модули, и вчера, просидев с нейросетью до двух ночи, удалось запустить первую версию, в которой заработали два тяжёлых модуля — языки программирования «Фокал» и «TinyBASIC».

Туда же я вынес просмотрщик картинок в формате WBMP, который прикрутил недавно. Не самая нужная в этой ретроконсоли штука, но у меня есть задумка, которая может сделать её полезной.

В итоге для 401-го контроллера модули лежат на файловой системе, которую я делал для поддержки загрузки файлов по USB (правда, это уже её пятая версия), и подгружаются в оперативную память по требованию. А чтобы это происходило быстрее, я решил чем-нибудь их сжимать. Вопрос — чем.

Внутри уже есть реализации RLE для сжатия шрифтов (я хочу подобрать какие-нибудь симпатичные шрифты для графического экрана, но пока руки не дошли) и LZSS для сжатия файлов других типов. Конечно, сначала я смотрел в сторону того, что уже есть, но потом решил почитать «Википедию» и «Хабр» — вдруг найдётся что-то более подходящее.

Основные требования — хорошо сжимает бинарные файлы, а распаковщик быстрый и маленький.

Таблица сравнения алгоритмов сжатия: ZX0 optimal — победитель (28 835 байт, 74,5% от raw), NRV2B UPX/UCL — лучший декодер (376 Б), raw DEFLATE — лучший WBMP (2 154 ★).
Таблица с тестами по сжатию разных модулей

Я покидал в нейросетку всё найденное, добавил то, что помнил сам, и мы провели эксперимент — сжали все три получившихся модуля и выбрали победителя. Победил алгоритм ZX0, разработанный для восьмибитных компьютеров (прежде всего — «Спектрума») программистом Эйнаром Саукасом.

Утром мы ещё поработали над большей универсальностью этого подхода — хотелось устранить шероховатости и сделать его более универсальным, чтобы писать такие программные модули было проще.

На целевом оборудовании я решение не испытывал — у меня его нет, но на своей ретроконсоли всё проверил: работает. Дальше займусь специализированными инструментами, чтобы упростить создание модулей, а потом перейду к другим пунктам своего уже довольно сильно поредевшего плана развития прошивки.

Оставить комментарий

«МК-61s»: виртуальный экран

Как можно было понять из моих прошлых текстов, у ретроконсоли «MK-61s» несколько исполнений. У меня на руках вариант «mini» — устройство с алфавитно-цифровым дисплеем в две строки, но есть, например, «classic», у которого экран графический. Я для графического экрана прошивку программирую «на ощупь», что неудобно. Конечно, всё работает, но визуально результат я не представляю.

Но когда у тебя в руках молоток, всё вокруг превращается в гвозди нейросеть, все такие проблемы превращаются в токены, которые надо забить в код.

У «MK-61s» есть текстовый терминал, через который устройством можно ограниченно управлять. Я его давно расширяю под разные нужды: теперь через него можно получать экран устройства и отправлять нажатия на клавиатуру.

Через терминал такое делать неудобно, поэтому мы с нейросеткой написали клиентское приложение на «Флаттере» с виртуальным экраном и клавиатурой.

Экран MK61 USB: пиксельная игра Pac-Man на виртуальном дисплее 192x64, зелёный режим, клавиатура с функциями калькулятора и ПК-клавишами, статус подключения.
Та самая картинка, фрагмент которой я пытался вывести на «MK61s-mini» в прошлой заметке

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

Как я уже упоминал выше, в этом режиме также можно передавать нажатия клавиш прямо с клавиатуры компьютера или ноутбука — набирать программы в «Фокале» и «TinyBASIC», которые я когда-то встраивал, теперь значительно удобнее.

Скриншот файлового менеджера MK61s: в левой панели выделен файл Bumblebee Fly.m61, в правой — Wumpus.m61; внизу сообщение «Скопировано на компьютер: 1» и меню команд.
Во внутреннем хранилище видно несколько игр в формате ретроконсоли

Ну и «на сдачу» написал также аналог «Нортона Коммандера» на шелле. В принципе уже есть возможность примонтировать ретроконсоль как диск, но тут принцип другой — всё делается командами терминала. Вышло забавно, пусть будет.

Поддерживаются все горячие клавиши, видимые на скриншоте, удалённый запуск программ в терминале и просмотр изображений WBMP, который моими стараниями теперь понимает ретроконсоль. В консоль моего «Макбука» такие картинки выводятся через протокол iTerm2 или азбукой Брайля.

Оставить комментарий

PHP: что ты такое?

Мне сегодня показали вот такой код и спросили, знал ли я, что так можно. Речь идёт о вызове $this::w00t(). То есть мы используем $this как бы в статическом контексте. Мне бы такое в голову не пришло.

Код ниже, понятное дело, чисто демонстрационный.

Нет, я не знал, но, как ни удивительно, эта конструкция работает! Причём работает уже очень давно — это не свежее веяние: она появилась ещё в версии 5.4!

(new class() {
    public function w00t():void {
        echo "WHAT THE HELL ARE YOU?\n";
    }

    public function test():void {
        $this::w00t();
    }
})->test();

Дополнено: работает как эквивалент static, что ожидаемо, конечно.

4 комментария

«МК-61s»: графика на текстовом экране

У меня давно вертится в голове идея попробовать вывести графику на алфавитно-цифровом экране «МК-61s». Он хоть и алфавитно-цифровой, но у него, как я уже неоднократно писал, есть восемь программируемых символов. В теории можно было бы разбить графику на эти восемь символов, но это будет куцо смотреться — экран-то рассчитан на 32 символа.

Сначала я подумал, что можно было бы воспользоваться инерцией дисплея и быстро-быстро зажигать и гасить разные подходящие символы, чтобы оставить пиксельный след в нужных местах. Но это работало ужасно: в местах наложения точек двух символов на одной позиции пиксели были ярче остальных, и картинка не считывалась. Зато я понял, что в теории можно было бы показать больше градаций яркости, чем просто чёрно-белое изображение.

Потом я попробовал показывать по восемь символов за раз, быстро чередуя их и отображая полное изображение за четыре кадра. Изображение стало узнаваемым, но очень низкоконтрастным. Чтобы наглядно показать, что получилось, мне пришлось сильно скорректировать уровни изображения в редакторе:

Зелёный LCD-дисплей показывает: верхняя строка — «4G» и «12:00», нижняя — «6» и «PM».
Это — «Пакман», гоняющийся за привидением.

Следующая идея была сложнее: первым проходом показывать максимум общих точек, а последующими — «добивать» оставшиеся, также перепрограммируя символы «на лету». Идея могла бы сработать, тем более, что на фрагменте эталонного изображения Лены Сёдерберг вместо четырёх кадров, по нашим с нейросетью расчётам, потребовалось бы всего три.

В реальности изображение стало чётче, но отображалось полосами. Я попросил нейросеть сделать подстройку частоты кадров и попытался подобрать её, как в старом телевизоре, но всё сильно зависело от того, какой кусочек Лены был на экране. Впрочем, контрастность явно выросла. Пакман тоже стал виден лучше.

Под конец я решил разделить экран на четыре блока по восемь символов по горизонтали и отрисовывать их один за другим. Этот вариант мне понравился меньше остальных, хотя контрастность была самой высокой — блоки слишком сильно мигали.

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

Не уверен что мне с этим всем делать, но пока оставил реализацию в экспериментальном режиме.

2 комментария

«МК-61s»: часы на экране

Выяснилось, что на борту ретроконсоли «MK-61s» есть аппаратные часы, и даже предусмотрена батарейка для них — просто у ребят, занимающихся консолью, не дошли руки ими заняться.

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

Пока ехал с работы домой, пришла мысль попробовать выделить под них два программируемых знакоместа, каким-то образом уместив в каждом по два числа. Там довольно тесно — каждое знакоместо имеет размер всего 5×7 пикселей.

Нашёл очень маленький шрифт, но две цифры помещались в каждую позицию только наискосок, и выглядело это плохо. В итоге взял редактор и нарисовал шрифт размером 2×5, в котором неплохо уместились все цифры. Восьмёрка получилась немного сомнительной, но главное — вполне читаемой. В итоге, правда, пришлось выделить три места, так как без двоеточия смотрелось так себе, а с ним в две позиции уже никак не умещалось.

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

Как шрифт выглядит на реальном устройстве с сомнительной «восьмёркой» можно увидеть на фотографии ниже:

Электроника МК-61s-Mini: зелёный дисплей с «0. P 21:35», надписи «ЭЛЕКТРОНИКА МК-61s-Mini» и ссылка на GitHub; кнопки MENU, ESC, OK, стрелки, [USER], Р, ГРД, Г.

2 комментария

«Тайм-капсула»: что получилось

После вчерашних манипуляций «Тайм-капсула» завелась и «Макбук» жены её увидел, но к ночи скорость бакапа сильно упала — через несколько часов расчётное время стало уже больше суток.

Меня это не особо устроило, я подумал, что наверняка есть способ ускориться — например, серверную часть для поддержки протокола SMB мы собирали довольно древним компилятором — gcc седьмой версии, если мне не изменяет память. Я подумал, что более свежий компилятор может помочь — в них всё время добавляют какие-то оптимизации.

Настройка Time Machine в macOS: резервное копирование на диск AirPort Time Capsule.local, доступно 743,87 ГБ из 1 ТБ, скопировано 102,54 ГБ, готово 29,3%, остаётся ~1 день.

Поскольку платформа уже довольно старая, самый свежий компилятор мы брать не стали, взяли двенадцатую версию. По уверению нейросети «ГПТ-5.6 Сол», это последняя официальная версия для NetBSD, на которой собирается софт для «Тайм-капсулы».

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

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

Во-первых, по умолчанию в «капсуле» очень маленькие сетевые буферы — около 32 КБ, мы их увеличили до мегабайта. Во-вторых, мы отключили проблемный для старого NetBSD mmap. В-третьих, исправили проблему совместимости при удалении служебных атрибутов.

В итоге скорость выросла с 7—8 мегабит до 12—14.

Для ноутбука жены резервная копия уже создалась, сейчас создаётся для моего ноутбука. Сколько это займёт, сказать трудно — на скриншоте расчёт скорости только завершился, обычно в самом начале он очень сильно врёт.

1 комментарий

«Тайм-капсула» и современные «Маки»

В комментариях в телеграмном канале к заметке о проблемах создания резервной копии на сетевом хранилище один из читателей рассказал, что это известный баг взаимодействия моего сетевого накопителя и «Мака» — резервные копии пишутся, пока не забьют всё место.

Там же посоветовали способ оживить «Тайм-капсулу» — зловреды из «Эпла» убрали поддержку протокола, который она поддерживает, но там же, в комментариях, подсказали ссылку на приложение, которое добавляет в старенькую «капсулу» поддержку протокола SMB, который сейчас требует «МакОС».

Диалоговое окно Time Machine: диск «Диск AirPort» можно использовать только при наличии резервных копий для этого Mac; поддержка Time Capsule прекратится в следующей macOS.
Капсулу пришлось подключить к точке через «Езернет»: почему-то через вайфай она не смогла работать в моей сети, но «МакОС» всё равно отказалась бакапить на неё

Хорошо, что у нас есть нейросети — я рассказал, что хочу, дал ссылку на репозиторий и только попросил проанализировать выложенный там запускаемый файл. И не зря! Внутри оказался код, отсутствующий в исходниках, который скачивает что-то бинарное с домена timecapsulesmb.jamesyc.com.

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

Интерфейс UTM с запущенной виртуальной машиной NetBSD TimeCapsule Build: статус «Запущено», архитектура ARM64, 8 ГБ памяти, 1,06 ГБ размер, Serial TTY /dev/ttys006.
Виртуалка с операционной системой NetBSD внутри. Там собирается софт для «Тайм-капсулы»

Нейросетка довольно долго мне всё настраивала и компилировала, но в итоге собрала требуемую версию, активировала внутри «Тайм-капсулы» ssh и успешно всё установила.

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

Она посмотрела загрузку процессора (там внутри одноядерный Cortex‑A9) и предположила, что он не справляется с шифрованием канала. После того как мы отключили шифрование — сеть-то всё равно локальная, — скорость сильно возросла: теперь бакап должен сделаться примерно за девять часов.

Завтра посмотрю всё ли успешно и посмотрим нельзя ли ещё ускорить, всё-таки это тоже довольно медленно.

4 комментария

«МК-61» и случайные числа

Один из досадных инженерных промахов «Электроники МК-61» — генератор случайных чисел. Он даёт очень плохой разброс и выдаёт одно и то же число после взятия целой части. Но самое обидное — при включении устройства генератор всегда стартует с одного и того же значения, что делает игры, в которых он используется, отчасти предсказуемыми.

На дисплее калькулятора «ЭЛЕКТРОНИКА МК 61» отображается число 4.04067 -01, видны переключатели «Вкл», «ГРД» и кнопки с обозначениями функций.
На старте генератор случайных чисел на реальном калькуляторе всегда выводит одно и то же число

Меня, если честно, это давно расстраивает, но я как-то не подумал о том, что это можно исправить в ретроконсоли «MK61s». Сегодня меня этой мыслью осенило и я решил посоветоваться с одним из разработчиков этой ретроконсоли на предмет того где в ретроконсоли можно было бы наскрести энтропии.

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

Распределение сильно лучше: на десяти тысячах запусков старый генератор дал 179 случайных значений, а новый — 9957.

6 комментариев

«0W-Tube»: и под смартфон тоже

Поскольку у приложения «0W-Tube» быстро появились пользователи, часть из которых поставила его себе на смартфон, я подрихтовал немного приложение, чтобы оно и там смотрелось лучше и добавил поддержку портретного положения экрана.

По идее приложение сейчас должно нормально работать везде — на «смарт-тв», проекторах и смартфонах. Скачать можно в моём репозитории, в разделе «релизы». Оно умеет автоматически обновляться, но так как в России сегодня какие-то проблемы с доступом к «Гитхабу», с этим могут быть сложности.

Скриншот интерфейса поиска на Rutube: запрос «Бастер Китон», найдено 26 видео, включая «Бастер Китон-Шерлок Младший 1924» и «Шаронавт _ The Balloonatic (1923)».

21 комментарий

Сетевое хранилище и «Мак»

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

Это меня очень удивило, потому что в конце прошлого года места оставалось никак не меньше половины. Пошёл искать виновника. Им оказался мой «Макбук». Не знаю, что в нём дало сбой, но почему-то он забил диски до конца своими резервными копиями — у меня и жены копии делаются на домашнее сетевое хранилище.

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

Интерфейс «Диспетчер хранения»: статус «Исправно», использование тома 1 — 2,9 ТБ из 9 ТБ (32%), диск ТАЗик с 4 слотами.
Свободное место после очистки хранилища

9 комментариев

Что-то там-тьюб

Надоело, что «ВК Видео» и «Рутуб» сильно тормозят на проекторе: дизайнеры рисуют всё более навороченные приложения, а железо остаётся прежним.

Запустил на проекторе «Аиду» (там «Андроид») — приложение для просмотра характеристик оборудования, сфотографировал параметры процессора, видеосистемы, доступные аппаратные кодеки, загрузил снимки в нейросеть и попросил написать мне небольшой клиент, который умеет искать ролики на этих площадках и проигрывать.

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

Голограмма лица мужчины над красной светящейся картой в тёмном помещении с группой людей, освещённых красным и зелёным светом.

2 комментария

← 1 2 3 4 5 6 67 →