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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дядя Федя

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

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

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

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

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

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

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

Купил Xiaomi 17 Ultra

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Людно во Вьетнаме

Мы во Вьетнаме в третий раз. Тут всегда было людно, но сейчас особенно. Гиды говорят, что из-за событий в Эмиратах сюда хлынул весь поток туристов, который не поехал туда. Говорят, Вьетнам к такому наплыву оказался не готов.

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

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

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

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

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

Надеюсь прийти в норму.

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

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

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

Программирую вайбкодингом, разумеется, лучшими нейросетями из доступных — «Опусом 4.8» и «ГПТ 5.5». Вручную это проект на годы, без сеток я бы его даже не начинал.

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

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

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

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

Так, например, переписывается в текущем синтаксисе игра «Охота на лис» из блога Дениса Монатко:

program FoxHuntMK61 {
  field: board(0..9, 0..9)

  state {
    cell: coord(field)
    foxes: coord_list(field, 9) = random_unique()
    bearing: counter 0..9 = 0
  }

  loop {
    cell = read()

    if cell in foxes {
      found_fox()
    }

    scan_from_cell()
    show("--", cell:02, "--", bearing)
  }

  fn found_fox() {
    show(-20)
  }

  fn scan_from_cell() {
    bearing = line_count(foxes, cell)
  }
}

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

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

Отпуск начался

Ну всё, дожил до отпуска. Осталось его пережить.

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

Во Вьетнаме пасмурно и дождь. Такое мы видели и на родине. Правда, тепло — около 30°, в Казани сейчас, наверное, вдвое холоднее.

Очень хочется спать, но негде — номер ещё не готов.

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