Хаки в «Электронике МК-61»

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

В коде программы «Рембо-III» есть несколько похожих мест (я буду приводить код на языке «МК-Про» для наглядности):

fn lost() {
  halt("ЕГГОГ")
}

fn front_stop() {
    …
    if cells[7] < 0 {
      lost()
    }
    …
}

Если некое проверяемое значение меньше нуля (в двух остальных местах — меньше или равно нулю), то пишем на экране «ЕГГОГ» — слово «error», это одно из немногих слов, которое калькулятор способен отобразить, так как у него есть специальная логика для отображения некоторых букв, поэтому его часто используют для обозначения проигрыша.

Мой оптимизатор умеет заменять halt("ЕГГОГ") одним опкодом, потому что это «встроенное» в калькулятор слово, но тут он пишет относительно много кода — проверка условия и вызов, тогда как проверку и вывод «еррора» можно объединить в один опкод — F √ или F lg в зависимости от условия.

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

В «Рембо-III» это сокращает программу на четыре байта. Это существенно, когда у доступно так мало памяти.

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

Случайно удалил аккаунт в «Телеграме»

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

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

Дополнил подробностями:

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

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

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

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

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

Даже описать не могу насколько я расстроен этим случаем.

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

Попробовал «Кодекс»

Так исторически сложилось, что серьёзно программировать с нейросетями я начал с «Курсора». До сих пор его использую, и планов куда-то переходить у меня не появлялось.

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

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

Не обманул: позже я убедился, что в рамках подписки за двести долларов можно работать почти с любой интенсивностью. Там, где в «Курсоре» легко тратились двести долларов в день, тут я, заплатив один раз, больше ничего не плачу́.

Объяснение простое: «Курсор» в основном перепродаёт токены чужих нейросетей, зарабатывая на разнице, а «Кодекс» продаёт токены нейросетей той компании, которая его делает.

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

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

Я часто вижу, как «Кодекс» принимает часть моих указаний, на которые он уже отвечал, за сигнал к действию и начинает выполнять задачи, которыми уже занимался. В «Курсоре» я такого не видел ни разу.

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

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

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

Выводы.

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

Бюджет «Курсора» буду тратить на работе. Во-первых, это позволит мне программировать для себя и компании в один и тот же день: раньше я разделял их, чтобы чётче понимать, сколько денег мне надо вернуть; во-вторых, затраты на управление для меня дороже в рабочее время, у меня очень высокая загрузка, и всё время дёргаться и смотреть, что там сделала сеть, для меня не вариант.

Скриншот интерфейса «Оптимизатор» с текстом о компиляции X2, ветках, масках и проверке кода; видны меню слева, панель среды справа и поле ввода внизу.

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

Спортинвентарь в отелях

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

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

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

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

Чем кончилась история с «Телеграмом»?

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

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

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

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

«МК-Про»: ЯП высокого уровня для «МК-61»

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

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

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

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

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

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

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

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

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

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

Книги: Урсула Крёбер Ле Гуин

Открыл для себя книги писательницы Урсулы Крёбер Ле Гуин. Возможно, не в первый раз. Я прочитал за жизнь столько фантастики, что большинства книг даже не помню. Правда, если я когда-то прочитал книгу, то нередко узнаю её по какой-то части сюжета, а в случае с Урсулой — тишина. И это при том, что я прочитал уже более десятка её книг.

Не сказать, что я с её творчеством совсем не сталкивался, я смотрел аниме «Сказания Земноморья» и слышал слово «Ансибл», пришедшее из её книг, но это всё. Меня это удивляет. Учитывая мою любовь к фантастике, поразительно как такая писательница прошла мимо меня.

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

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

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

Рабочий стол офисного работника

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

Среди всех отсылок в новом сериале «Человек-паук Нуар» самой неожиданной для меня стала отсылка к пасьянсу «Косынка», который офисные работники раскладывают на своих рабочих столах с 1990 года, когда он появился в составе «Виндоуз 3.0».

Здесь его на рабочем столе раскладывает секретарша Бена Рейли — частного детектива, который по совместительству ещё и Человек-паук. Интересно, мэр Нью-Йорка из этой вселенной тоже запретит эту игру городским служащим?

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

Детский сплав

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

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

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

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

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

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

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

Купил Xiaomi 17 Ultra

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

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

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

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

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

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

Дядя Федя

Когда мы были на сплаве, на стоянке я вдруг вспомнил дядю Федю. Я всегда называл его «дядей», хотя на самом деле он приходился мне двоюродным дедушкой. Родных дедушек я не застал: когда я родился, у меня были только бабушки и прабабушка. А дядя Федя заменил мне их обоих.

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

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

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

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

Ребёнок в очках и чёрной футболке с аниме-принтом и японским текстом «女の赤ちゃん» стоит на фоне реки и леса, на голове — большой венок из папоротников.

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

Детский сплав: как было

Хочу немного рассказать, как прошёл детский сплав.

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

План был — проплыть за три дня двадцать семь километров по реке Илеть, но со стоянками на берегу нам повезло и не повезло одновременно. Не повезло, потому что все стоянки по пути оказывались заняты; в итоге мы проплыли двадцать километров, прежде чем высадились, совершенно выбившись из сил. Кат, на котором я грёб, постепенно сдувался и плыл всё неохотнее. Дети перенесли эту часть пути куда хуже взрослых — довольно быстро начали скучать.

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

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

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

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

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

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

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

«Электроника МК-61»: «Экспресс»

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

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

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

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

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

Разворот журнала «Экспресс» (09.91): опрос читателей, объявления о продаже игр, таблица паролей к «Защитнику», редакция и логотип клуба любителей игровых программ.
Разворот девятого номера «Экспресса» (1991 год) — издания клуба по калькулятору «Электроника МК-61»

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

«МК-Про»: переписываю на Си++

Сейчас транслятор «МК-Про» — языка высокого уровня для «Электроники МК-61» — написан на ТайпСкрипте. Я выбрал этот язык по двум причинам: хотелось на него посмотреть, и была идея прикрутить транслятор к эмулятору «МК-61», который работает в браузере.

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

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

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

Скриншот редактора кода с открытым файлом compiler.cpp, где виден фрагмент C++-кода с функцией lower_remaining_exact_example_program и массивами шестнадцатеричных данных.

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

Программирование на четырёх GPU

Я сходил в отпуск, но ребята в офисе не прекращали тестировать нейросетки для локального программирования. Мы уже смотрели на сети, которые запускаются на одной и двух картах Nvidia H100, и приступили к тестированию конфигурации из четырёх H200.

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

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

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

  1. DeepSeek-V4-Flash
  2. zai-org/GLM-4.5-Air-FP8
  3. Qwen3-Coder-480B-A35B-Instruct-FP8

Можно попробовать ещё ГЛМ поновее и КИМИ, но они обе будут с сильными квантированием, поэтому есть сомнения, что они смогут побить победителя. «Квен» что-то расстроил, я ожидал, что он будет лучше всех, а он на тестах занял последнее место.

Скриншот вывода nvidia-smi: 4 GPU NVIDIA H200 NVL, драйвер 595.71.05, CUDA 13.2; температура 27–30°C, потребление 91–98 Вт из 600 Вт, память ~136 ГБ из 143 ГБ, загрузка 0%.

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

«МК-Про»: прогресс по переводу на Си++

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

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

В данном случае мы наблюдаем горе от ума: сеть попроще — GPT-5.3-Codex-Spark — перебрасывает код именно по той схеме, которая была у меня в голове: «айда перепишем, а потом посмотрим на тесты», но у неё быстро кончаются лимиты. А вот ГПТ-5.5 работает более методично: переписывает кусками, основываясь на том, что показывают тесты. Так медленнее, да ещё и тесты гоняются по многу минут, а их много, поэтому всё и идёт туго.

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

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

Программируемые калькуляторы и баги

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

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

Таких багов я знаю два: функция вычисления максимума считает ноль самым большим числом (можно попробовать ввести 500 В↑ 0 max, чтобы убедиться), а второй — генератор случайных чисел начинает зацикливаться, если попробовать взять целую часть случайного числа.

Сравнение раскладок калькулятора ЭЛЕКТРОНИКА МК 61: слева латиница, справа кириллица с кнопками F, K и цветными функциями.
Разворот из брошюры «Elektronika MK-61 Calculator Operating Instructions»

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

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

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

Иншааллах

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

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

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

Мы в Татарстане, кстати, говорим «Алла бирса» («если даст Аллах»), причём так говорят не только мусульмане, я, например, так тоже иногда говорю.

Четверо людей сидят в студии на фоне фиолетовой стены и растений; внизу экрана надпись: «inchallah дай бог (фр.).

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

«Земной дракон»

Разбирал на днях папку со всяким скачанным барахлом и обнаружил две отсканированные страницы «Журнала-Копейки», № 35 за 1913 год. Я его как-то уже цитировал, но тогда не обратил внимания на заметку на другой странице. А она очень забавная — про «дракона».

Иллюстрация «Драконы въ Африкѣ»: два гигантских земных дракона с длинными шеями и хвостами, один крупнее другого, стоят на равнине; под ними — человек для масштаба.
Вырезка из «Журнала-Копейки», № 35 за 1913 год

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

Думаю, в те времена ещё знали, что люди разминулись с такими «драконами» на шестьдесят с лишним миллионов лет. Хотя, возможно, человек на рисунке приведён просто для масштаба.

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

Самым частым аргументом, насколько я помню, был вопрос: «А откуда тогда, по-твоему, взялись легенды о драконах?».

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

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

Привезли дочку в Лениногорск

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

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

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

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

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

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

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

«МК-Про»: переписано на Си++

Сегодня наконец закончился процесс переноса кода «МК-Про» на C++. Переписывание заняло около восьми дней, использовались три нейросети. Основной каркас был перенесён с помощью «ГПТ-5.5», часть тестов довольно механически переносилась нейросетью «ГПТ-5.3-Кодекс-Спарк», а последние штрихи вносил и баги чинил «Опус 4.8».

Производительность трансляции улучшилась в среднем в 2,5 раза. Есть один регресс у одной короткой программы, которая выполняются до 50 миллисекунд, но это, скорее всего, погрешность: не исключено, что в этот момент в фоне стартовало что-то тяжёлое.

За восемь дней было переписано 122 тысячи строк, которые превратились в 145,5 тысяч строк на C++.

Таблица сравнения времени выполнения примеров на TypeScript и C++: C++ быстрее в большинстве случаев (от 1.13x до 9.52x), кроме e-94-digits, где TS быстрее в 1.67x.

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

Воздухан

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

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

«МК-Про»: два регистра в одном

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

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

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

Идея в том, что два целых числа с известными диапазонами можно упаковать в одно число: одно — в целую часть, другое — в дробную. Тогда извлечь их можно операциями нахождения целой части (K [x]) и дробной части (K {x}), причём дробную часть потом часто можно и не домножать: транслятор может заменить всю арифметику с ней так, что всё будет работать ожидаемым образом, но вместо диапазона 0…9 будет использоваться диапазон 0…0,9.

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

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

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

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

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

А там, как говорят поляки «wygląda jak gówno, a smakuje jeszcze lepiej» — «выглядит как говно, а на вкус ещё лучше». Пятьдесят тысяч строк отвратительного лапшекода, сгенерированного программно из ПЗУ «МК-61».

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

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

← сюда туда →