ИИ
Человек: как убить трёхчасовой вайбкодинг
Я уже рассказывал как нейросеть
Первые три часа работы над прототипом, про который я недавно писал, я очень спешил и для экономии времени даже не заводил репозиторий, ну и ничего не коммитил, соответственно, решив, что на старте проекта в этом ничего страшного нет.
Уже после обеда, решив зафиксировать,
Тут меня буквально на мгновение отвлекли
Минуту, наверное, я ошарашенно смотрел на дело рук моих, но потом вспомнил, что
В том же редакторе, где вайбкодил, — в «Курсоре», спросил у нейросети нельзя ли
Если присмотреться, то на скриншоте прототипа, который мне пришлось почти полностью вымарать, можно увидеть заголовок окна чата с моим вопросом про эту ситуацию.
Прототипирование и ИИ
На работе у нас проект одного очень сложного модуля к нашему продукту, дизайн которого мы делаем уже почти год. Бывает так, что мы его откладываем, занимаемся другими делами, потом возвращаемся, но длится это уже очень долго. Одна из причин — никак не удаётся нащупать правильные решения.
Технологическая сложность очень велика, поэтому запрототипировать дизайн малыми силами не удалось, к тому же он ещё только формируется.
А на днях я подумал — почему бы не попробовать сделать прототип (срезав
Выгрузить вёрстку из «Фигмы», где у нас нарисован дизайн, нам не удалось — предназначенные для этого плагины ничего не дали. Я решил с этой проблемой не бодаться, а попробовать сделать вёрстку из картинки «нулевого состояния», постепенно добавляя поведение так, как это описано в техническом задании.
Это был самый утомительный этап — картинку нейросеть «видит», но судя по тому как получилась первая версия, она её себе
Особенно хорошо это было заметно на иконках — элементы на них, чаще всего, те же самые, но нарисованы совсем иначе. Если остальную вёрстку я сумел выправить промптами, то иконки мы просто вытащили из «Фигмы», назвали говорящими именами и нейронка сама догадалась куда их применить.
Так же пришлось, кстати, поступить и с цветами. На скриншоте я убрал весь получившийся интерфейс, потому что не могу его показывать, но полоску заголовка оставил, только всё оттуда стёр.
На приведение в порядок того, что модель наверстала, ушёл, наверное, час, после этого мы вырезали кусок из технического задания, где описывались механики и я скормил это нейросети как есть. Часа через три у нас был прототип, с которым
Потом я просто сказал нейросети где лежит кусок технического задания по которому ему надо написать код, после чего всё заработало
На этом прототипе днём позже мы смогли оценить
При этом я не рассматриваю сделанную работу как готовый кусок кода, который можно затем будет интегрировать в проект. Этому есть несколько причин:
«Виола» и безопасность
Когда я только начинал заниматься восстановлением браузера «Виола», меня поразило как много он себе позволяет делать в системе. Если бы браузер с такими возможностями и с полным отсутствием защиты от несанкционированного их применения дожил до конца девяностых, хакеры бы от его репутации камня на камне не оставили.
Конечно,
At this point you’re probably thinking how great this this, but how do I know that the applets I run won’t delete my files, smuggle info out of my system, and do other mischiffs?
The answer is that these imported objects can’t (or shouldn’t be able to).
The current security policy is pretty straightforward and somewhat limiting for the objects. It basically goes this way: all imported objects are marked as untrusted, and as such these imported objects have no system priviledges, have no access to sub interpreters, and can not coarse other objects to execute scripts arbitrarily.
Видимо эта работа так и не была завершена, но, что радует, была начата. Я изучил всё то, что автор писал по этому поводу у себя на сайте, в группах рассылок и коде браузера и тщательно описал что именно было сделано. Потом я определил, что нужно доделать в коде, чтобы обеспечить минимальную защиту компьютера пользователя от вредоносных сайтов, и приступил к работе.
Конечная реализация вышла довольно прямолинейной. Браузер может работать в одном из двух режимов: защищённом и нет. Когда браузер переходит
В популярном приложении одно э́то было бы проблемой, но я не вижу смысла спрашивать разрешение и для локальных страниц, так как это осложнит мне тестирование браузера. Так что я себе проделал небольшую брешь в защите.
Из защищённого режима браузер переключается в режим без защиты только с разрешения пользователя, переключение инициируется, если во время интерпретации скрипта встречается вызов, требующий переключения в доверенный режим (например, работа с файловой системой или открытие сокета), а так же, если на странице установлен тег SECURITY с атрибутом LEVEL=0.
Оказывается, автор браузера предосмотрел такой тег, но не успел реализовать. Название атрибута в коде уже было, а вот его значение — это моё обоснованное предположение. В коде есть центральный флаг securityMode, принимающий два значения — 0 (система безопасности отключена) и 1. Я предположил, что атрибут LEVEL должен влиять на значение этой переменной.
Если пользователь не согласился на переход в доверенный режим, вызов, запросивший повышение привилегий, завершается с нефатальной ошибкой — там, где можно вернуть флаг того, что произошла ошибка, я это делаю. Как только браузер встретит следующий такой вызов, он опять попросит разрешения сменить режим. Тут, опять же, слабое место, — можно заспамить пользователя такими запросами. Собственно, эта проблема была в любом браузере девяностых годов.
Решается она просто. Например, можно добавить в диалог галочку «больше не спрашивать» и не позволять его вызывать до перехода на другую страницу, но это настолько не в духе браузеров тех годов, что я тоже не стал этого делать.
Если мы перешли в доверенный режим, то он сбросится на следующей же странице, загруженной из интернета.
Я потратил так много усилий и токенов нейросетей, чтобы сначала понять замысел автора, потом придумать в её рамках реализацию, закрывающую все белые пятна, а потом реализовать, что немного выдохся и пока больше таких больших доработок не делал, да и токены надо бы поэкономить. Поэтому пока что я доделываю всякие мелочи и дописываю документацию.
Но не будь нейросетей… Я уже не раз повторял это в частных разговорах, но, кажется, ни разу не писал у себя в блоге: без нейросетей я бы этим заниматься не стал. Усилие от реализации этих доработок без нейросетей во много раз перекрывает удовольствие от этой работы.
«Виола»: растягивание окна
В последнее время мало что дорабатываю в «Виоле», чаще борюсь с багами, а их там предостаточно. Сегодня ночью пал один из самых сложных в исправлении.
Дело в том, что у меня окно «Виолы» нормально не тянулось — если попробовать изменить размеры, то в окне появлялись чёрные полосы, положение элементов плыло, в общем пользоваться этим было невозможно. Я, понадеявшись на то, что оригинальная «Виола» просто не умела растягиваться, заблокировал во всех окнах такую возможность.
Но позже в видеоролике, где видно оригинальную «Виолу», запущенную в виртуальной машине, я увидел, что она прекрасно растягивается безо всяких проблем.
Видимо проблема
К проблеме растягивания я уже пытался подступиться, но, потратив несколько часов, отступил. На этот раз я попробовал новый подход. В прошлый раз нейросети пробовали
Я сообразил, что проект, видимо, просто слишком огромный. У нейросети «глаза разбегаются» в попытке сгенерировать фиксы, так как дело может оказаться в чём угодно.
Поэтому я попросил нейросеть сгенерировать небольшое приложение, которое компактно повторило бы проблему, чтобы там её править. Удивительно, но мой любимый «Опус 4.5» с задачей не справился — он слепил
Выручил
К тому времени, когда всё заработало, в коде было полно
Судя по логам, работу я закончил в третьем часу ночи.
«Нанабанана» и реставрация фото
Я уже несколько лет смотрю насколько нейросети пригодны дня реставрации фотографий. Для этого у меня есть контрольное фото моей прабабушки с двумя дочерьми. Когда выходит
«Нанабанана» — первая сеть, результаты реставрации которой мне захотелось показать. По моим меркам она справилась на три с плюсом. Критерий у меня простой — люди не должны измениться.
Если с дочками прабабушки получилось довольно неплохо, — только изменились рост и пропорции лица, то прабабушка изменилась сильнее. Лицо похоже, но другое, — сильно изменились глаза, носогубные складки и рот. Такого при хорошей раставрации быть не должно.
Поэтому пока три с половиной. Но это уже очень близко к тому, что можно использовать, раньше сетки с этой задачей справлялись хуже. Думаю, если сделать несколько попыток, то чисто случайно можно получить реставрацию, которая потянет на четыре или даже на четыре с плюсом.
Пять будет, когда я с первой попытки буду получать то, что ожидается.
Автостереограмма и роботы
Давно хотел проверить идею нельзя ли защищаться от роботов, кодируя капчу в автостереограмму. Для людей она тоже не очень удобна, — даже умеющие их смотреть, не имеют навыка делать это быстро. Но если бы автостереограммы были последним бастионом, думаю, все научились бы
Я сделал несколько автостереограмм с рисунками, надписями и абстрактными фигурами и попробовал спросить у ЧатГПТ 5.2 что там нарисовано «в глубине». Ожидаемо, кроме галлюцинаций ничего не получил.
Но потом оказалось, что если попросить нейросеть программно восстановить рисунок, она его успешно восстанавливает и не менее успешно разбирает. Казалось, затея сорвалась и мне даже было не жаль, — всё же разглядывать автостереограммы для некоторых людей мучительное занятие. Но потом я попробовал ещё одну идею.
Оказалось, что если карта глубины почти плоская и пятна на ней очень абстрактные (я использовал близко расположенные буквы), то я могу сосчитать сколько таких «пятен» я вижу на картинке, а ЧатГПТ считает, что «в глубине» ничего нет, пусто.
В общем, в этом
Заблуждения и нейросети
Хочу собрать в одну заметку некоторые важные для меня статьи об общении с большими языковыми моделями (БЯМ).
- В статье «Mind Your Tone: Investigating How Prompt Politeness Affects LLM Accuracy» описывается эксперимент исследователей Университета Пенсильвании. Они обнаружили, что импульсивные и грубые формулировки приводят к более высоким показателям точности БЯМ, улучшая результат на несколько процентов;
- В статье «One Ruler to Measure Them All: Benchmarking Multilingual
Long-Context Language Models» утверждается, что лучшим языком для промптов неожиданно оказался не английский, а польский. Английский занял лишь шестое место. Конечно, необходимо учитывать особенности эксперимента: были выбраны синтетические задачи и использовалось очень большое контекстное окно. Тем не менее, вопреки устоявшемуся мнению, возможно, в некоторых случаях английский язык для промптов — не лучший выбор;
- Две работы «When “A Helpful Assistant” Is Not Really Helpful: Personas in System Prompts Do Not Improve Performances of Large Language Models» и «The Impact of Role Design in In Context Learning for Large Language Models» вместе показывают, что задание структуры ответа (то есть подробная инструкция как ответить) в промпте улучшает качество ответа, но, не смотря на сложившуюся практику, задание социальной роли («ты — опытный психолог
с 20-летней практикой») либо особо не влияет, либо даже ухуждает результат;
- Статья «Lost in the Middle: How Language Models Use Long Contexts» о том, что современные языковые модели, даже с расширенными окнами контекста, не умеют надёжно использовать длинный ввод: их точность резко зависит от позиции релевантной информации и имеет устойчивую
U-образную форму — лучше всего модели работают, когда нужные сведения находятся в начале или в конце контекста, и заметно хуже, когда они расположены в середине. Это противоречит интуитивному «давайте напихаем модели побольше данных в промпт, у неё всё равно окно большое».
Блики на стёклах
Видя, как нейросеть «Нанабанана» легко справляется с бликами на стекле, подумал, что мне бы хотелось и в моём смартфоне иметь эту функцию — «убрать блики». Я много фотографирую в музеях, где многое за стеклом, но стесняюсь бликов, мне кажется, что они сильно портят получившееся фото.
Сейчас я иногда прогоняю такие фотографии через нейросеть, но,
Обратная разработка GIFLITE.EXE ★
Вчера мучился бессонницей, нужно было
В случае GIF очень хорошо помогала известная утилита GIFLITE.EXE — коммерческая разработка компании «Вайт Ривер Софтвейр» (White River Software), которая, по всей видимости, давно исчезла, так как я про неё ни в какой другой связи никогда ничего не слышал.
Утилита была под DOS, но я тогда работал под «Виндой» и проблем это не создавало, но позже, когда я пересел на «Мак», пользоваться ей стало неудобно. Тем не менее я всё равно ей ещё долго пользовался через всякие эмуляторы.
Она всегда меня интриговала — было интересно что она вообще такое делает, как ей удаётся уменьшить размер гифа и чем отличаются её методы сжатия, которые задаются ключом -m.
В общем, раз уж не спалось, я провёл давно запланированный эксперимент, к которому всё никак не мог найти времени приступить — имея на руках только бинарный файл старой программы, воссоздать её на другой платформе. Довольно актуальная задача, кстати, я знаю, что у некоторых людей есть программы без исходного кода, которые они вынуждены запускать на давно устаревших компьютерах.
Забегая вперёд, хочу сказать, что эксперимент удался — программа создаёт в точности такие же GIF-файлы во всех режимах и я, кстати, получил ответ на свой вопрос — бо́льшая часть методов в ней объединяет близкие цвета, уменьшая файл за счёт этого.
А теперь, немного подробностей.
Opus 4.5 показался смелым исследователем, который идёт к цели, не пасует перед проблемами. Если
Grok Code — торопыга, который как будто считает себя чересчур способным, много фантазирует, принимая свои фантазии за реальность и вообще слишком некритично, без рассуждений всё воспринимающий.
Сначала я дизассемблировал код, но это поначалу мало помогло — видно было, что нейросети пытаются «нащупать» в получившемся коде границу функций, чтобы разобраться с ними по отдельности, но не могут. Но позже этого код пригодился — чтобы восстанавливать логику более точно.
Потом я установил radare2 с плагином r2ghidra и нарезал бинарный файл на сишные функции. Код восстановился плохо, с лакунами, поэтому я запустил отдельную сетку, которой буквально по шагам объяснял что делать. Основная идея — довести сишный код до читаемого состояния, разбираясь с функциями от самых коротких к более длинным.
Для этого мы сначала разобрались с таблицей виртуальных функций внутри ассемблера, после чего дело пошло веселей. Заняло это несколько часов интенсивной работы с нейросетями, по ощущениям выглядело как парное программирование.
Параллельно, в другом окне другой экземпляр нейросети писал основной костяк кода, попутно разбираясь с проблемами, туда я заглядывал редко, но без моего внимания то окно тоже не обходилось.
В полным соответствии с принципом Парето, 20% кода отняло у меня 80% времени. Тут очень хорошо показал себя Opus 4.5, — поскольку в коде разобраться было сложно, там 40 тысяч строк на ассемблере, он ставил очень много эксприментов, сравнивая два набора файлов между собой — тот, который получался при запуске оригинального GIFLITE.EXE с нашим.
Мы долго не могли добиться бинарной точности результирующих файлов — очень много нюансов, которые влияли на то, что получалось. Вплоть до реализации алгоритма сортировки цветов, функции хеширования и прочих мелких деталей. Восстанавливать детали помог ассемблерный код — в Си некоторые подробности не перенеслись, отчасти
Я очень доволен тем, как прошёл эксперимент. Очень интересный опыт и результаты воодушевляющие. Код, как обычно, можно увидеть на «Гитхабе».
JOPA: Javac One Patch Away
Пока я тут использую нейросети для развлечения, некоторые ребята пробуют их
Это может быть нужно, например, для «бутстрапинга» — когда нужно с «нуля», из исходников собрать
Я попробовал у себя собрать этот компилятор. Сходу не удалось, но дописанное нейросетью можно нейросетью и запустить. В общем, пять минут и всё получилось.
Правда, на моём тестовом примере JOPA упала с ошибкой при попытке открыть rt.jar (это главный архив стандартной библиотеки), но это удалось решить, просто распаковав его рядом.
В общем, вывод такой: проект интересный, но это не полная JOPA, только компилятор, хотя и работоспособный, поэтому запустить скомпилированную в class программу нечем. У себя я запускал системной Джавой.
Добавлено позднее: за такое меня ещё не благодарили,
«Виола» и моя мечта: как ИИ снова мне помог ★
Вступление
Я, как вы знаете, довольно давно уже реставрирую браузер «Виола» из недописанных исходников. И была у одна мечта, связанная с ним: увидеть как в нём работает вращение трёхмерной модели самолёта.
Узнал я об этом из статей о судебной тяжбе компаний «Микрософт» и «Иолас» (Eolas), начавшейся
Компания «Иолас» утверждала, что первой разработала и внедрила технологию «встроенных объектов и плагинов»
Тема широко освещалась в прессе и в некоторых из статей есть статичный скриншот того как это выглядело. Кроме того, сохранился код страницы с программой на языке «Виола». Казалось бы — почти всё что нужно!
Что мешало
Но оказалось, что исполнению моей мечты мешало несколько обстоятельств.
Вопрос №1: где взять V-Plot ?
По всей видимости, в открытых источниках его не найти — сколько не запускал я невод глубокого поиска нейросетями, ничего не вышло. Тогда я решил пойти от обратного — у нас есть скрипт на «Виоле», который должен слать этой программе
Без особой надежды я дал нейросети такое задание и пошёл заниматься делами. Через
Оказалось, что специальный «объект» TTY «Виолы» для взаимодействия с программами, которые могут выводить графику в окно браузера, реализован только для «Линукса», а для «МакОСи» (в «Виоле» встречаются куски для очень старой версии этой операционной системы) код реализован не был.
Я как можно тщательнее, как зловредному джину, описал что именно хочу получить и опять переключился на свои дела. И вот тут, когда я без особой надежды вернулся через
Здо́рово! Но где же мои самолётики?
Настал момент узнать откуда же брались самолёты. Оказалось, что «Виола» передаёт на вход
Ориентируясь на приметное имя x29.geom, я решил поискать эту модель, вдруг это
Модель действительно оказалось известной — её
ChatGPT оказался полезен тем, что правильно идентифицировал модель и рассказал её историю, но сам файл нашёлся банальным поиском по интернету.
Дальше нейросети меня опять удивили — посмотрев на мой найденный файл, сеть для программирования «Опус 4.5», не моргнув глазом, написала мне
Отлично! А что со второй моделью?
Со второй моделью так гладко не вышло — как я ни старался, ничего путного по слову TomCat на нашёл. Решил смириться и найти хоть
Тут наконец пригодился глубокий поиск — нашёлся архив внутри которого лежала модель самолёта
Я, было загрустил, но тут решил попробовать уже совсем безумную штуку — натурально попросить нейросеть написать мне конвертор из формата IOB в OFF, причём без описания самих форматов. Самое смешное, что это сработало, причём с первого раза! Получившаяся модель сразу появилась в окне и заработала!
Выводы, или Что меня удивило
Лёгкость к которой нейросеть провела обратную разработку команд, написала интерпретатор команд для
Конечно, у меня осталось ещё много задач даже в этом проекте, которые нейросети либо не могут решить самостоятельно, либо даже с моей помощью.
Тем не менее, та работа, которую я проделал над браузером при помощи нейросетей, совершенно неподъёмна для человека в такие короткие сроки.
Искусство рисования графиков
Лет двадцать назад широко известный в Казани дизайнер С. Н. показывал мне буклет, который он делал для некой нефтяной компании. Его задачей было по возможности так нарисовать графики, чтобы продемонстрировать значительные успехи по всем показателям. Тем буклетом можно было гордиться: умело используя различные известные оптические иллюзии, С. Н. нарисовал графики так, что рост мерещился даже там, где ситуация была прямо противоположной.
К чему я это вспомнил? Компания «Антропик» выпустила релиз новой пишущей код модели «Опус 4.5». На графике, по которому я утром за завтраком мазнул глазами, мне померещился очень заметный рост точности, отчего я провёл в предвкушении весь день: планировал засесть вместе с нейросетью за задачку посложнее и посмотреть, как она справится.
Когда я ближе к вечеру рассмотрел график внимательнее, обнаружил, что точность повысилась менее чем на 4%. Всякий рост — это хорошо, но 4% — это, конечно, не вау.
«Нана-банана» и Мурзик
Продолжаю смотреть на что годится
В качестве следующего теста я попросил нейросеть нарисовать Мурзика — кота, который был у меня в детстве. Набор опорных изображений я сформировал из нарезки мутноватого видео сорокалетия папы, где Мурзика видно пару секунд и своего детского рисунка.
Долго я не экспериментировал, сделал две генерации, да и промпт написал довольно простенький:
На этом рисунке и кадрах из видео есть кот. Надо посмотреть его особенности и сделать фоторелистичного кота. В точности повтори окрас кота, позу на рисунке и все особенности, которые можно рассмотреть.
Но что я могу сказать.
Минусы — поза немного другая, не как на рисунке, но самое главное — немного отличается окрас. На моём рисунке пятно на спинке соединено с хвостом,
При этом, учитывая с какой лёгкостью
И хоть впереди ещё более сложный тест, уже можно сказать, что
«Нана-банана»
Особенно у «ЧатаГПТ» плохо с деталями, добиться стабильности которых между задачами, —
Решил посмотреть расхваливаемую многими
Например, в одном из вариантов губы получились чуть шире, я попросил нарисовать их более поджатыми, как на исходном фото и всё исправилось лучшим образом.
Внешний вид браузера «Виола»
Если вы приглядывались к браузеру «Виола» на моих многочисленных скриншотах, могли заметить, что он выглядит
На деле всё обстояло даже хуже — в нулевом состоянии в этих местах были прописаны заглушки, по которым сразу становилось понятно, что это не интерфейс, а нечто временное.
Мне от этого делалось грустно — я люблю красивый дизайн, а тут такое уродство. Но оказалось, что внутри кода браузера есть закомментированные недописанные куски, в которых можно подглядеть, как на самом деле должен был выглядеть браузер!
Мы с нейросетью посмотрели на этот код, отряхнули его, дописали и выкинули оттуда очевидно лишние вещи (внизу были невзрачные кнопки, дублирующие меню, думаю, это остатки технического интерфейса). Теперь в свежей сборке можно увидеть, каким именно браузер должен был получиться.
Кстати, пока мы с нейросетью занимались интерфейсом, я решил заняться некрасивым уголком справа внизу. Снял скриншот, чтобы меньше объяснять — многие нейросети довольно неплохо по ним всё понимают и написал в промпте:
Посмотри на out.png, справа внизу светлый угол, за который тянуть надо, не совпадающий по цвету с остальным окном. надо бы поправить цвет, сделать в цвет остального окна.
Вот иллюстрация того как это ещё недавно выглядело:
Нейронка, так сказать «взяла под козырек» и начала
Оказалось, она написала мне программу, которая покрасила краешек моего скриншота в правильный цвет!
В итоге я вообще убрал этот уголок: масштабирование всё равно нормально не работает, остаются артефакты, да и в оригинальной программе окно было фиксированного размера.
«Виола»: ИИ и отображение PostScript
Когда я в очередной раз думаю, что понял какие задачи может, а какие не может решить нейросеть быстро и с минимальным моим участием, нейросети подкладывают мне свинью.
Случайно, изучая заголовки, которые отправляет «Виола», я обнаружил, что этот браузер
Непонятно для этого понадобился отдельный тег, ну вот так сделано. Для наглядности вот пример его использования:
<FIGURE TYPE="application/postscript" SRC="test_figure_ps.ps"
WIDTH="100" HEIGHT="100" MAYDELAY="2000" ISMAP></FIGURE>У него больше атрибутов, чем я использовал в примере, в минимуме ему нужен только TYPE и SRC, а остальные атрибуты у меня тут используются как ненужные подробности в моём рассказе, но так уж мне захотелось.
Когда я сделал тестовую страничку с этим тегом, оказалось, что ISMAP и MAYDELAY с «ПостСкриптом» не работали, как и, собственно, само отображение «ПостСкрипта».
С отображением я справился быстро. Секрет в том, что «Виола» на самом деле этот язык сама по себе не понимала, до моего вмешательства она использовала довольно неряшливый код, который использовал кучу временных файлов и две утилиты, — gs и ppmtogif, при помощи которых она получала GIF, который на самом деле и отображался.
Я весь этот код просто выкинул и заменил на вызов утилиты magick, которая умеет конвертировать «ПостСкрипт» в GIF напрямую безо всяких посредников. Пришлось только учесть, что
Довольно быстро я починил и реализацию атрибута ISMAP — просто скопировал его из обработчика формата XBM, где он работал, а починку MAYDELAY отдал нейросети.
Вроде ничего сложного, опять же — этот атрибут работал у XBM, я предполагал, что сеть быстро разберётся в чём там дело, передрав рабочий код и наложив его на особенность — XBM отображается напрямую внутренней библиотекой браузера, а «ПостСкрипт» конвертируется.
Примерно спустя час я сдался. Ни ChatGPT 5.1 Codex, ни Gemini 3 Pro, ни моя любимая Sonnet 4.5 с задачей не справились — каждая из них писала мне огромную простыню кода, которая задачу не решала.
Кусок кода, который надо было поправить, выглядел следующим образом. Если атрибут MAYDELAY не указывался, то вызывалась конвертация «ПостСкрипта» в GIF и он показывался, в противном случае запускался таймер, который вызывал loadData — другой… э… метод, назовём это так, программы на внутреннем языке «Виолы», в котором конвертации не было.
Модели это видели и просто копировали конвертацию в этот метод, но к моменту срабатывания таймера файл, с которым нужно было работать, уже пропадал. Думаю, его удалял сборщик временных файлов, встроенный в «Виолу». В итоге ничего толком не работало: модели ходили по кругу и, пытаясь исправить ситуацию, писали всё больше кода.
Исправление, которое сделал я, работает очень просто: я сначала делаю конвертацию, потом смотрю, есть ли параметр MAYDELAY, если нет, отдаю сконвертированную в GIF картинку в отрисовку, если есть, откладываю отрисовку, передавая в метод loadData уже сконвертированную картинку.
По сути, я передвинул несколько строк кода чуть ниже, это всё моё исправление. Я
Что прикупить из нейросетей?
У меня постоянно спрашивают, сколько и за какие нейросети я плачу. На самом деле у меня немного платных сервисов — всего две подписки.
У меня оформлена самая дешёвая ($22,4 в месяц) подписка на ChatGPT, и то только
Это ощущается как помощник, который готов выполнить для вас поисковую работу. Пользуюсь постоянно. В последний раз — два дня назад, когда искал, где недалеко от нашего отеля (мы сейчас в Эмиратах) жена и дочка могут покататься на лошадях.
Эту же сеть я использую для коррекции фотографий, редактирования текстов и выжимки текста, когда нет времени изучать
Кроме того, у меня есть самая дешёвая ($20) подписка на «Курсор», чтобы программировать, но сейчас мне не хватает, я всё время докупаю токены. Планирую перейти на более дорогой тариф ($80), но, учитывая мои аппетиты, может и этого не хватить. Когда «Виола» надоест, вернусь обратно на самый дешёвый.
Патч Бармина
У меня тут случайно получился прекрасный пример того, почему нейросети пока нельзя пускать в самостоятельное программирование.
Браузер «Виола», портированием которого я занимаюсь, среди прочих форматов графики поддерживает ещё и формат XPM. Сейчас не особо важно, что это такое, но вчера я вспомнил, что родственный ему формат XBM
Я решил посмотреть, нет ли в XPM тех же уязвимостей и, если они есть, — исправить.
Одна из уязвимостей, которую мы рассматривали, — запуск произвольных команд. Мы её, конечно, закрыли, но посмотрите, что нейросеть предложила в качестве теста на отсутствие уязвимости: запуск команды
Вайбкодинг: как убить трёхчасовую работу
Недавно я реализовывал поддержку стилевых таблиц в браузере «Виола», который я ковыряю в свободное время. Делал при помощи нейросетей, но вайбкодинга не вышло — программировать пришлось дуэтом, очень уж сложная задача. В итоге я потратил около
Пока мы программировали, сделали очень много различного вывода в консоль для отладки состояний объектов. Это очень помогает оценить что происходит внутри.
И вот, настал момент, когда всё заработало как надо — все написанные мной тесты пройдены, осталось убрать лишний вывод в консоль и закоммитить. Чтобы самому с этим не возиться, я попросил убрать весь вывод нейросеть, а сам пошёл налить чаю.
Когда пришёл, всё уже было готово, но я решил проверить перед коммитом — всё ли в порядке. Скомпилировал, запустил один из тестов… и всё развалилось. В сердцах пишу в чат с нейросеткой капсом: «ЧТО ТЫ НАДЕЛАЛ, ТЫ ВСЁ ИСПОРТИЛ». Понимаю, что бесполезно, но на меня так накатило, что
И сетка в чате пишет в режиме размышления: «понятно, пользователь
На меня тут нашло
Продолжаю возиться с «Виолой»
Продолжаю понемногу возиться с браузером «Виола», оживлением которого я недавно занялся. Благодаря нейросетям, на это ушли не годы, а всего несколько дней.
Чтобы не нарушать аутентичность, решил править только ошибки — их там нашлось и ещё найдётся немало — и доработать работу с сетью. Добавил менеджер соединений, поддержку HTTPS и транслитерацию кодировок: иначе пришлось бы заменять шрифты, а это в мои планы не входит. Кроме того, сделал забавную вещь — поддержку протокола
Если желаете тоже прикоснуться к истории, проект лежит на «Гитхабе», можно попробовать себе его собрать. Только сразу скажу — я собираю под «МакОС», под другие платформы без переделки собрать не получится.