Наблюдение за вайбкодингом
Хочу поделиться списком наблюдений, которые я сделал, пока нейросеть мне вайбкодила исправления для запуска браузера ViolaWWW.
Для начала хочу сказать, что в процессе переписывания кода возникло огромное количество задач. В основном — скучных и рутинных: множество очевидных и мелких правок, с которыми нейросеть справилась на «ура», тогда как я бы в них просто утонул. А вот перед более комплексными задачами она иногда пасовала, хотя мне они были вполне по плечу.
Теперь — по пунктам.
Приходилось разбираться в ситуации и разрывать этот цикл вручную. Бывали и моменты, когда ей не хватало идей — нейросеть явно не понимала, как исправить проблему, которую сама же обнаружила, поэтому пыталась подставить достаточно странные костылики. Ту я тоже
Мы сейчас продолжаем переводить приложение на 64 бита (не все куски кода переведены), поэтому я попросил сделать команду make, которая подсвечивает ошибки усечения типа (ключ
Браузер ViolaWWW ожил
Пожалуй он заслуживает быть вписанным в историю развития интернета!
В последний раз браузер, думаю, компилировали
Но теперь ведь у нас есть нейросети! В итоге, я запустил редактор «Курсор», дав ему утром задание успешно запустить браузер, и вечером получил работающее приложение. Мы даже добавили в него поддержку русских букв!
Не скажу, что всё прошло гладко, иногда мне приходилось направлять нейросеть на верную дорогу, но такое было всего несколько раз. Вряд ли я сделал бы такое количество исправлений самостоятельно — потребовались бы
За один рабочий день нейросеть портировала этот брайзер под «МакОС» и перевела
99 бутылок: JOSS
Продолжают писать американскую считалочку «песня о пиве» на всяких странных и не очень языках программирования.
85. JOSS (JOHNNIAC Open Shop System) — язык, созданный Клиффордом Шоу в RAND Corporation в 1963 году для машины JOHNNIAC.
Именно в этом языке впервые появились условные выражения, диапазоны, функции и компактный синтаксис ветвлений, позволявший записывать целые решения в одну строку. Из «Джосса» выросли TELCOMP, STRINGCOMP, CAL, MUMPS, «Фокал» и «Бейсик» — целое поколение языков, унаследовавших его простоту и интерактивность.
Что в «Джоссе» необычного? Из тех языков, с которыми наиболее вероятно столкнуться в реальной жизни, он, разумеется, напоминает
Ну и мелочи: перевод строки обозначается подчёркиванием (_), умножение — интерпунктом (·), «звёздочка» при этом служит для экспоненты, «неравно» записывается отдельным символом (≠). Таких деталей в «Джоссе» много — перечислять можно долго.
* "99 Bottles of Beer," written in JOSS on Oct 16, 2025
* by Evgeny Stepanishchev (https://bolknote.ru)
Let b(n)=[n=1:" bottle"; n≠1:" bottles"].
1.1 Set n=99.
1.2 Do part 2 for i=n(-1)1.
1.3 Do part 3.
1.4 Stop.
2.1 Set j=i-1.
2.2 Type i, b(i), " of beer on the wall, ", i, b(i), " of beer.".
2.3 Type "Take one down and pass it around, no more bottles of beer on the wall." if j=0.
2.4 Type "Take one down and pass it around, ", j, b(j), " of beer on the wall." if j>0.
2.5 Type _.
3.1 Type "No more bottles of beer on the wall, no more bottles of beer.".
3.2 Type "Go to the store and buy some more, 99 bottles of beer on the wall.".
Go.Язык давно уже не используется, поэтому мне не удалось найти, где можно было бы выполнить на нём программу. Обычно в таких случаях я просто пишу код по описанию, не проверяя его, но здесь впервые пошёл другим путём — написал несколько тестов и «завайбкодил» интерпретатор по описанию, взятому из «Википедии».
Колеблюсь, выкладывать его или нет. С одной стороны, кому он нужен — интерпретатор давно почившего языка? С другой стороны, вдруг
Редактирование фото нейросетями
Я часто пишу, что почти ни одна фотография или рисунок на моём сайте не обходится без участия нейросетей. С каждым месяцем технологии становятся лучше — и я с удовольствием этим пользуюсь.
Если раньше приходилось вручную вытягивать детали и закрашивать дефекты с помощью «умных» инструментов, то теперь я всё чаще просто загружаю снимок в нейросеть и даю короткую команду вроде: «выправи перспективу, убери блики, улучши детали, но сохрани все надписи в неприкосновенности».
Иногда приходится повторять генерацию несколько раз — уточняя запрос или просто выбирая лучший вариант. Процесс в деталях случаен, но даже так это всё равно быстрее, чем править снимок вручную.
Вот, например, первая же попытка наскоро улучшить фотографию Шигирского идола, сделанную в 2010 году в Екатеринбургском Музее истории и археологии Урала. Тогда мы ездили туда с другими блогерами по приглашению «Росатома» — посетить Белоярскую АЭС.
В таком виде я бы снимок использовать не стал
Расширяем кафе
Хорошие новости: слева от нас освободилось большое помещение — 80 м², где больше десяти лет находился пункт выдачи «Вайлдберриз». Мы уцепились за этот вариант, потому что в кафе ходит очень много народу, и площади явно не хватает. В общем, будем расширяться, пока есть шанс.
Сначала надеялись обойтись «косметикой», а позже, поднакопив денег, сделать полноценный ремонт. Но, осмотрев помещение, поняли, что в таком виде оно для посещения не подойдёт. Да и кухню нужно расширять. Так что будем сразу делать всё как следует: надеемся, в декабре закончить отделку и начать объединять залы. Пока же кафе продолжит работать в прежнем формате.
«Мышастик»: отдал ноду на время
Давно ничего не писал про «мышастик». Напомню: это
Признаться, я мало слежу за этим проектом, но всё же вижу, что количество нод постепенно растёт. В качестве поддержки я
Тем временем в сообществе появилась идея упорядочить строительство сети — убрать асимметрию: временно отключить ноды, которые вещают далеко за счёт повышенной мощности, но плохо «слышат» в ответ; для пересылки чужих пакетов оставить только стационарные точки и наметить несколько «мостов» между районами за счёт нод, установленных на окнах высоток.
Сегодня отдал на время свою «бумажную» ноду, чтобы она поработала одним из таких мостов — будет работать в одном из высотных зданий КФУ в центре, оно на горке, удобное место.
Деньги начала эры интернета
Бережно храню артефакт конца нулевых — карточку «Яндекс.Денег» на пять тысяч рублей. В то время я работал в «Яндексе» и, несмотря на то что «Яндекс.Деньги» были «отдельным государством», на ресепшене, если ты сотрудник, можно было купить их карточки без наценки, чем через меня пользовались многие мои друзья.
Эту карточку я тоже купил
Такие карточки нужны были, чтобы положить деньги на счёт специальной платёжной системы — она позволяла делать покупки в интернете, как и более популярный международный аналог — «ВебМани». Банковские карты ещё не настолько вошли в обиход, хотя уже тогда было очевидно, что они вытеснят такие
«Боинг» и дискеты
Много раз читал, что компания «Боинг» до сих пор обновляет своё программное обеспечение в некоторых самолётах через дискеты — мол, оборудование произведено давно, модернизация обойдётся очень дорого, поэтому ничего не меняют.
А тут, в чате с мемасиками от бывших коллег, увидел адаптер, который выпускала компания «Сони». Он позволяет работать с карточками «Мемори Стик» через флоповод. Чего бы «Боингу» на такие не перейти? На «Ебее» они до сих пор продаются, причём есть и конкурентные решения — например,
Интересно, что в адаптер, кроме «Мемори Стика», вставляются ещё две
Мой блог
Мне тут попеняли, что у меня в блоге нет определённой тематики, поэтому и подписываться на него не интересно.
Ну так у меня и не блог. Я могу назвать свой сайт блогом только в том смысле, который вкладывали в это слово, когда оно только появилось — сетевой журнал.
Никаких дополнительных смыслов тогда в этом слове не было и я в них не нуждаюсь тоже. У меня нет планов сделать себе таким образом имя
У меня совершенно другие цели — это моя публичная внешняя память. В этом качестве мой сайт мне очень часто пригождается.
То, что тут есть комментарии и читатели — приятный бонус, потому что время от времени в комментариях попадаются очень ценные мысли и заводятся новые знакомства. Хотелось бы, чтобы такого было больше, но ради этого заводить тематические блоги я не готов, мне нужно единое хранилище.
«Дар мой»
Сегодня мы с друзьями отправились в поход и по пути заехали к старому знакомому. Он нашёл
На самом деле (на моём фото печать отзеркалена) там написано «дар мой». Видимо
Добавлено: я только обратил внимание, что в конце слова «дар» нет ера, то ли не поместился, то ли я погорячился с веками.
Интересные липучки
Купил недавно себе найковскую куртку на межсезонье — и жена обратила внимание на то какие у неё интересные «липучки».
И правда, раньше таких не видел: сделаны не по принципу репейника, а скорее как «Лего» — мелкие пластиковые столбики входят между такими же столбиками на другой стороне.
Пока непривычно: когда застёгиваешься, нет ожидаемого щелчка или ощущения сцепки. Кажется, что
FP8 и Nvidia A100
Недавно вышла новая модель Qwen3 с 80 миллиардами параметров. Мы её решили попробовать, но оказалось, что версия фреймоворка vllm, которую мы используем, с ним несовместима. Чтобы не экспериментировать на своём оборудовании, арендовали у «Селектела» две Nvidia A100. Хотели
Модель рассчитывали взять квантованную до FP8, такая есть в выпущенном наборе моделей. Нам она хорошо подходит — как раз уместится в память наших карт. Я рассчитываю, что 80 миллиардов с точностью восемь бит побьют предыдущие тридцать с вдвое большей точностью.
Но нас тут ждало разочарование — карты A100 тип FP8 не поддерживают, есть только эмуляция через FP16. Так как карты с FP8 всё равно пока арендовать не получится, выделили себе четыре A100 и поставили полную модель, без квантованния. Не совсем то, что хотелось, но всё равно полезно посмотреть как встанет и немного погонять по производительности.
В итоге, «завалить» модель одновременными соединениями не вышло (модели, которые мы крутили на одной или двух H100 заваливались), время ответа от нашего эталонного промпта получилось от 3,59 секунд до 8,74. Это очень быстро.
Частота мерцания монитора
Мне в «Телеграме» в комментариях к посту про мерцание ламп напомнили про «карандашный тест» (легко гуглится). Там же написали, что были ребята, которые могли на глаз, при помощи этого теста, определить частоту мерцания — настоящая суперспособность.
А я тут вспомнил, что во времена расцвета мониторов
Причём частоты примерно до 85 Герц я различал, глядя на монитор, а при более высоких частотах приходилось хитрить — открывать на мониторе
На фотографии мы с братишкой за моим компьютером у меня на работе в конце
Мигают ли лампы
Многие знают, что у некачественных ламп может быть повышена так называемая «пульсация» — они мигают с частотой, достаточно высокой, чтобы мы этого не замечали напрямую. Для неё установлен норматив, и его превышение плохо сказывается на глазах: они быстрее утомляются, поэтому такие лампы лучше не покупать.
Мне кажется, что я замечаю пульсацию даже тогда, когда её частота очень высокая. Лампа вроде бы светит ярко, но при этом света как будто всё равно не хватает. В такие моменты специальных приборов у меня под рукой нет, но я научился мерять пульсацию камерой смартфона.
Для этого надо переключиться в режим, где можно настраивать характеристики камеры вручную (у меня это режим «Профи») и сильно уменьшить выдержку. Например, у меня на скриншоте выдержка установлена в 1/1250, на этой отметке очень хорошо видно мерцание светодиодной ленты, световое пятно которой я сфотографировал.
Дочка в новой школе
Как я уже писал, в третий класс дочка пошла в другую школу. Приходит, хоть и уставшая, но улыбчивая и радостная. В предыдущей школе она проводила за день гораздо меньше времени, но вечером была расстроена и почти не улыбалась. Значит, не зря поменяли!
Друзья пока не завелись, но отношения со всеми очень хорошие. Класс вообще отличный — спасибо учительнице: руководит добром и лаской, но, когда нужно, повысит голос и наведёт порядок.
Очень радует, что для обратной связи не надо «записываться на приём» в неудобное время, как было в предыдущей школе: сами пишут, рассказывают, если есть спорные ситуации — улаживают и вводят в курс дела родителей.
На прошлой неделе написали заявление, чтобы дочку отпускали одну. Она увидела, что за многими другими детьми не заходят: они сами выходят из школы и идут к машинам, а некоторые уже ездят на общественном транспорте. В общем, попросилась, чтобы и её так отпускали. На общественный транспорт ей пока ещё рановато, но договорились, что мы к школе подъезжать не будем — она сама перейдёт две дороги и выйдет к остановке, где мы её будем ждать.
Было
Сегодня она прошла уже всё сама. Я открыл отслеживание её часов — но только затем, чтобы снять скриншот в качестве иллюстрации.
Я точно не помню, но думаю, что в третьем классе я уже ходил из дома в школу и обратно сам, но там ситуация была другая — меньшая информированность об ужасах жизни, небольшой город и школа почти в прямой видимости.
Следующий этап — отпускать её из дома в бассейн, она уже просится, идти там побольше, но благо сомнительных подворотень на пути нет, так что — почему бы и нет.
Поход: нагрёбся
Немного поднадоели походы — однообразно. Не то чтобы мы консерваторы, но ездим всегда в одну и ту же сторону: привлекает, что людей нет — пойди найди ещё такое место. А тут — необитаемые острова, нетронутая природа.
Вот только лодки у нас своей нет, поэтому договариваемся с местными. За годы появилось несколько знакомых.
А тут у В., нашего самого постоянного «извозчика», сломался мотор на лодке. Я, с одной стороны, расстроился, а с другой — даже обрадовался. Хоть
В общем, нагреблись мы с другом до мозолей, наверное по часу гребли — в одну сторону, потом в другую. Лодка у В. большая, железная, на моторе идёт хорошо, а на вёслах — не очень. Раз так сплавать интересно, но каждый раз — я
Колоризация бабушкиного фото
Хочу показать уникальное фото, оно у нас одно такое. На нём моя бабушка, Клавдия Фёдоровна, мама моего папы. Фотография, вероятнее всего делалась на доску почёта.
Уникальность его в том, что оно колоризовано в советское время, папа говорит, что скорее всего в ателье, судя по цветам — зелёнкой, марганцовкой и йодом видимо анилиновыми красителями (как меня поправили в комментариях).
Кстати, я бабушку примерно такой и помню,
Приступ «гопникомании»
Постоянные читатели могут помнить, что я являюсь поклонником двух текстовых квестов «Гопник», написанных неизвестными авторами в нулевых. Я очень плохо отношусь к этой субкультуре, тем не менее эти квесты
Исходный код оригинальной игры, по всей видимости, канул в лету, но мне
Недавно в мой репозиторий пришёл некий активный гражданин и навёл там суеты, за что я ему благодарен. В частности, он подчеркнул
Слава нейросетям, всё это удалось довольно быстро исправить. В жизни я постоянно ворчу
Тем не менее, как мне кажется, с нейросетью я делал исправления куда быстрее, чем это вышло бы у меня без неё. Кстати, очень здорово выручают тесты — если попросить нейросеть написать тест, а потом добиться чтобы он заработал (или хотя бы не сломался), то участие человека требуется минимальное.
Зачесались руки
Новый пылесос
У нас дома теперь новый пылесос. Перед прежним у него есть неоспоримое преимущество — он умеет мыть тряпку. Для этого у него в станции есть бак с чистой и грязной водой и он несколько раз во время уборки возвращается туда, чтобы промыть тряпку от грязи.
Прежний пылесос катался с одной тряпкой по всей квартире. И хотя перед каждой уборкой мы меняли тряпку на новую, кидая старую в стирку (у нас их целый набор), это не избавляло ото всех проблем. У нас дома собака и пылесос часто размазывал этот собачий запах на всю квартиру, после чего её приходилось проветривать.
Ещё у него нет лидара, его заменяет набор камер.
Ну и вишенка на торте — у этого пылесоса есть роботизированая рука. Пока один раз поигрались в ручном режиме и всё. Там
По остатку — промывание тряпки на станции очень полезная функция, остальное приятно, но можно и обойтись.
Утилита cdecl
Какая интересная утилита есть, оказывается, а я и не знал! Позволяет по любой декларации типа в языке Си получить описание на английском или наоборот — свернуть такое описание в тип. Вот примеры:
cdecl> explain char *(* const volatile (*(*hydra)(int (*)(void), char * const * restrict))[13]) (unsigned long, char * const [static 3]);
declare hydra as pointer to function (pointer to function (void) returning integer, restricted pointer to constant pointer to character) returning pointer to array 13 of constant volatile pointer to function (unsigned long integer, non-empty array 3 of constant pointer to character) returning pointer to character
cdecl> declare fp as pointer to function (pointer to char) returning pointer to array of pointer to char
char* (*(*fp)(char*))[];