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

Сбросы у моделей

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

В интерфейсе приложения «Кодекс» (которое сейчас называется «ЧатГПТ»), которое я сейчас в основном использую, видно две квоты на токены — недельная и пятичасовая. Исчерпал одну из них, ждёшь, когда она восполнится. Это способ ограничить нагрузку на оборудование, на которой крутится нейросеть.

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

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

Интерфейс приложения Codex показывает статистику сбросов лимитов: последние сбросы, общее количество (52), средний интервал между ними (7 дней) и самую долгую паузу (67,7 дня).
Сайт «Кодекс-ресетс» предупредил меня утром, что скоро сброс, на скриншоте до сброса остаётся 44 минуты, я узнал примерно за три часа

Для чего это нужно? Чтобы потратить остаток квоты перед сбросом. Я сегодня узнал о сбросе за три часа, потрачено у меня было всего 11% недельной квоты, за три часа я активировал все свои проекты — переключил на «Астру» с максимальным усилием и скоростью (скорость тоже сказывается на расходе квоты), в итоге перед обещанным сбросом потратил 95%.

Схема работает неидеально, не знаю почему. Квота сбросилась только в 11¹⁰, хотя обещали сбросить на час раньше. У меня на тот момент оставалось 2% квоты, я потихоньку продолжал тратить, хоть темп и сильно сбросил.

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

МК-61: подводная лодка Феликса Лазарева

Феликс Лазарев — довольно известный в определённых кругах человек, автор эмулятора «emu145», код которого используется во многих других эмуляторах советских программируемых калькуляторов.

В 2012 году он вместе с другими энтузиастами восстановил содержимое ПЗУ процессоров МК-61, исследуя микросхемы под микроскопом. Эта работа позволила эмулировать калькулятор на уровне его микрокода.

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

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

Выбрали «Подводную лодку», которую Феликс написал примерно в 1985–1986 годах. В вчерашней переписке разобрали управление, расход воздуха, поведение эсминца и устройство экрана. Основной код написал «Сол», затем его оптимизировала и дописала «Астра». Получилось 105 команд «МК-61». Это реконструкция по воспоминаниям автора, а не найденный оригинал. Код добавлен в каталог.

Море занимает восемь позиций: 8 — лодка, Е — эсминец. Справа — воздух. Управление переключателем угловых единиц: Р — погружение, ГРД — удержание глубины, Г — всплытие. На поверхности воздух прибавляется по два за кадр, на трёх глубинах расходуется по 2, 5 и 10. На второй и третьей глубине неподвижная лодка незаметна, но отсидеться там надолго не получится. Задача — выжить.

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

На экране отображаются позиции моря с подводной лодкой (8) и эсминцем (Е), справа показывается запас воздуха.
Старт: лодка на поверхности, море свободно, воздуха 20
На экране отображаются позиции моря с подводной лодкой (8) и эсминцем (Е), а справа — запас воздуха.
Слева появился эсминец. Воздуха уже 22 — пора погружаться
На экране отображено игровое поле с подводной лодкой (8) и эсминцем (Е), справа показан уровень воздуха — 20.
Вторая глубина, воздуха осталось 15. Лодка исчезла с поверхности. Цифру глубины добавили при реконструкции — в оригинале её не было
На экране отображаются позиции моря с подводной лодкой (8) и эсминцем (Е), справа показывается запас воздуха.
Попытка всплыть, пока эсминец ещё рядом, закончилась попаданием. При нулевом запасе воздуха результат тот же

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

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

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

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

DeepSeek V4.1 Flash на 4×H200

Вышла DeepSeek V4.1 Flash, и мы решили попробовать её вместо нашей DeepSeek V4 Flash‑0731, используемой в офисе для ботов и как помощник для программиста. Новая версия заметно прибавила в программировании: в опубликованных ДипСиком результатах теста DeepSWE доля решённых задач выросла с 54,4% до 74,2%. 

В руководстве для размещения модели указан сервер на 8×H200, но у нас столько нет, поэтому попробовали запустить на том, что есть — 4×H200. На них модель запустилась через фреймворк SGLang с некоторыми ограничениями.

Пришлось сократить контекст с миллиона до 256K токенов и ограничить число одновременно выполняемых запросов четырьмя. Общий запас контекста они делят между собой. Но хорошо хоть, что веса модели не пришлось сжимать.

Параметры запускаЧто дают
--tp 4 --ep-size 4Распределяют модель между четырьмя GPU
SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE=0Переносит таблицы Engram в видеопамять: выбранный вариант хранения в память не помещался. Сам Engram остаётся включённым
--context-length 262144 и --max-total-tokens 262144Ограничивают контекст и общий кэш до 256K
--max-running-requests 4 и --cuda-graph-max-bs-decode 4Ограничивают параллельную работу и расход вспомогательной памяти
--chunked-prefill-size 4096Позволяет обрабатывать длинный запрос небольшими порциями
--mem-fraction-static 0.95Отводит до 95% видеопамяти под веса и кэш

Ускорение генерации DSpark сохранили, вызовы инструментов работают — это проверили. После запуска на каждой карте осталось примерно 12–13ГБ свободной памяти.

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

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

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

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

Параметр запускаБылоСталоЧто даёт
--max-running-requests48До восьми запросов одновременно
--max-total-tokens262144 (256К)1048576 (1М)Вчетверо больший общий кэш токенов — больше места для параллельных длинных запросов
--cuda-graph-max-bs-decode48Подготовленные CUDA-графы для обработки до восьми запросов с меньшими накладными расходами
Но сеть, хоть и работает относительно быстро, всё равно ощитимо медленнее предыдущей. Думаю, день посмотрим как она справляется с задачами и в понедельник будет выбирать что важнее — качество или скорость.

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

«MK-61s»: область памяти «Ms»

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

Я как-то давно задумывался над тем, почему в калькуляторе «МК-61» есть три команды, идущие подряд, которые ничего не делают — К НОП, К 1 и К 2, но всерьёз этой темой не заинтересовался. Все три комбинации дают разные коды — 54, 55 и 56, и если первая «честная» команда без операции, то зачем нужны ещё две?

Ответ нашёлся в книге Я. К. Трохименко и соавторов «Программируемые микрокалькуляторы. Устройство и пользование» (1990):

Фрагмент таблицы из книги Трохименко «Программируемые микрокалькуляторы» (1990 г.) с кодами операций для МК-61, включая К ПВ (обмен регистрами) и К ОД (обмен страницами памяти).

В последовательной памяти калькулятора предусмотрена область Ms. Для семейства МК-61/52 это восемь страниц по семь байтов. Она размещена рядом со стеком, но отдельно от обычных 105 шагов программы. Получаются ещё 56 байтов, которые потенциально можно было бы использовать для чисел или программного кода.

Оператор обмена регистрами данных областей памяти Ms и Md обеспечивает обмен начиная с адреса N=0.
По устройству этих операций виден смысл резерва: быстро сменить комплект данных или фрагмент программы, сохранив прежний. Ms при этом одна — восемь чисел и 56 программных байтов занимают одни и те же страницы. Для серийного «МК-61» эта возможность осталась незадействованной, хотя необходимые операции переноса в его микропрограмме сохранились.

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

При помощи нейросети я связал эти команды с соответствующими участками микропрограммы в ретроконсоли «MK-61s». Чтобы сохранить совместимость, этот код работает только в расширенном режиме «112ШГ+ПF». У этого режима уже есть дополнительная страница кольца: 16 вместо 15. Семь страниц области M2 занимают метка, канал связи и стек; для Ms выделено девять страниц. Поэтому исторический замысел в «MK-61s» расширен до девяти чисел или 63 шагов программы.

Обсуждение особенностей советских программируемых калькуляторов, использование области памяти Ms и способы сохранения дополнительных чисел через «пустышки».

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

Правда, так можно было сохранить всего несколько цифр, полностью использовать этот участок памяти этим способом невозможно. Да и такой способ работы с ним занимает слишком много команд, в реальной программе его использовать крайне сложно. Одну из статей, описывающих этот способ, можно найти в «Технике — молодёжи», № 7 за 1986 год.

Жаль, что разработчики не довели эту задумку до серии, расширение памяти в полтора раза и обмен регистров — это, думаю, подарок, о котором программисты того времени не могли и мечтать.

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

ПРОЛ-2: небольшое исследование

Думаю, ожидаемо, что меня заинтересовал язык «ПРОЛ-2», придуманный и использовавшийся для написания программ для «Бурана». Меня вообще интересуют такие почти забытые артефакты, и я очень радуюсь, когда удаётся спасти от забвения любые знания.

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

Одна из них — Татьяна Алексеевна Полилова, ведущий научный сотрудник Института прикладной математики им. М. В. Келдыша РАН, — даже прислала мне две брошюры по системе САПО ПРОЛОГ (это другой ПРОЛОГ, не имеющий отношения к логическому языку программирования).

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

Ниже я привожу цитаты из брошюры «Средства отладки в инструментальной системе САПО-ПРОЛОГ».

Каждый квант времени диспетчер обслуживает активные исполнители разных процессов.
Фрагмент текста из брошюры «Средства отладки в инструментальной системе САПО-ПРОЛОГ» о протоколировании работы комплекса программ.
Фрагмент документа «Средства отладки в инструментальной системе САПО-ПРОЛОГ» 1988 года, страницы 7–8, описывающий пакетный вариант отладки программы.
Система отладки обрабатывает задание, формирует таблицы контролируемых точек, условий и действий, инициируя работу комплекса Пролог-программ.

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

99 бутылок: ПРОЛ-2

Иван Черняков, которого я консультировал в процессе создания фильма о программируемом калькуляторе «Электроника МК-61», выпустил новую увлекательную документалку — про «Буран» и его программное и аппаратное обеспечение.

«Буран» решал задачу многоразового возвращаемого орбитального корабля: вывести аппарат на орбиту, доставить людей или груз, выполнить работу в космосе и вернуть корабль на Землю для потенциального повторного использования.

В фильме упомянуты несколько предметно-ориентированных языков программирования, созданных в СССР специально для написания программ, некогда управлявших полётом «Бурана». Один из них — «ПРОЛ-2», программы на котором Ивану найти не удалось, поэтому он попробовал его реконструировать при помощи нейросети.

Разумеется мне немедленно захотелось найти хоть какие-то подробности про этот язык, чтобы написать на нём свою традиционную «песню про пиво». Вчера облазил весь интернет и на одном из форумов мне повезло найти одну из тестовых программ, написанных на языке «ПРОЛ-2». Она и несколько упоминаний языка в других источниках помогли мне побольше узнать о том, что представлял собой язык, на котором писались программы для «Бурана».

Итак, судя по сохранившемуся тексту, «ПРОЛ‑2» — императивный язык управления для системы реального времени. Современному программисту его запись напомнит Паскаль: присваивание :=, блоки НАЧАЛО и КОНЕЦ, явно объявляемые типы, условия и циклы, но с русскими ключевыми словами.

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

Вот какая «песня» у меня получилась:

% ПЕСНЯ О ПИВЕ. НАПИСАНА СТЕПАНИЩЕВЫМ Е. В. HTTPS://BOLKNOTE.RU
МОДУЛЬ ПИВО ТЕСТ;
ПРОЦЕСС ПИВО;
ПЕСНЯ:1T;
КОНЕЦ
ИСПОЛНИТЕЛЬ ПЕСНЯ;
N:ЦЕЛ(0..99);
НАЧАЛО
    N:=99;
    <<КУПЛЕТ>>
    ПЕЧАТЬ(/,N,' БУТЫЛОК ПИВА НА СТЕНЕ',/);
    ПЕЧАТЬ(N,' БУТЫЛОК ПИВА!',/);
    ПЕЧАТЬ('ВОЗЬМИ ОДНУ, ПУСТИ ПО КРУГУ',/);
    N:=N-1;
    ПЕЧАТЬ(N,' БУТЫЛОК ПИВА НА СТЕНЕ!',/);
    ЕСЛИ N>0 ТО НА КУПЛЕТ;
    ПЕЧАТЬ(/,'НЕТ БУТЫЛОК ПИВА НА СТЕНЕ!',/);
    ПЕЧАТЬ('НЕТ БУТЫЛОК ПИВА!',/);
    ПЕЧАТЬ('ПОЙДИ В МАГАЗИН И КУПИ ЕЩЁ,',/);
    ПЕЧАТЬ('99 БУТЫЛОК ПИВА НА СТЕНЕ!',/);
    ВЫЙТИ ПЕСНЯ;
КОНЕЦ

Почти все строки, думаю, понятны, я бы только одну строку прокомментировал — ПЕСНЯ:1T. Эту конструкцию я перенёс из найденного листинга, но что она точно значит, я сказать не могу. Похоже на выделение тактов для выполнения параллельных подпрограмм. Но так ли это, пока неизвестно.

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

«ГПТ-6 Астра»

Вышла версия «ГПТ-6 Астра», судя по информации в интернете, значительно лучше предыдущей версии — 5.6, но пока в своих проектах я не ощутил какого-либо заметного улучшения. Для тестирования моделей у меня есть специальная сложная задача — оптимизирующий компилятор, который преобразует высокоуровневый язык программирования «МК-Про» в машинные команды калькулятора «Электроника МК-61».

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

График демонстрирует размеры программ МК-61 двух версий модели: Крестики-нолики 4x4 и Некромант, с указанием изменений и событий.
Две программы, пока не поддающиеся полной оптимизации — «Крестики-нолики 4×4» и «Некромант».

Сейчас у меня есть две программы, которые пока не удалось успешно оптимизировать — это игры «Крестики-нолики 4×4» и «Некромант». Суть задачи состоит в том, чтобы нейросеть запрограммировала оптимизатор таким образом, чтобы он узнавал какие-то общие шаблоны, а не просто подставлял заданный код для конкретной программы.

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

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

«Стюарт Блум не смог спасти вселенную»

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

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

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

На коврике лежит зашифрованное послание: «Hidden Message».
Коврик со скрытым посланием, которое, впрочем, очень просто расшифровывается


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

Как идёт разработка движка блога

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

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

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

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

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

&apos;

Сегодня с дочкой ходили по магазинам и в одном из них я обратил внимание на надпись на упаковке, которая меня сильно озадачила. Думаю, веб-разработчики меня хорошо поймут.
В надписи используется &apos; — это специальный технический код для апострофа. Он иногда проникает в обычную жизнь из-за бага, и я не могу понять — это как раз такой случай или специфическая ирония, понятная только в профессиональной среде? Если второе, то что за ниша такая у этой игрушки?
Three Mr. PA blind box toy packs are displayed side-by-side, each featuring six different panda designs and priced at NT$160.
Надпись «&apos;» — это такая ирония?

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

MK-61s: новый экран

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

В прошлый раз он вообще не запустился — на старте не подавал никаких признаков жизни. Ждал я его из Китая очень долго, специально подготовил прошивку, да и деньги потраченные жалко… Разочаровался, конечно, но отправил на тестирование коллеге, вдруг получится разобраться, в чём проблема.
Коллега ответил, что «интерфейс был выставлен перемычками на последовательный SPI, а нам нужен параллельный 6800». Когда экран приехал ко мне, заработал сразу и без каких-либо проблем. На форумах пишут, что он довольно капризный, однако все выявленные там проблемы вроде вполне решаемы. Все найденные решения я заранее скормил нейросети, возможно, она их уже учла.
Надо признать честно, выглядит этот экран гораздо лучше старого варианта — прямо небо и земля, хотя закономерно — стоит примерно в шесть раз дороже. Увы, фотографии совершенно не передают реального впечатления. Сколько ни старался снять получше — ничего не вышло, а обрабатывать нейросетями не хочется.
Мне кажется, если оставить такой экран и сделать само устройство чуть тоньше, получилась бы весьма привлекательная ретроконсоль, интересная даже тем людям, которых изначально не особо вдохновляет вайб «Электроники МК-61».
На чёрном корпусе калькулятора МК-61с Mini видны зелёные пиксельные фигурки, рядом подключён белый USB-кабель.
Графический экран WEH001602AGPP5N00100 на ретроконсоли

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

ЧатГПТ в гостях

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

Оказалось, что ко мне в гости захаживает бот нейросети ЧатГПТ, который обходит все ссылки, включая ссылку «ответить» в дереве комментариев. В норме она открывает при помощи ДжаваСкрипта форму ввода комментариев, но ЧатГПТ скрипты не выполняет, для него это обычная ссылка, у которой есть параметры — кому мы отвечаем, на какой комментарий и так далее. ЧатГПТ нажимает на каждую, засоряя мой кеш.
А поскольку ходит он с бешеной интенсивностью, сайт ещё и постоянно под нагрузкой — трудится, создавая кучу ненужных кешированных страниц. А я всё никак не мог понять почему у кеша такой низкий процент срабатываний.
HTTP-заголовки бота ChatGPT, посещавшего блог и оставлявшего следы в кеше сайта.
Бот нейросети «ChatGPT» у меня в гостях

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

«МК-61s»: новые команды

Меня тут один читатель натолкнул на идею рассказать вот о чём.

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

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

Ретроконсоль «МК-61s», которую я помогаю программировать, точно эмулирует железо. Эта эмуляция основана на работе Феликса Лазарева, который, вооружившись снимками разводки плат и ПЗУ, снятого под микроскопом, за год сделал точный эмулятор, полностью программно повторяющий аппаратную часть «Электроники МК-61».

Позже в одном из эмуляторов появился и ответ на вопрос, заданный в начале этой заметки.

Позже Сергей Фролов провёл эксперимент и, как результат, в некоторые эмуляторы были добавлены семь дополнительных ячеек памяти и дополнительный регистр f. Казалось бы, не бог весть что, но не в том случае, когда доступно всего 105 ячеек.

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

Так что семь байт и ещё один регистр — это очень большое подспорье.

В «МК-61s» я сделал три режима: без этого расширения, с включённым расширением и автоматический режим. Последний включает расширение адресов и дополнительный регистр, если обнаруживает, что загружаемая программа не помещается в стандартные 105 байт или использует команды с кодами 0x4F и 0x6F. Это неиспользуемые в обычной программе коды, которые в этом режиме заняты под работу с дополнительным регистром.

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

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

«0W-Tube»: 0.7.3

Неделю назад выпустил новую версию «0W-Tube» с поддержкой PeerTube — это децентрализованный видеохостинг с открытым исходным кодом. Сервера находятся по всему миру, в России тоже есть несколько штук.

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

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

Скриншот мобильного приложения с поиском «кин дза дза», фильтрами качества (выбрано 1080+) и результатами: видео о фильме «Кин-дза-дза!» от Rutube, Peertube и VK Video.
Одна из копий фильма «Кин-Дза-Дза» лежит на чьём-то видеохостинге, организованным при помощи PeerTube

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

«МК-61s»: новый экран

Сборка электронного калькулятора «ЭЛЕКТРОНИКА МК-61s-Mini» с подключенным дисплеем, рядом лежат пинцет и отвёртка на белом фоне.
Экран WEH001602AGPP5N00100 и попытка подать на него другое питание

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

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

Сегодня экран от него доехал до меня, но не заработал — не подаёт никаких признаков жизни. Мы попробовали отладить его дистанционно, я даже в одном месте припаял другое питание, но всё тщетно.

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

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

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

«Sarcophagus»: многопользовательский режим

Дочка всё хотела присоединиться ко мне в «Саркофагусе» — играла сначала рядом на своём ноутбуке, а потом стала проситься ко мне в игру. Ну что мне, жалко что ли? Два дня работы нейросети и два вечера тестирования и появилась вполне рабочая версия многопользовательской игры. Двухпользовательской, если быть точным.

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

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

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

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

Распознаватель «Тессеракт»

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

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

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

Таблица сравнения качества OCR Tesseract 4 и 5 для русского и смешанного текста: точность, время обработки и лидеры по категориям.

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

«МК-61s»: класси́к

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

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

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

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

Красный калькулятор «ЭЛЕКТРОНИКА МК-61s-Classic» с надписью https://github.com/un7fgo/MK-61s-Classic и зелёный модуль дисплея на пузырьковой плёнке.
Содержимое посылки, которая мне доедет примерно через неделю

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

«Sarcophagus»: доделки

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

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

Сегодня она принесла ко мне свой ноутбук и попросила поставить ей «ту игру, где из блоков строить можно». Поставил, только в исходниках кое-что поправил, чтобы было не так темно, и мы оба залипли. У меня, кстати, на третий день появился небольшой огородик и даже курица! Огород я сам сделал, а откуда взялась курица, я пока не понял.

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

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

Человек с кудрявыми волосами работает за ноутбуком, на экране которого виден пиксельный интерфейс; на столе также монитор, ретро-консоли, бюст Ленина и книга.

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

Игра «Sarcophagus»

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

Тогда я почти перестал его читать: игровой дизайн мне был неинтересен. Тем не менее иногда я всё же заглядывал к нему в блог. Он человек талантливый, кроме того, мы когда-то крепко дружили и вместе запустили несколько проектов.

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

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

Скриншот игры: тёмный подземный уровень с персонажем, интерфейсом (статы, инвентарь, текст), подсказками по краям и сообщением о завершении преобразования.

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

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

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

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

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

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

← 1 2 3 4 5 6 67 →