Евгений Степанищев (RSS Feed)'s avatar
Евгений Степанищев (RSS Feed)
bolknote.ru_rss@rss.nostr.twinkle.lol
npub15jxf...mfgm
Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни https://bolknote.ru/
Кощей Читал тут русские берестяные грамоты и наткнулся на одну из грамот (https://gramoty.ru/thumbs/bibliography_file_supplement_ngb-5_novgorod_0242.pdf), где упоминается имя или прозвище «Кощей». Таких грамот нашлось три штуки, и, наверное, есть ещё. Я как-то вне контекста сказок это слово не встречал, даже залез в «Википедию». Раньше как-то не приходило в голову почитать что-нибудь про сказочного Кощея. Узнал много нового. У него, оказывается, ещё и отчество было — Трипетович, да ещё и возлюбленная, которую в одной из былин украл у него Иван Годинович. Впрочем, не исключено, что тут склеились два разных персонажа. Интересно всё же — сказочный Кощей получил имя по существовавшему когда-то имели или всё-таки сначала так назвали персонажа, а уже потом его имя стало прозвищем? Теперь уж и не узнать. image «Челобитье от Кощея и от испольщиков. У кого есть кони, и те плохи, а у иных [вовсе] нет. Чем, господин, пожалуешь крестьян? А рожь, господин, велишь мне молотить — как укажешь?» (или: «так это, как укажешь»)
Краеведение: что под штукатуркой? Вот непонятно, как это вообще работает. Я уже 15 лет работаю в «Айти-парке», с того самого дня, как переехал из Москвы обратно в Казань. Все 15 лет я хожу мимо стены, что на фотографии, пусть не каждый день, но достаточно часто. Это историческое здание, а я, как знают постоянные читатели моих заметок, очень люблю такие здания осматривать и подмечать на них различные детали. Что там было в тот год, когда я переехал, неизвестно. Годом позже, в 2012 году, на нечёткой фотографии «Яндекс.Карт» видна вмятина, как будто Халк легонько ткнул мизинцем. Вряд ли она заинтересовала бы меня и сейчас. Но в 2016 году на «Гугл.Картах» уже едва-едва виден лёгкий контур. Качество съёмки там не очень, возможно, в жизни он был заметнее. Из года в год он проступал всё сильнее, и лет шесть назад, судя по фото, его было сложно не заметить. Но я почему-то не замечал, пока в сентябре прошлого года, наконец, не обратил внимания. Поспрашивал знакомых краеведов, но никто не знает, что там. Я думаю, что там какая-то табличка: на здании рядом одна есть, 18 века, если мне не изменяет память. Как это проверить, ума не приложу, разве что гипотетическая табличка окажется металлической. Надо бы разыскать свой пинпоинтер, он лежит где-то дома и проверить. А то полгода хожу мимо и каждый раз гадаю — что же за контур проступает? image
Мир в бутылке: графика Хочу немного остановиться на том, откуда взялась графика моего проекта, который я условно пока называю «Мир в бутылке», и какие нейросети я использовал для рисования. Первых персонажей для будущего перформанса я нарисовал в «ЧатеГПТ 5.4». На вход дал несложный промпт, что-то типа такого: нарисуй 10 характерных персонажей-человечков в пиксельном стиле маленького размера. референс в картинке В качестве референса был приложен первый попавшийся скрин из какой-то бродилки времён ДОСа и, если честно, я не ожидал, что результат мне понравится настолько, что, по сути, определит всех будущих персонажей: image Собственно, этот спрайт плюс небольшое текстовое техническое задание, где я поверхностно описал, какими возможностями будут обладать будущие персонажи, я и подал на вход «Опусу 4.7». Картинки я на спрайты не резал: нейросеть справилась с этим самостоятельно — вырезала, сделала им прозрачный фон и даже добавила простенькую анимацию ходьбы. Кстати, позже я обнаружил, что у меня в коде оказалось два варианта спрайтов — для ходьбы влево и вправо, — и попросил оставить только один вариант, а второй делать поворотом спрайта. Травку, камешки, насекомых и игровые предметы мне рисовал уже «Опус». С мелкими предметами он справился хорошо, а с теми, что покрупнее, — хуже. В итоге котёл, костёр, сундук и так далее я снова попросил нарисовать «ЧатГПТ». На мой взгляд, он их нарисовал слишком детализированно: image Поскольку их надо было сделать сильно меньше, «Опус» перерисовал новую версию «по мотивам». В итоге качество меня устроило. Текущий вариант лучше, чем было раньше, но выглядит менее натурально, чем то, что нарисовал «ЧатГПТ». В силу того, что я придерживаюсь ретро-стиля, как будто бы нужный баланс достигнут. Гидру я рисовал в «Нанобанане 2», приложив как референс картинки персонажей. Текущий результат получился примерно с четвёртой или пятой попытки и, если честно, не кажется мне идеальным, но мне больше хотелось проектировать мир, а не возиться с графикой настолько долго. Претензия всё та же: по сравнению с персонажами гидра чересчур детализирована. image Что делать дальше я пока не решил. Либо доделаю этот мир — там осталась ещё одна нереализованная задумка, либо перейду на другую платформу (кое-что заказал на «Авито») и спроектирую что-то там (идеи, опять же, есть).
Кафе: второй зал Что-то я всё забываю написать: мы в кафе без помпы открыли второй зал и потихоньку начинаем его обживать. Потихоньку, потому что решили не закрываться надолго после расширения — денег второй зал отъел прилично, не хочется терять ещё. Поэтому всё немного в недоделанном состоянии, но народу как будто в кафе стало намного больше, пришлось даже расширять цех, так что, видимо, управляющая всё делает правильно. image
Инженерное меню в мониторе Kuycon Искал как обновить прошивку своего нового монитора «Куйкон» и случайно нашёл инженерное меню. Надо зажать клавишу «≡» на пультике до его появления. Большинство опций понятны — выставление соотношения цветов при разных точках белого, уровень подсветки, отключение показа логотипа. Термин «Burn-In» я погуглил, это защита от выгорания. Единственное, что ставит в тупик — непонятная опция «DefLAN», которая как будто как-то связана с сетью, но выбирается почему-то язык. Я поставил русский, но ничего визуально не изменилось. image
Я в Кибердянске А я тут, оказывается, кое-что забыл показать, в телеграмном канале ( опубликовал, а тут — нет. Вышел очередной комикс «Кибердянска (https://vk.com/cyberdyansk)», но с моим участием: image
Мир в бутылке: поведение ведьмы Вчерашняя идея (https://bolknote.ru/all/mir-v-butylke-gidra-i-vedma/) прикрутить небольшую нейросетку, которая будет выстраивать поведение ведьмы, в общем-то, провалилась. Ушло 4,5 часа, чтобы обучить простенькую трёхслойку на нескольких тысячах игровых ситуаций, но она показала прирост по сравнению с обычным поведением на основе уже существующих правил на уровне шума. Обидно, досадно, но ладно. Там было пространство для манёвра, но слишком медленно тренируется. Чтобы ускорить, нужно переписывать весь игровой мир на какой-нибудь фреймворк для ускорения через видеокарту, а это долго даже с нейросетками. Да и качество такого переноса потом не проверишь. Решил пойти другим путём — попробовать «дерево решений», оно легче в обучении и его проще потом разбирать. Это помогло — эксперименты пошли бойчее, и я довольно быстро увеличил метрику с 1,715601 до 1,933353, что довольно много на самом деле. Метрика там по простенькой формуле учитывает результативность кампании — удалось ли убить гидру и сколько народу выжило. Потом «Курсор» просто разобрал мне получившееся дерево и перенес ту же логику в правила. Следующий шаг — хочу расширить количество «решений», которые может принять ведьма и посмотреть что получится. image Визуализированное дерево решений эксперимента №2 (в данный моменту у меня кончается эксперимент №4)
ИИ: Claude Mythos и поиск уязвимостей Я давно предсказывал, а месяц назад даже об этом написал (https://bolknote.ru/all/ii-poisk-uyazvimostey/), что нейросети в этом году побьют все рекорды по поиску уязвимостей. Прогноз уже начинает сбываться: компания «Антропик» не стала публиковать свою модель следующего поколения «Мифос», потому что она исключительно хороша в поиске уязвимостей. Вроде обещают показать летом, когда все крупные поставщики софта закроют выявленные этой моделью уязвимости. Я сразу заподозрил в этом заявлении изрядную долю маркетинга и оказался прав: как показало исследование (https://habr.com/ru/news/1024952/), изрядную часть уязвимостей, которые раскрыли, нашли также и модели предыдущего поколения. Тем не менее я охотно верю, что «Мифос» сильнее «Опуса», просто не думаю, что настолько, насколько это хотят показать. В конце концов, это хороший бизнес-план — создать миф вокруг новой модели, чтобы все попросились в закрытое и, наверняка, платное бета-тестирование.
Мир в бутылке: гидра и ведьма Довольно интересно получается вместе с дочкой проектировать игровой мир через нейросети. Ей не хватает усидчивости, чтобы довести дело до конца, но пока я его создавал, она иногда прибегала и вкидывала какие-то идеи. Так у нас появилась лошадка (https://bolknote.ru/all/mir-v-butylke-a-gde-loshadka/), а позже — гидра. Вообще дочка хотела дракона, но мне почему-то очень хотелось гидру, в ходе переговоров сошлись на том, что гидра визуально — почти дракон. image Мир в текущем его виде: появился «босс» — гидра Эта гидра — то, что называется «боссом», то есть сильный монстр, для убийства которого требуются усилия большинства персонажей. Гидра сильно спутала мне карты, так как, по сути, все мои персонажи — одиночки. Да, они могут подлечивать друг друга и воскрешать, но основной алгоритм у них написан так, чтобы зачищать свою окрестность от врагов и не умирать. Появление босса попило мне немало крови — пришлось переосмысливать поведение всех персонажей, а некоторые из них до сих пор ведут себя странно. Ни я, ни нейросеть пока с этой проблемой не справились. Труднее всего было с лекарем и ведьмой. Оба персонажа нужны как поддержка: лечить и оживлять других членов команды. Поэтому к ним другие требования, отличающиеся от тех, кто атакует — держаться на периферии, не умирать и лечить всех остальных. Не бог весть какая стратегия, но я до сих пор с ней бьюсь. Пришлось выделить поведенческий код в отдельный модуль и проводить симуляции на тысячах прогонов, чтобы отладить логику. Так удалось отладить поведение лекаря (я в разговоре с ИИ называю её «девочка»), а вот ведьма пока далека от идеала. image Процесс общения с курсором по поводу изолированной симуляции поведения персонажей С алгоритмом ведьмы я бился несколько часов: у неё есть особенность — для лечения ей нужно варить зелья на стационарной площадке, которая может быть занята гидрой. В этом случае ведьма эффективнее в дистанционных атаках — и это она тоже умеет. С ней я тоже провёл ряд симуляций, чтобы выровнять поведение, но она всё равно либо пёрла на гидру и умирала, либо делала что-то столь же глупое. Поскольку код писала нейросеть, я не стал в него погружаться, а попробовал другой подход — запрограммировать небольшую сетку, которая управляла бы поведением ведьмы и обучить её на реальных битвах. Выживаемость резко подскочила, но когда в открыл мир, чтобы посмотреть что вышла, то обнаружил, что ведьма теперь со всех ног улепётывает к краю экрана, стоит гидре выйти из пещеры. В общем, стоит тщательнее описывать что считается успехом для каждого персонажа и его выживаемость — это не единственный критерий, который надо максимизировать. Я как-то не думал, что это займёт столько времени, но планирую экспериментировать до успеха.
ИИ: распознавание рукописного текста Я как-то, сильно увлёкшись программирующими нейросетками, не слишком приглядывался к другим направлениям, или, как сейчас принято говорить, «модальностям». Одно время было интересно, как и всем, наблюдать, как сети генерируют картинки, но сейчас я к этому отношусь очень утилитарно и использую их в основном для обработки фотографий. А сгенерированные картинки просто удручают своей стилистической однообразностью. Музыка и песни, генерируемые нейросетями, привлекали своей необычностью лет десять назад, но сейчас уже как-то не интересны. Видео меня тоже как-то не поражают, видимо, потому что 95-й процентиль всего, что попадается на глаза, — трижды переваренный кал. В общем, я при помощи нейросетей много работаю с текстами разной природы, а к остальному в основном глух. Поэтому я как-то пропустил, что небольшая по нынешним временам сетка — «Квен 3.5» с 35 миллиардами параметров, квантованных до FP8, — оказывается, прекрасно распознаёт русский рукописный текст. Я просто не изучал, на что способны современные мультимодальные нейросети! Я-то думал, что весь нейросеточный мир, помешанный на английском и говорящий в основном на китайском, с рукописным русским научится справляться ещё не скоро. В общем, я глазам не поверил, когда мы попробовали вышеупомянутым «Квеном» распознать текст на фотографии: распозналось всё идеально, причём сеть ещё и ошибки поправила (правда, не уверен, что это хорошо). Понимаю, это не самый непонятный почерк, но этот листок — наш первый эксперимент. Потом мы ещё много экспериментировали, но сказать, что я читаю рукописный текст значительно лучше нейросети, значило бы соврать. Мне иногда помогает более широкий контекст: например, я знаю татарские имена, а «Квену» они плохо знакомы, и он может их перевирать, если они написаны не очень разборчиво. В общем-то удивительно, что нейросеть, которую можно запустить даже на некоторых современных ноутбуках, уверенно читает даже слово «шиншилла», записанное рукописным письмом. image Данные не реальные, этот текст написала от балды одна из наших сотрудниц, но я всё равно на всякий случая закрасил некоторые данные Добавлено позднее: уже позже, ближе к ночи я решил попробовать развернуть эту модель, квантованную до четырёх бит на своём ноутбуке, по памяти она как раз должна была влезть, — чтобы попробовать как она справится. Справилась отлично, но мне не удалось выключить режим размышлений, не нашёл такого параметра в LM Studio, где я её запускал, а с ним она работает гораздо медленнее. Один из читателей в моём телеграмном канале написал, что у него с текстом справилась сеть «Гемма4» на смартфоне. image
Мир в бутылке В конце 90-х был относительно популярен класс программ, который сейчас, кажется не встретишь. Не уверен, что у него есть какое-то официальное название, но чтобы как-то его называть, назову его «виртуальные компаньоны». При запуске такие программы чаще всего отображали какое-то интерактивное животное — котёнка, который прыгал по вашим окнам или тараканов, которые прятались за ними. Не то, чтобы я по таким приколам скучал, но время от времени их вспоминаю, непонятно почему. Даже была мысль попробовать написать что-то своё. Но своими руками написать что-то подобное я не сподобился, зато, когда на днях вышла сеть «Опус 4.7», я решил попробовать посмотреть на неё именно на такой задаче. Я решил создать небольшой мирок в браузере, который будет жить на моей страничке. Я думал о нескольких пиксельных, стилизованных под старые игры персонажей, которые будут взаимодействовать с друг другом — разговаривать диалогами, которые будет для них генерировать цепь Маркова. В процессе написания идея модифицировалась — персонажи поселились на полоске внизу страницы, у них появились враги и некоторая специализация. Всё это полностью сделано «Опусом», я только направлял, тестировал и давал идеи. Технически всё упаковано в одну картинку (так оказалось эффективнее) из которой читается и код, и спрайты, и вероятности перехода между состояниями для цепей Маркова. image
Мир в бутылке: сжатие в картинку Вчера я писал (https://bolknote.ru/all/mir-v-butylke/), что код и вероятности перехода в цепях Маркова упакованы в картинку, но не объяснил что это и для чего сделано. Про эту технику несколько раз писали, но она остаётся малоизвестной. Суть в том, что мы, пользуясь тем, что любая картинка — формат со сжатием, кодируем в её пикселях текст нашей программы. Это позволяет, во-первых, отдавать сжатый ответ даже на тех серверах, где сжатие выключено, во-вторых, использовать иногда более продвинутые методы сжатия, которые есть в современных форматах изображений, но могут отсутствовать при сжатии данных сервером через HTTP. image Процесс сжатия в картинку — выбираем формат, который сжимает эффективнее Сжатие при этом реализовывать в ДжаваСкрипте не нужно — браузер за нас распаковывается картинку, а мы её просто попиксельно читаем. Поскольку веса для цепей Маркова занимают аж 3,5 мегабайта в джейсоне, я воспользовался этой идеей, чтобы поэффективнее его ужать, бинарно сериализуя его в картинку, а потом затянул туда и остальное — основной код и спрайты.
Развернуть видео Иногда попадается зеркально отображённое видео — я думаю, таким образом залитые ролики пытаются скрыть от правообладателей. Мне в какой-то момент надоело смотреть видео в таком виде, и я написал для себя однострочник, которым хочу поделиться. Его надо выполнять в консоли браузера, которая вызывается через «Инструменты разработчика». document.querySelectorAll('*,iframe').forEach(e=>(e?.shadowRoot||e). querySelectorAll('video').forEach(v=>v.style.transform = 'scaleX(-1)'))
Мир в бутылке: а где лошадка? Пока программировал свой «Мир в бутылке», пришли жена и дочка и, как фанатки лошадей, потребовали ввести в игру лошадку. Я согласился с условием, что дочка нарисует прототип и хоть немного продумает механику — как именно лошадка будет себя вести. В итоге, дочка по-быстрому нарисовала как она видит лошадь, а я двумя проходами вместе с нейросеткой довёл её до пиксельного совершенства. image С игровой механикой всё-таки больше пришлось разбираться мне, так что я решил, что лошадь будет магическим средством бегства для лекаря, которая не умеет атаковать — теперь, если её атакуют, то она может куда-нибудь ускакать, призвав лошадь. У заклинания есть период охлаждения, так что постоянно бегать не получится.
Мир в бутылке: сжатие в картинку Вчера я писал (https://bolknote.ru/all/mir-v-butylke/), что код и вероятности перехода в цепях Маркова упакованы в картинку, но не объяснил что это и для чего сделано. Про эту технику несколько раз писали, но она остаётся малоизвестной. Суть в том, что мы, пользуясь тем, что любая картинка — формат со сжатием, кодируем в её пикселях текст нашей программы. Это позволяет, во-первых, отдавать сжатый ответ даже на тех серверах, где сжатие выключено, во-вторых, использовать иногда более продвинуты методы сжатия, которые есть в современных форматах изображений, но могут отсутствовать при сжатии данных сервером через HTTP. image Процесс сжатия в картинку — выбираем формат, который сжимает эффективнее Сжатие при этом реализовывать в ДжаваСкрипте не нужно — браузер за нас распаковывается картинку, а мы её просто попиксельно читаем. Поскольку веса для цепей Маркова занимают аж 3,5 мегабайта в джейсоне, я воспользовался этой идеей, чтобы поэффективнее его ужать, бинарно сериализуя его в картинку, а потом затянул туда и остальное — основной код и спрайты.
Мир в бутылке В конце 90-х был относительно популярен класс программ, который сейчас, кажется не встретишь. Не уверен, что у него есть какое-то официальное название, но чтобы как-то его называть, назову его «виртуальные компаньоны». При запуске такие программы чаще всего отображали какое-то интерактивное животное — котёнка, который прыгал по вашим окнам или тараканов, которые прятались за ними. Не то, чтобы я по таким приколам скучал, но время от времени их вспоминаю, непонятно почему. Даже была мысль попробовать написать что-то своё. Но своими руками написать что-то подобное я не сподобился, зато, когда на днях вышла сеть «Опус 4.7», я решил попробовать посмотреть на неё именно на такой задаче. Я решил создать небольшой мирок в браузере, который будет жить на моей страничке. Я думал о нескольких пиксельных, стилизованных под старые игры персонажей, которые будут взаимодействовать с друг другом — разговаривать диалогами, которые будет для них генерировать цепь Маркова. В процессе написания идея модифицировалась — персонажи поселились на полоске внизу страницы, у них появились враги и некоторая специализация. Всё это полностью сделано «Опусом», я только направлял, тестировал и давал идеи. Технически всё упаковано в одну картинку (так оказалось эффективнее) из которой читается и код, и спрайты, и вероятности перехода между состояниями для цепей Маркова. image
Развернуть видео Иногда попадается зеркально отображённое видео — я думаю, таким образом залитые ролики пытаются скрыть от правообладателей. Мне в какой-то момент надоело смотреть видео в таком виде, и я написал для себя однострочник, которым хочу поделиться. Его надо выполнить в консоли браузера, которая вызывается через «Инструменты разработчика». document.querySelectorAll('*,iframe').forEach(e=>(e?.shadowRoot||e). querySelectorAll('video').forEach(v=>v.style.transform = 'scaleX(-1)'))
«Борьба за всеобщую грамотность» Как знают мои постоянные читатели, я люблю бывать на различных заброшенных объектах. В мае 2023 года мы с другом, таким же любителем, ездили (https://bolknote.ru/all/sovetskie-shkoly/) в одно из сёл по наводке — там стоит целый комплекс заброшек, который был когда-то каким-то учебным учреждением. Самое интересное там — библиотека, книги в которой из-за протекающей крыши постепенно превращаются в плесневелую кашу. Несколько штук, которые были в более-менее приличном состоянии, мы взяли, но большинство там либо уже сгнили, либо нам без надобности — вроде издания сочинений Ленина. Кроме книг я взял ещё коробочку со слюдой из одного из кабинетов — показать дочке, что это такое, и одну из киноплёнок для своего давнего приятеля, которого знаю сто лет. Он киномеханик, поэтому я ему взял киноплёнку «Борьба за всеобщую грамотность» 1947 года. С тех пор мы что-то с ним никак не пересечёмся, но недавно он написал мне, что собирается на днях заехать, и я решил сфотографировать плёнку, пока она от меня не уехала, просто на память.
Xiaomi UltraThin Magnetic Power Bank Мы в конце мая в отпуск собрались, времени ещё предостаточно, но начинаем потихоньку вспоминать и докупать то, что нам с собой надо взять в поездку. Жена вспомнила, что у нас все внешние аккумуляторы уже сильно потеряли в ёмкости и надо бы приобрести новые. А я тут как раз у какого-то техноблогера видел тонкие и лёгкие аккумуляторы от компании «Сяоми» — я заинтересовался, но брать не стал, потому что и не знал, что нам надо. Купил и теперь очень рекомендую, они просто отличные! А если у вас есть в смартфоне магнитное кольцо, то они умеют к нему магнититься и отдавать энергию по беспроводу. image
ИИ: а где же «коленка»? Один из бывших коллег, который следит за моими перипетиями в отношении нейросетей, прочитав прошлую заметку с заголовком «Собрано на коленке (https://bolknote.ru/all/ii-sobrano-na-kolenke/)», совершенно закономерно спросил меня: а что, собственно, у меня там на коленке собрано-то? Я перечитал — и оказалось, что из-за усталости я совершенно упустил из виду, что не посвятил «коленке» ни полабзаца. image Что дашборд я стихийно собрал нейросеткой просто под эту задачу — наверное, можно догадаться, — это действительно не какой-то готовый продукт, а скрипт на «Пайтоне», написанный нейросеткой, входящей в мою подписку. Как я сказал, учусь чаще использовать более дешёвые сети, и это — одна из задач, с которой справляется собственная сеть «Курсора» — «Композер 2», а она очень простенькая. То есть он вполне «собран на коленке». Но ещё более наколеночно устроен деплой, то есть развёртывание новых гипотез на подключённых мощностях. По сути, это россыпь документации плюс шелл-скрипты, срабатывающие на хуки при коммите. Всё, опять же, написано вайбкодингом, в основном, тремя сетями: всё простое я поручал «Композеру 2», сложнее — «Кодексу 5.3», ещё сложнее — «ГПТ 5.4». Почему я не стал использовать что-то готовое? А зачем? Надо было быстро, у меня не было времени сравнивать решения, выбирать лучшее под задачу (машины доступны только по ssh, друг друга не видят, перекачивать информацию можно только через мой ноубук), но главное — разбираться, если возникнут проблемы. В этом мире вайбкоженой шелл-рассыпухи при возникновении проблем я просто даю приказ с ними разобраться. Кстати, вот ещё вывод, в добавление к тому, что я писал в прошлый раз: иногда надо давать ИИ приказы! Это не вполне очевидно. Например, когда я давал указание занять GPU0 на одной из машин, нейросеть могла сделать то, чего я не ожидал. Например, увидев, что память там почти занята, поставить задачу в цикл ожидания освобождения памяти. Мне это не нужно — я понимал, что задача поместится, и ставил её туда сознательно. Реальный случай, кстати. И таких примеров у меня было несколько. Когда же я начинал с «приказываю», сетка подчинялась сразу, без всей этой излишней в данном случае осторожности.