Хаки в «Электронике МК-61»
Очень интересно разбирать хаки, которые разные люди изобретали, чтобы уместить свои программы в 105 байт памяти калькулятора «Электроники
В коде программы «
fn lost() {
halt("ЕГГОГ")
}
fn front_stop() {
…
if cells[7] < 0 {
lost()
}
…
}Если некое проверяемое значение меньше нуля (в двух остальных местах — меньше или равно нулю), то пишем на экране «ЕГГОГ» — слово «error», это одно из немногих слов, которое калькулятор способен отобразить, так как у него есть специальная логика для отображения некоторых букв, поэтому его часто используют для обозначения проигрыша.
Мой оптимизатор умеет заменять halt("ЕГГОГ") одним опкодом, потому что это «встроенное» в калькулятор слово, но тут он пишет относительно много кода — проверка условия и вызов, тогда как проверку и вывод «еррора» можно объединить в один опкод — F √ или F lg в зависимости от условия.
Если число строго меньше нуля, квадратный корень из него даст ту же ошибку, как и логарифм от числа, которое меньше или равно нулю.
Случайно удалил аккаунт в «Телеграме»
Никогда бы не поверил, что такое в принципе бывает и тем более что это случится со мной. Случайно удалил свой аккаунт в «Телеграме»: сказался сильный недосып
Я ещё не ожидал, что такое опасное действие ничем особо не защищено — никаких тебе дополнительных подтверждений
Дополнил подробностями:
Вчера очень поздно вернулись с экскурсии, на ужин в отеле, понятное дело, не успели. Пока искали, где можно поесть, прошло ещё
Утром, часов в шесть,
Решил заняться
Написал в поддержку, но, думаю, пользы мало.
Пытаюсь хотя бы восстановить аккаунт, пока мои друзья не проснулись и не забеспокоились, но, похоже, подтверждающие звонки в роуминг на российский номер не проходят, не получается.
Даже описать не могу насколько я расстроен этим случаем.
Попробовал «Кодекс»
Так исторически сложилось, что серьёзно программировать с нейросетями я начал с «Курсора». До сих пор его использую, и планов
«Курсор» — специализированная среда разработки, заточенная под работу с нейросетями. В ней есть очень много специальных костыликов, позволяющих нейросети делать свою работу. Такие среды дают огромный прирост по сравнению с копированием кода из окна нейросети — тем, с чего мы все начинали.
Недавно братишка уговорил меня попробовать «Кодекс» — конкурирующую среду разработки, которую делает компания
Не обманул: позже я убедился, что в рамках подписки за двести долларов можно работать почти с любой интенсивностью. Там, где в «Курсоре» легко тратились двести долларов в день, тут я, заплатив один раз, больше ничего не плачу́.
Объяснение простое: «Курсор» в основном перепродаёт токены чужих нейросетей, зарабатывая на разнице, а «Кодекс» продаёт токены нейросетей той компании, которая его делает.
При этом с «Курсором» мне работать приятнее.
Я часто вижу, как «Кодекс» принимает часть моих указаний, на которые он уже отвечал, за сигнал к действию и начинает выполнять задачи, которыми уже занимался. В «Курсоре» я такого не видел ни разу.
У «Кодекса» есть режим планирования, но развёрнутые планы он не пишет, а тем планам, которые пишет, не всегда следует. Он может без видимой причины остановиться, не доделав задачу; в этом случае мне приходится его подпинывать словами «делай дальше» или «продолжай».
В отпуске я очень много использую «Кодекс» — каждый день для развлечения пишу язык высокого уровня для калькулятора «Электроника
Выводы.
«Кодекс» я и дальше планирую использовать для своих собственных задач.
Бюджет «Курсора» буду тратить на работе.
Спортинвентарь в отелях
В отелях меня каждый раз удивляет наплевательское отношение к спортивному инвентарю. Особенно
В этот раз меня это так возмутило, что я пошёл к сотрудникам, и они выдали мне совершенно новые ракетки, которые я после игры оставил рядом со старыми. Надо ли говорить, что сегодня драные ракетки лежали там же, где обычно, а новые, видимо, сотрудники опять
Чем кончилась история с «Телеграмом»?
Всем, наверное, интересно, чем же кончилась моя история со случайным удалением аккаунта в «Телеграме». Кончилась тем, что я прошёл через все стадии принятия и зарегистрировал новый аккаунт на тот же номер.
Техподдержка не ответила ни на одно из двух моих писем, да я и не ждал, поэтому, как только получилось зарегистрироваться заново, я это сделал. Не получалось несколько часов — мне должен был позвонить бот и продиктовать код, но он всё никак не звонил.
Канал в «Телеграме», где я дублирую этот сайт, естественно, тоже пришлось создать заново, так что заходите, кому удобнее читать меня там.
«МК-Про»: ЯП высокого уровня для «МК-61»
Язык высокого уровня для программируемого калькулятора «Электроника
Вообще, начал я его писать, потому что меня спросили, не знаю ли я
Справедливости ради, хорошо, пожалуй, ещё не вышло, мы только на пути к этому, хотя я верю, что может получиться. Тот вариант, который сейчас уже есть, я оцениваю
На скриншоте видна очередная сессия, которая, как можно заметить длится без перерыва уже более тридцати часов и до конца ещё очень далеко — неделя или около того. Чтобы сеть не прерывалась, я выставил так называемую «цель», её видно на скриншоте.
105 байт памяти, стек и пятнадцать официально доступных регистров вынуждают использовать самые нетривиальные хаки. Их очень много: если начать рассказывать, я буду писать только о них. Самый нетривиальный, как оказалось, — хак с использованием регистра X2. Это недокументированная возможность, поэтому её использование не очень распространено.
Это не вполне регистр, скорее техническая ячейка для хранения копии экрана, но в программном режиме она обрастает некоторым количеством багов — их вообще в этом калькуляторе полно, — что позволяет использовать её в некоторых случаях как ещё один регистр. В основном — для хранения промежуточных значений.
Я собрал очень много готовых программ — больше четырёх сотен, и в самых плотно упакованных все регистры уже заняты. Выгрузить их тоже некуда: памяти, напоминаю, очень мало — сотня байт, поэтому X2 там очень даже к месту.
Интересно, насколько хорошо будет работать оптимизация, когда нейросетка её доделает. Хотя мы всё обвешиваем тестами, промежуточный результат пока ничего не даёт, кроме расхода токенов: оптимизацию можно будет полноценно включить только в самом конце. Очень жду завершения этого этапа: так долго подпинывать нейросеть без промежуточного результата — скучновато.
Книги: Урсула Крёбер Ле Гуин
Открыл для себя книги писательницы Урсулы Крёбер Ле Гуин. Возможно, не в первый раз. Я прочитал за жизнь столько фантастики, что большинства книг даже не помню. Правда, если я
Не сказать, что я с её творчеством совсем не сталкивался, я смотрел аниме «Сказания Земноморья» и слышал слово «Ансибл», пришедшее из её книг, но это всё. Меня это удивляет. Учитывая мою любовь к фантастике, поразительно как такая писательница прошла мимо меня.
Читаю вперемешку два цикла — Хайнский и о Земноморье, не знаю какой нравится больше. Наверное всё же Хайнский, фантазия у неё такая, что можно пожелать каждому. В Земноморье немного коробит повторение из раза в раз ситуации, когда героя на краю гибели спасает
Несмотря на это, буду читать её целиком, как Желязны
Рабочий стол офисного работника
Среди всех отсылок в новом сериале
Здесь его на рабочем столе раскладывает секретарша Бена Рейли — частного детектива, который по совместительству ещё
Детский сплав
Завтра отправляемся на детский сплав — три дня и две ночи будем плыть, ночуя на берегу в палатке. Дочка уже второй или третий год
Не уверен, что ей, привыкшей к комфорту, очень уж понравится такая жизнь, но пусть попробует. Там есть дети её возраста, которые ездят несколько лет подряд и вроде кайфуют до сих пор.
Уже несколько дней готовимся: вытаскиваем из кладовок походные вещи, которые копились годами,
Впрочем, мы же не собираемся всё это на себе тащить, так что какой смысл сильно экономить на весе? Туда — на машине, дальше — на плотах. Поэтому одежда, мебель, продукты, даже всякие прикольные штуки — всё в изобилии.
Надеюсь, всё пройдёт благополучнее, чем недавно прошедший отпуск во Вьетнаме. Там, кроме удаления аккаунта в «Телеграме», я ещё и в последний день разбил экран смартфона, жена немного утопила свой телефон в морской воде, а ещё я пострадал от томкатов: убил парочку этих жуков, а потом почесался. Меня о них предупредили — спасибо, Дима! — но, к сожалению, на день позже.
Купил Xiaomi 17 Ultra
Как я уже писал, разбил в последний день отпуска свой смартфон — сел так неудачно, что он просто выскользнул из кармана шорт прямо на неровный вьетнамский асфальт. Разбился сразу в двух местах.
Купил себе «Сяоми 17 Ультра». До этого у меня был четырнадцатый, но менять его я не планировал: сейчас в смартфонах уже нет ничего, что способно удивить, а раскладушки я уже пробовал — интересно, но менее полезно, чем я рассчитывал. Можно было бы, конечно, поменять экран,
С другой стороны, замена экрана проще, переезд на новый смартфон — это всегда боль. В большинстве приложений надо умудриться залогиниться, что, с учётом санкций, не всегда просто, а отдельная проблема — перенос истории «Вотсаппа». Я отложил это приключение напоследок, и оно заняло у меня больше всего времени.
История перенеслась примерно с пятой попытки. Перенос напрямую со смартфона на смартфон всё время прерывался
Не удалось перенести только клиентское приложение моего заграничного банка. В поддержке ответили, что из России на новое устройство его не поставить. Ну что ж, придётся хранить разбитый смартфон ещё два года, пока не истечёт срок действия карты. Не то чтобы это приложение так уж нужно, но лишаться его всё же не хочется.
Дядя Федя
Когда мы были на сплаве, на стоянке я вдруг вспомнил дядю Федю. Я всегда называл его «дядей», хотя на самом деле он приходился мне двоюродным дедушкой. Родных дедушек я не застал: когда я родился, у меня были только бабушки и прабабушка. А дядя Федя заменил мне их обоих.
Из всех старших родственников я любил его, пожалуй, больше всего. Жаль, что он жил далеко от нас, в Житомире, но прилетал каждое лето, пока мог. Во время каждого его приезда мы хотя бы раз брали с собой собаку и уходили в лес. Мы гуляли, и он постоянно
Он показывал
Единственное, что я хорошо помню, — как делать вот такие шапочки, из папоротника, как на фото. У нас он растёт везде и называется, кажется, «орляк». Хорошая штука, когда печёт солнце, а вы не взяли с собой головной убор.
Делается просто — рвём папоротник вместе со стеблем и выкладываем им круг, собирая ножки вместе. Стебли потом нужно будет связать травой, кроме того за них удобно снимать и надевать «шапочку».
Детский сплав: как было
Хочу немного рассказать, как прошёл детский сплав.
Всего в сплаве участвовало шестнадцать человек. Затрудняюсь сказать, в какой пропорции были дети и взрослые, — кажется, примерно поровну. До точки высадки в Республике Марий Эл доехали
План был — проплыть за три дня двадцать семь километров по реке Илеть, но со стоянками на берегу нам повезло и не повезло одновременно. Не повезло, потому что все стоянки по пути оказывались заняты; в итоге мы проплыли двадцать километров, прежде чем высадились, совершенно выбившись из сил. Кат, на котором я грёб, постепенно сдувался и плыл всё неохотнее. Дети перенесли эту часть пути куда хуже взрослых — довольно быстро начали скучать.
Повезло, потому что место было живописнейшее. Хвойный лес, мягкий ковёр из мха и обустроенная, убранная стоянка — кострище со скамеечками из брёвен. Я не любитель много фотографировать, поэтому поверьте на слово. Погода стояла шикарная, и от этого лес казался ещё красивее.
Конечно, было много комаров, но ленивых, видимо еды для них в этих местах очень много. Легко отпугивались любыми средствами, коих мы запасли очень много: факелами, спиралями, спреями, ну и самым главным средством — костром. Поскольку было сухо, а вокруг очень много валежника, костёр у нас почти не затухал и, несмотря на тёплую погоду, мы часто сидели вокруг него:
Воды для такой погоды не рассчитали, пришлось идти в ближайшую деревню, благо недалеко — около двух километров, я, рассчитывая найти там магазин и удивить дочку мороженным, тоже туда пошёл, но в итоге пришлось пройти несколько населённых пунктов — магазин нашёлся только в третьем. Купил, в итоге, мороженного на всех — запасливая жена взяла с собой небольшую термосумку, так что оно не растаяло. Мороженное в лесу на сплаве — кайф!
На следующий день неспеша собрались, подкачали каты и проплыли оставшиеся семь километров до точки, где нас должен был забрать автобус. Только успели выгрузится, накрыл ливень. Ребята набросили тент на вещи, быстро поставили палатку для детей, а я пошёл с остальными разбирать каты. Пока разбирали, ливень прошёл. Переоделись, перетаскали вещи и поехали по домам.
Дочке, несмотря, на первый день, который вымотал всех детей, включая её, сплав очень понравился. Сказала, что на следующий год хотела бы повторить. Мне,
«Электроника МК-61»: «Экспресс»
Как я
Думаю, заметно, что последние несколько недель я занят языком «
В процессе вышел на архивный сайт, где
К сожалению, в архиве сайта выпуски не сохранились, но меня это только раззадорило: я решил попробовать выйти на бывших организаторов клуба в надежде, что у них сохранились сканы. Пока я этим занимался, случайно нашёл во «ВКонтакте» паблик человека, который пытался возродить исторический интерес
У бывших организаторов, к слову, сканов не оказалось. Конечно, речь только о тех, с кем я смог связаться: не всех можно найти в интернете спустя три десятилетия. Найденные сканы я передал одному из них, и скоро они будут опубликованы на самом известном, наверное, сайте из тех, что посвящены программируемым калькуляторам, — «
«МК-Про»: переписываю на Си++
Сейчас транслятор
Но вчера я решил переписать его на Си++. При помощи нейросети, конечно. Производительность ТайпСкрипта стала серьёзным блокером: в процессе трансляции оптимизатор перебирает огромное количество вариантов, чтобы уместить программу в 105 байт, и иногда этот процесс занимает минуты. Надеюсь, перевод на Си++ решит эту проблему.
Интересно, за какое время нейросеть справится с этой задачей. Проект большой: около 80 тысяч строк только основного кода; кроме того, очень много тестов — около двух тысяч, если ничего не путаю, — и есть эталонные программы, которые должны скомпилироваться байт в байт.
Спустя полтора часа транслировалось уже десять программ и я удивился такой скорости, пошёл читать исходники, а там, то, что на скриншоте — чёртова ленивая нейросеть просто затолкала внутрь кода эталонный результат десяти программ. Офигенное решение.
Программирование на четырёх GPU
Я сходил в отпуск, но ребята в офисе не прекращали тестировать нейросетки для локального программирования. Мы уже смотрели на сети, которые запускаются на одной и двух картах Nvidia H100, и приступили к тестированию конфигурации из четырёх H200.
Я не помню, рассказывал ли я, для чего вообще мы рассматриваем конфигурации больше чем с одним графическим ускорителем. Ответ простой — большие сети занимают очень много памяти и в память одного ускорителя не помещаются. Современные фреймворки разбивают сети на части, загружают их в память нескольких ускорителей, а данные между ними гоняют по быстрой шине, соединяющей ускорители между собой. В случае карт Nvidia это шина NVlink.
К слову, мы пробовали соединение через центральную шину — с точки зрения производительности это печально, пользоваться невозможно.
В общем, мы потестировали несколько больших моделей, работающих в этой конфигурации и спустя две недели рейтинг уже сложился:
DeepSeek-V4-Flash zai-org/GLM-4.5-Air-FP8 Qwen3-Coder-480B-A35B-Instruct-FP8
Можно попробовать ещё ГЛМ поновее и КИМИ, но они обе будут с сильными квантированием, поэтому есть сомнения, что они смогут побить победителя. «Квен»
«МК-Про»: прогресс по переводу на Си++
По моим ощущениям, я должен был перевести с помощью нейросети на Си++ код транслятора языка программирования высокого уровня «
В реальности же пошёл уже шестой день. С некоторыми перерывами, конечно: иногда работа, например, прерывается ночью — сеть ждёт от меня ответа
В данном случае мы наблюдаем горе от ума: сеть попроще —
Я согласен с тем, что так, наверное, лучше, потому что это позволяет скорректировать архитектуру, поэтому особо не настаиваю, но ждать уже надоело. В данный момент прогресс такой: перетащено всё — основной код транслятора, оптимизирующие стратегии (их более 300), тесты синтаксиса проходят, но эталонные программы транслируются байт в байт не все: ещё около двух третей сильно отличаются от эталона.
Программируемые калькуляторы и баги
Самое интересное в советских программируемых калькуляторах — исследовать их недокументированные возможности, или, иначе говоря, баги. Я сейчас говорю про «Электронику
Например,
Таких багов я знаю два: функция вычисления максимума считает ноль самым большим числом (можно попробовать ввести 500 В↑ 0 max, чтобы убедиться), а второй — генератор случайных чисел начинает зацикливаться, если попробовать взять целую часть случайного числа.
Если к первой ошибке можно было привыкнуть — и я даже видел игры, где это свойство использовалось, — то ломающийся генератор,
Почему эту проблему нельзя было решить, выпустив условную «Электронику
Иншааллах
В последнее время
Вот и сегодня вечером досматривал ролик, который мне попался ещё утром за завтраком: там турок, итальянец, француженка и американец играют в различные языковые игры. В кадре они пытались перевести русское «авось!» на свои языки.
Показалось интересным, что во Франции существует сленговое выражение inchallah («иншааллах», «если Аллах пожелает»), которое, вполне очевидно, пришло из арабоязычной мусульманской среды. Видимо, мусульман во Франции стало настолько много, что выражение вошло в местный разговорный язык.
Мы в Татарстане, кстати, говорим «Алла бирса» («если даст Аллах»), причём так говорят не только мусульмане, я, например, так тоже иногда говорю.
«Земной дракон»
Разбирал на днях папку со всяким скачанным барахлом и обнаружил две отсканированные страницы
Германская Восточная Африка — это, вероятно, территория современной Танзании. В те времена там была немецкая колония и в этом регионе постоянно проводят раскопки. Интересно, что художник изобразил «земного», то есть наземного, «дракона» вместе с древним человеком — если я правильно рассмотрел фигурку под динозавром.
Думаю, в те времена ещё знали, что люди разминулись с такими «драконами» на шестьдесят с лишним миллионов лет. Хотя, возможно, человек на рисунке приведён просто для масштаба.
Но многие мои современники тоже уверены, что динозавры и люди довольно долго жили бок о бок. Когда дочка интересовалась динозаврами, я иногда разговаривал на эту тему со случайными людьми — и был очень удивлён, насколько распространено такое мнение.
Самым частым аргументом, насколько я помню, был вопрос: «А откуда тогда,
Возможно, оттуда же, откуда появились легенды о подземном звере Индрике: люди вполне могли находить скелеты, там где обнажаются геологические слои — на склонах берегов рек, например.
Привезли дочку в Лениногорск
Вчера вечером после работы мы всей семьёй повезли дочку в Лениногорск — поехали мы, собака и улитки; только кот остался дома. В прошлом году мы приехали сразу в начале каникул, а в этот раз сначала был отпуск, потом дочка запланировала сходить на день рождения к подруге, поэтому всё сдвинулось.
Благодаря платной дороге ездить стало гораздо проще — теперь дорога занимает около трёх часов. А когда я переехал в Казань, даже моста через Чистополь ещё не было, не говоря уже о платной дороге. Приходилось ехать через Набережные Челны, и в один конец мы добирались больше шести часов.
Дочка очень ждала этой поездки, планировала чем будет заниматься — собирала рецепты, чтобы
Погода неожиданно испортилась: конец июня, а на дворе +10, дождь и пасмурно, как осенью. Вчера мы едва проскочили мимо ливня, но в Лениногорске непогода всё равно нас поймала: хоть это был и не ливень, но немного покапало. Если верить прогнозу, так будет до конца недели, что же за лето такое?
В понедельник на работу, но ещё не решили когда поедем. Вероятнее всего завтра, чтобы отдохнуть, но колеблемся — может выехать сегодня, а завтра отдохнуть уже дома. Посмотрим по настроению.
«МК-Про»: переписано на Си++
Сегодня наконец закончился процесс переноса кода
Производительность трансляции улучшилась в среднем в 2,5 раза. Есть один регресс у одной короткой программы, которая выполняются до 50 миллисекунд, но это, скорее всего, погрешность: не исключено, что в этот момент в фоне стартовало
За восемь дней было переписано 122 тысячи строк, которые превратились в 145,5 тысяч строк на C++.
Воздухан
Из недавно вошедших в язык слов очень нравится слово «воздухан» («балабол»). Мне кажется это хорошая тенденция, когда язык изобретает слова внутри себя, а не берёт то же самое слово, только в переводе на другой язык (особенно тупо вышло с выражением «ред флаг», которое уже есть в языке как «красный флаг» и означает ровно то же самое).
«МК-Про»: два регистра в одном
В оптимизаторе
Сейчас я реализую многоходовую оптимизацию, и у меня трудятся сразу несколько агентов, чтобы её запрограммировать.
Первая часть уже, в принципе, давно готова: идея в том, чтобы хранить в одном регистре сразу два значения. Тут можно придумать несколько способов, но самый простой — следующий.
Идея в том, что два целых числа с известными диапазонами можно упаковать в одно число: одно — в целую часть, другое — в дробную. Тогда извлечь их можно операциями нахождения целой части (
В эталонной программе, о которой идёт речь, все регистры заняты под завязку, и эта оптимизация должна работать в связке с другой: в дробной части будет храниться счётчик, а в целой — опорное число для адреса перехода, которое, например, будет менять знак в зависимости от условия. Сам адрес считается по подобранной формуле.
Опорное число и формула подбираются в зависимости от того, где реально оказались в памяти подпрограммы, к которым надо перейти, и это не проблема. Хотя сеть убеждала меня, что опорное число придётся подобрать вручную, я подсказал ей идею простого решателя, и он, судя по тестам, работает.
Вчера я остановился на том, что решатель должен перебирать функции, в том числе тригонометрические: именно они обычно дают самый толковый результат.
В общем, зарядил я «Кодекс», чтобы он покопался в микрокоде калькулятора и алгоритмически повторил код, реализующий тригонометрию в Си++. Цель была обозначена, на мой взгляд, очень чётко. Но не зря я говорю, что нейросеть иногда похожа на джина, который всё, что можно понять двояко, вывернет вам во вред.
Когда я уходил спать, всё работало как часы — нейросеть копалась в ПЗУ калькулятора, сравнивала реализацию с эталоном, разбиралась почему ошибки. Утром я первым делом полез в этот код, чтобы посмотреть что получилось. А там…
А там, как говорят поляки «wygląda jak gówno, a smakuje jeszcze lepiej» — «выглядит как говно, а на вкус ещё лучше». Пятьдесят тысяч строк отвратительного лапшекода, сгенерированного программно из ПЗУ
Сеть