<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Евгений Степанищев</title>
<link>https://bolknote.ru/</link>
<description>Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.5 (v4199)</generator>

<itunes:subtitle>Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Книги: Урсула Крёбер Ле Гуин</title>
<guid isPermaLink="false">7775</guid>
<link>https://bolknote.ru/all/knigi-ursula-kryober-le-guin/</link>
<pubDate>Tue, 09 Jun 2026 15:18:17 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/knigi-ursula-kryober-le-guin/</comments>
<description>
&lt;p&gt;Открыл для себя книги писательницы Урсулы Крёбер Ле Гуин. Возможно, не в первый раз. Я прочитал за жизнь столько фантастики, что большинства книг даже не помню. Правда, если я когда-то прочитал книгу, то нередко узнаю её по какой-то части сюжета, а в случае с Урсулой — тишина. И это при том, что я прочитал уже более десятка её книг.&lt;/p&gt;
&lt;p&gt;Не сказать, что я с её творчеством совсем не сталкивался, я смотрел аниме «Сказания Земноморья» и слышал слово «Ансибл», пришедшее из её книг, но это всё. Меня это удивляет. Учитывая мою любовь к фантастике, поразительно как такая писательница прошла мимо меня.&lt;/p&gt;
&lt;p&gt;Читаю вперемешку два цикла — Хайнский и о Земноморье, не знаю какой нравится больше. Наверное всё же Хайнский, фантазия у неё такая, что можно пожелать каждому. В Земноморье немного коробит повторение из раза в раз ситуации, когда героя на краю гибели спасает какая-то случайность, несмотря на все его выдающиеся способности. Мне бы больше подошло, если бы герой в таких ситуациях чаще выживал за счёт того, что он умеет.&lt;/p&gt;
&lt;p&gt;Несмотря на это, буду читать её целиком, как Желязны когда-то, плохих книг я у неё пока не обнаружил.&lt;/p&gt;
</description>
</item>

<item>
<title>«МК-Про»: ЯП высокого уровня для «МК-61»</title>
<guid isPermaLink="false">7774</guid>
<link>https://bolknote.ru/all/mk-pro-yap-urovnya-dlya-mk-61/</link>
<pubDate>Mon, 08 Jun 2026 03:20:50 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/mk-pro-yap-urovnya-dlya-mk-61/</comments>
<description>
&lt;p&gt;Язык высокого уровня для программируемого калькулятора «Электроника МК-61», который я &lt;a href="https://bolknote.ru/all/yazyk-vysokogo-urovnya-dlya-mk-61/"&gt;начал писать&lt;/a&gt; с нейросетью, теперь называется «МК-Про». Надо же его как-то называть.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.06.08@2x.webp" width="1000" height="627" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Вообще, начал я его писать, потому что меня спросили, не знаю ли я какую-то задачу, с которой сегодняшние нейросети не справятся. Не то чтобы я ожидал, что совсем ничего не выйдет, но думал, что хорошо, пожалуй, не получится. Задача — сделать язык программирования, который будет транслироваться в код, которому доступно всего 105 ячеек, — мне показалась достаточно сложной.&lt;/p&gt;
&lt;p&gt;Справедливости ради, хорошо, пожалуй, ещё не вышло, мы только на пути к этому, хотя я верю, что может получиться. Тот вариант, &lt;a href="https://github.com/bolknote/MKPro"&gt;который сейчас уже есть&lt;/a&gt;, я оцениваю где-то на три с плюсом. Последние несколько дней нейросеть занята самой, наверное, сложной оптимизацией, которая только есть, — использованием регистра &lt;tt&gt;X2&lt;/tt&gt; в калькуляторе.&lt;/p&gt;
&lt;p&gt;На скриншоте видна очередная сессия, которая, как можно заметить длится без перерыва уже более тридцати часов и до конца ещё очень далеко — неделя или около того. Чтобы сеть не прерывалась, я выставил так называемую «цель», её видно на скриншоте.&lt;/p&gt;
&lt;p&gt;105 байт памяти, стек и пятнадцать официально доступных регистров вынуждают использовать самые нетривиальные хаки. Их очень много: если начать рассказывать, я буду писать только о них. Самый нетривиальный, как оказалось, — хак с использованием регистра &lt;tt&gt;X2&lt;/tt&gt;. Это недокументированная возможность, поэтому её использование не очень распространено.&lt;/p&gt;
&lt;p&gt;Это не вполне регистр, скорее техническая ячейка для хранения копии экрана, но в программном режиме она обрастает некоторым количеством багов — их вообще в этом калькуляторе полно, — что позволяет использовать её в некоторых случаях как ещё один регистр. В основном — для хранения промежуточных значений.&lt;/p&gt;
&lt;p&gt;Я собрал очень много готовых программ — почти восемь сотен, и в самых плотно упакованных все регистры уже заняты. Выгрузить их тоже некуда: памяти, напоминаю, очень мало — сотня байт, поэтому &lt;tt&gt;X2&lt;/tt&gt; там очень даже к месту.&lt;/p&gt;
&lt;p&gt;Интересно, насколько хорошо будет работать оптимизация, когда нейросетка её доделает. Хотя мы всё обвешиваем тестами, промежуточный результат пока ничего не даёт, кроме расхода токенов: оптимизацию можно будет полноценно включить только в самом конце. Очень жду завершения этого этапа: так долго подпинывать нейросеть без промежуточного результата — скучновато.&lt;/p&gt;
</description>
</item>

<item>
<title>Чем кончилась история с «Телеграмом»?</title>
<guid isPermaLink="false">7773</guid>
<link>https://bolknote.ru/all/chem-konchilas-istoriya-s-telegramom/</link>
<pubDate>Sun, 07 Jun 2026 16:42:48 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/chem-konchilas-istoriya-s-telegramom/</comments>
<description>
&lt;p&gt;Всем, наверное, интересно, чем же кончилась моя история со &lt;a href="https://bolknote.ru/all/sluchayno-udalil-akkaunt-v-telegrame/"&gt;случайным удалением аккаунта&lt;/a&gt; в «Телеграме». Кончилась тем, что я прошёл через все стадии принятия и зарегистрировал новый аккаунт на тот же номер.&lt;/p&gt;
&lt;p&gt;Техподдержка не ответила ни на одно из двух моих писем, да я и не ждал, поэтому, как только получилось зарегистрироваться заново, я это сделал. Не получалось несколько часов — мне должен был позвонить бот и продиктовать код, но он всё никак не звонил.&lt;/p&gt;
&lt;p&gt;Канал в «Телеграме», где я дублирую этот сайт, естественно, тоже пришлось создать заново, так что &lt;a href="https://t.me/bolknote_ru"&gt;заходите&lt;/a&gt;, кому удобнее читать меня там.&lt;/p&gt;
</description>
</item>

<item>
<title>Спортинвентарь в отелях</title>
<guid isPermaLink="false">7772</guid>
<link>https://bolknote.ru/all/sportinventar-v-otelyah/</link>
<pubDate>Sat, 06 Jun 2026 12:57:13 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/sportinventar-v-otelyah/</comments>
<description>
&lt;p&gt;В отелях меня каждый раз удивляет наплевательское отношение к спортивному инвентарю. Особенно почему-то это заметно на примере ракеток для пинг-понга. Это уже просто какое-то правило: даже в самых хороших отелях ракетки для пинг-понга ободранные и облупленные.&lt;/p&gt;
&lt;p&gt;В этот раз меня это так возмутило, что я пошёл к сотрудникам, и они выдали мне совершенно новые ракетки, которые я после игры оставил рядом со старыми. Надо ли говорить, что сегодня драные ракетки лежали там же, где обычно, а новые, видимо, сотрудники опять куда-то утащили.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.06.06@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Попробовал «Кодекс»</title>
<guid isPermaLink="false">7771</guid>
<link>https://bolknote.ru/all/poproboval-kodeks/</link>
<pubDate>Fri, 05 Jun 2026 06:39:19 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/poproboval-kodeks/</comments>
<description>
&lt;p&gt;Так исторически сложилось, что серьёзно программировать с нейросетями я начал с «Курсора». До сих пор его использую, и планов куда-то переходить у меня не появлялось.&lt;/p&gt;
&lt;p&gt;«Курсор» — специализированная среда разработки, заточенная под работу с нейросетями. В ней есть очень много специальных костыликов, позволяющих нейросети делать свою работу. Такие среды дают огромный прирост по сравнению с копированием кода из окна нейросети — тем, с чего мы все начинали.&lt;/p&gt;
&lt;p&gt;Недавно братишка уговорил меня попробовать «Кодекс» — конкурирующую среду разработки, которую делает компания «Оупен-Эй-Ай». Аргумент он привёл очень убедительный — стоимость.&lt;/p&gt;
&lt;p&gt;Не обманул: позже я убедился, что в рамках подписки за двести долларов можно работать почти с любой интенсивностью. Там, где в «Курсоре» легко тратились двести долларов в день, тут я, заплатив один раз, больше ничего не плачу́.&lt;/p&gt;
&lt;p&gt;Объяснение простое: «Курсор» в основном перепродаёт токены чужих нейросетей, зарабатывая на разнице, а «Кодекс» продаёт токены нейросетей той компании, которая его делает.&lt;/p&gt;
&lt;p&gt;При этом с «Курсором» мне работать приятнее. Не из-за эффекта утёнка, а из-за двух вещей, которые в «Кодексе» сделаны плохо.&lt;/p&gt;
&lt;p&gt;Во-первых, «Кодекс» очень плохо сжимает контекст. Наверное, все знают, что у нейросетей есть так называемое «контекстное окно» — что-то вроде кратковременной памяти, где хранится ваш текущий разговор. И «Курсор», и «Кодекс» умеют заставлять сеть пересказывать себе ваш текущий разговор в более краткой форме, чтобы высвободить часть контекстного окна, когда оно приближается к пределу, но у «Кодекса» это получается плохо.&lt;/p&gt;
&lt;p&gt;Я часто вижу, как «Кодекс» принимает часть моих указаний, на которые он уже отвечал, за сигнал к действию и начинает выполнять задачи, которыми уже занимался. В «Курсоре» я такого не видел ни разу.&lt;/p&gt;
&lt;p&gt;Во-вторых, «Кодекс» плохо работает с планами. В «Курсоре» я частенько ставил большую задачу, он писал очень подробный план, показывал мне его, разбивал задачу на более мелкие, а потом очень долго воплощал план в жизнь, не останавливаясь, пока не доведёт дело до конца.&lt;/p&gt;
&lt;p&gt;У «Кодекса» есть режим планирования, но развёрнутые планы он не пишет, а тем планам, которые пишет, не всегда следует. Он может без видимой причины остановиться, не доделав задачу; в этом случае мне приходится его подпинывать словами «делай дальше» или «продолжай».&lt;/p&gt;
&lt;p&gt;В отпуске я очень много использую «Кодекс» — каждый день для развлечения пишу &lt;a href="https://bolknote.ru/all/yazyk-vysokogo-urovnya-dlya-mk-61/"&gt;язык высокого уровня&lt;/a&gt; для калькулятора «Электроника МК-61», и у меня постоянно в стеке команд вереница фраз «делай дальше и коммить». Они подставляются по одной, когда сеть останавливается.&lt;/p&gt;
&lt;p&gt;Выводы.&lt;/p&gt;
&lt;p&gt;«Кодекс» я и дальше планирую использовать для своих собственных задач. Всё-таки возможность тратить меньше денег на хобби — существенный плюс, даже с учётом возрастающих затрат на управление. К счастью, возрастают они несущественно.&lt;/p&gt;
&lt;p&gt;Бюджет «Курсора» буду тратить на работе. Во-первых, это позволит мне программировать для себя и компании в один и тот же день: раньше я разделял их, чтобы чётче понимать, сколько денег мне надо вернуть; во-вторых, затраты на управление для меня дороже в рабочее время, у меня очень высокая загрузка, и всё время дёргаться и смотреть, что там сделала сеть, для меня не вариант.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.06.05@2x.webp" width="1000" height="627" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Случайно удалил аккаунт в «Телеграме»</title>
<guid isPermaLink="false">7770</guid>
<link>https://bolknote.ru/all/sluchayno-udalil-akkaunt-v-telegrame/</link>
<pubDate>Thu, 04 Jun 2026 04:37:26 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/sluchayno-udalil-akkaunt-v-telegrame/</comments>
<description>
&lt;p&gt;Никогда бы не поверил, что такое в принципе бывает и тем более что это случится со мной. Случайно удалил свой аккаунт в «Телеграме»: сказался сильный недосып из-за совпадения нескольких факторов. Как следствие, поторопился, невнимательно прочитал, что написано в интерфейсе на сайте, и удалил. Удалилось всё — история переписки с друзьями, рабочие чаты и группы. Восстановить, как я понимаю, нельзя. Пока сижу в полном раздрае, не могу поверить, что я своими руками это сделал.&lt;/p&gt;
&lt;p&gt;Я ещё не ожидал, что такое опасное действие ничем особо не защищено — никаких тебе дополнительных подтверждений или чего-то такого. Видимо, поэтому, особо не раздумывая, нажал на эту ссылку на сайте.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Дополнил подробностями:&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Вчера очень поздно вернулись с экскурсии, на ужин в отеле, понятное дело, не успели. Пока искали, где можно поесть, прошло ещё сколько-то времени. Уснул я сильно за полночь, не знаю точно, во сколько.&lt;/p&gt;
&lt;p&gt;Утром, часов в шесть, какого-то чёрта в номер позвонили, чтобы убраться, да ещё настойчиво, два раза. Я вскочил, но даже открывать не стал, включил «Не беспокоить», но из-за злости на то, что разбудили так рано, уже не смог заснуть.&lt;/p&gt;
&lt;p&gt;Решил заняться чем-то полезным. Попытался дописать небольшое приложение для «Телеграма», но понял, что голова не работает. Зачем-то решил удалить на сайте «Телеграма» ключ разработчика, пытался найти, где это, нашёл единственную кнопку с подходящей надписью, нажал — и вот так просто удалил себе аккаунт.&lt;/p&gt;
&lt;p&gt;Написал в поддержку, но, думаю, пользы мало.&lt;/p&gt;
&lt;p&gt;Пытаюсь хотя бы восстановить аккаунт, пока мои друзья не проснулись и не забеспокоились, но, похоже, подтверждающие звонки в роуминг на российский номер не проходят, не получается.&lt;/p&gt;
&lt;p&gt;Даже описать не могу насколько я расстроен этим случаем.&lt;/p&gt;
</description>
</item>

<item>
<title>Хаки в «Электронике МК-61»</title>
<guid isPermaLink="false">7769</guid>
<link>https://bolknote.ru/all/haki-v-elektronike-mk-61/</link>
<pubDate>Mon, 01 Jun 2026 07:02:56 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/haki-v-elektronike-mk-61/</comments>
<description>
&lt;p&gt;Очень интересно разбирать хаки, которые разные люди изобретали, чтобы уместить свои программы в 105 байт памяти калькулятора «Электроники МК-61». Их там действительно просто нереальное количество, они разной сложности, но один из них показателен в своей простоте.&lt;/p&gt;
&lt;p&gt;В коде программы «&lt;a href="https://lordbss.narod.ru/pmk53.html"&gt;Рембо-III&lt;/a&gt;» есть несколько похожих мест (я буду приводить код на языке «&lt;a href="https://github.com/bolknote/MKPro"&gt;МК-Про&lt;/a&gt;» для наглядности):&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="python"&gt;fn lost() {
  halt(&amp;quot;ЕГГОГ&amp;quot;)
}

fn front_stop() {
    …
    if cells[7] &amp;lt; 0 {
      lost()
    }
    …
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если некое проверяемое значение меньше нуля (в двух остальных местах — меньше или равно нулю), то пишем на экране «ЕГГОГ» — слово «&lt;i&gt;error&lt;/i&gt;», это одно из немногих слов, которое калькулятор способен отобразить, так как у него есть специальная логика для отображения некоторых букв, поэтому его часто используют для обозначения проигрыша.&lt;/p&gt;
&lt;p&gt;Мой оптимизатор умеет заменять &lt;tt&gt;halt(&amp;quot;ЕГГОГ&amp;quot;)&lt;/tt&gt; одним опкодом, потому что это «встроенное» в калькулятор слово, но тут он пишет относительно много кода — проверка условия и вызов, тогда как проверку и вывод «еррора» можно объединить в один опкод — &lt;tt&gt;F √&lt;/tt&gt; или &lt;tt&gt;F lg&lt;/tt&gt; в зависимости от условия.&lt;/p&gt;
&lt;p&gt;Если число строго меньше нуля, квадратный корень из него даст ту же ошибку, как и логарифм от числа, которое меньше или равно нулю.&lt;/p&gt;
&lt;p&gt;В «Рембо-III» это сокращает программу на четыре байта. Это существенно, когда у доступно так мало памяти.&lt;/p&gt;
</description>
</item>

<item>
<title>Людно во Вьетнаме</title>
<guid isPermaLink="false">7768</guid>
<link>https://bolknote.ru/all/lyudno-vo-vyetname/</link>
<pubDate>Sun, 31 May 2026 16:47:25 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/lyudno-vo-vyetname/</comments>
<description>
&lt;p&gt;Мы во Вьетнаме в третий раз. Тут всегда было людно, но сейчас особенно. Гиды говорят, что из-за событий в Эмиратах сюда хлынул весь поток туристов, который не поехал туда. Говорят, Вьетнам к такому наплыву оказался не готов.&lt;/p&gt;
&lt;p&gt;В связи с этим наш огромный отель битком. Некоторых даже не поселили в их номера из-за овербукинга. На отельной встрече такие люди были даже в небольшой группе тех, кто прилетел позавчера вместе с нами в тот же отель.&lt;/p&gt;
&lt;p&gt;Погода в этот сезон сошла с ума: вдруг начались дожди, хотя для этой местности это необычно в конце мая. Одно радует — всегда тепло и иногда выходит солнышко. Говорят, прогнозу тут верить не надо. И это радует, потому что в прогнозе ничего хорошего.&lt;/p&gt;
&lt;p&gt;Зато-о-о, зато! Прошла голова. Я только на второй день понял, что она у меня не болит. Видимо, действительно сказывался сильный стресс на работе в последнее время.&lt;/p&gt;
&lt;p&gt;Развлекаюсь написанием &lt;a href="https://bolknote.ru/all/yazyk-vysokogo-urovnya-dlya-mk-61/"&gt;транслятора&lt;/a&gt;. Сложная задача, мне очень нравится придумывать всякие оптимизации, а нейросетка быстро их пробует — ничем не ограниченный полёт фантазии, очень здо́рово!&lt;/p&gt;
&lt;p&gt;Записались на пару экскурсий. Тут всё самое интересное далеко, так что выбрали то, что поближе: обезьяны, аквапарк, аттракционы, плавание в маске — достаточно традиционно. Ну и конечно, несмотря на дождь, всё же тут тепло, беззаботно, рядом море, бассейны и очень вкусно кормят.&lt;/p&gt;
&lt;p&gt;Надеюсь прийти в норму.&lt;/p&gt;
</description>
</item>

<item>
<title>Язык высокого уровня для «МК-61»</title>
<guid isPermaLink="false">7767</guid>
<link>https://bolknote.ru/all/yazyk-vysokogo-urovnya-dlya-mk-61/</link>
<pubDate>Sun, 31 May 2026 11:48:09 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/yazyk-vysokogo-urovnya-dlya-mk-61/</comments>
<description>
&lt;p&gt;Я тут довольно большой проект начал — язык высокого уровня для программируемого калькулятора «Электроника МК-61». В прошлом я с ним немного сталкивался и даже писал десять лет назад «Песню о пиве» &lt;a href="https://bolknote.ru/all/4418/"&gt;для него&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Программирую вайбкодингом, разумеется, лучшими нейросетями из доступных — «Опусом 4.8» и «ГПТ 5.5». Вручную это проект на годы, без сеток я бы его даже не начинал.&lt;/p&gt;
&lt;p&gt;Основная сложность — скромные возможности. На программу выделено всего 105 &lt;i&gt;байт&lt;/i&gt; и несколько регистров, которыми можно оперировать, поэтому все лучшие программы написаны просто с &lt;a href="https://sergeanvarov.github.io/russian/mk61/Недокументированные%20возможности%20ПМК%20МК-61.html"&gt;нереальным количеством хаков&lt;/a&gt;, использующих как универсальные вещи (вроде возвратно-ориентированного программирования), так и специфические вещи, основанные на аппаратных особенностях и багах и багах калькулятора.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.31@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Калькулятор «Электроника МК-61» по версии сети «Нанабанана-2»&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ядро языка уже давно написано и даже пережило несколько рефакторингов, но до конца ещё далеко. Я перевёл на него несколько существующих кодовых бриллиантов, чтобы разобраться с применёнными там приёмами оптимизации и моему транслятору до таких вершин ещё далеко.&lt;/p&gt;
&lt;p&gt;Сейчас я, например, разбираюсь с упаковкой нескольких переменных в один регистр. Идея простая, но позволяет иногда экономить очень много: если у нас есть три переменные и каждая принимает значение от нуля до десяти, то можно хранить их в одном регистре поразрядно от «00.0» до «99.9».&lt;/p&gt;
&lt;p&gt;Так, например, переписывается в текущем синтаксисе игра «&lt;a href="https://monatkodenis.blogspot.com/2014/01/blog-post.html"&gt;Охота на лис&lt;/a&gt;» из блога Дениса Монатко:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="python"&gt;program FoxHuntMK61 {
  field: board(0..9, 0..9)

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

  loop {
    cell = read()

    if cell in foxes {
      found_fox()
    }

    scan_from_cell()
    show(&amp;quot;--&amp;quot;, cell:02, &amp;quot;--&amp;quot;, bearing)
  }

  fn found_fox() {
    show(-20)
  }

  fn scan_from_cell() {
    bearing = line_count(foxes, cell)
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Это один из более чем двадцати примеров, где оптимизатор справляется лучше или на уровне опытного программиста на этом калькуляторе.&lt;/p&gt;
</description>
</item>

<item>
<title>Отпуск начался</title>
<guid isPermaLink="false">7766</guid>
<link>https://bolknote.ru/all/otpusk-nachalsya/</link>
<pubDate>Sat, 30 May 2026 06:21:20 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/otpusk-nachalsya/</comments>
<description>
&lt;p&gt;Ну всё, дожил до отпуска. Осталось его пережить.&lt;/p&gt;
&lt;p&gt;Вылетали из России вечером, прилетели во Вьетнам утром, но вьетнамским утром, по России мы прибыли в два часа ночи. Сидели мы на местах с увеличенным пространством для ног, что в моём случае оказалось минусом — я очень плохо сплю в самолётах, как правило упираюсь лбом в следующее сиденье и дремлю, а тут этого сиденья впереди просто не было.&lt;/p&gt;
&lt;p&gt;Во Вьетнаме пасмурно и дождь. Такое мы видели и на родине. Правда, тепло — около 30°, в Казани сейчас, наверное, вдвое холоднее.&lt;/p&gt;
&lt;p&gt;Очень хочется спать, но негде — номер ещё не готов.&lt;/p&gt;
</description>
</item>

<item>
<title>ИИ и системное администрирование</title>
<guid isPermaLink="false">7765</guid>
<link>https://bolknote.ru/all/ii-i-sistemnoe-administrirovanie/</link>
<pubDate>Tue, 26 May 2026 18:28:07 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/ii-i-sistemnoe-administrirovanie/</comments>
<description>
&lt;p&gt;Вокруг программирования с помощью нейросетей так много шума, что кажется, будто остальные айтишные профессии остаются в стороне: будто в их жизни ничего не меняется и не поменяется.&lt;/p&gt;
&lt;p&gt;Разумеется, это не так. Я уже &lt;a href="https://bolknote.ru/all/ii-a-gde-zhe-kolenka/"&gt;как-то описывал&lt;/a&gt; случай, когда полторы-две недели занимался решением одной практической задачи: нужно было устанавливать и запускать на нескольких серверах мой пучок скриптов на Пайтоне для проверки различных гипотез.&lt;/p&gt;
&lt;p&gt;Тогда я обошёлся без автоматизации — просто потому, что нейросеть выполняла мои хотелки с такой скоростью, что автоматизация оказалась мне не нужна. Тем более что в нестандартных ситуациях я не ограничен интерфейсом выбранного решения: в моём распоряжении голая командная строка, пиши что хочешь.&lt;/p&gt;
&lt;p&gt;Выглядит это не очень промышленно, но не надо думать, что никто не исследует тему того, каким образом можно было бы хотя бы частично заменить системного администратора искусственным интеллектом.&lt;/p&gt;
&lt;p&gt;На скриншоте — одна из первых ласточек: Линукс от «Селектела» со встроенным «системным администратором»; в его качестве выступает нейросеть «Квен 3.5» с весьма скромными по нынешним временам характеристиками. Она превращает задачу пользователя в команды в консоли сервера.&lt;/p&gt;
&lt;p&gt;Интерфейс пока аскетичный, но и задачи полностью заменить администратора пока нет: каждая команда требует анализа специалистом и подтверждения. В таком режиме от администратора не требуется знать хитрые ключи командной строки или нетривиальную последовательность действий — всё это за него уже может делать машина.&lt;/p&gt;
&lt;p&gt;У нас один из сотрудников, занимающихся системным администрированием, в настоящий момент гоняет это решение на изолированной виртуалке. Не для рабочих задач, разумеется, а чтобы понять, куда ветер дует.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.26@2x.webp" width="1000" height="646" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Книги: «Космонавт — мотоциклетный мастер»</title>
<guid isPermaLink="false">7764</guid>
<link>https://bolknote.ru/all/knigi-kosmonavt-motocikletny-master/</link>
<pubDate>Sat, 23 May 2026 15:21:07 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/knigi-kosmonavt-motocikletny-master/</comments>
<description>
&lt;p&gt;У меня есть немного странная особенность: есть ряд книг и фильмов, которые я смотрел в детстве и которые мне страсть как хочется разыскать. Как правило, я помню там одну-две сцены или какой-то момент, что благодаря нейросетям позволило мне со временем пройти почти весь список фильмов.&lt;/p&gt;
&lt;p&gt;А вот книги поддаются нейросетям хуже: кажется, я так и не смог найти ни одной книжки с их помощью. Но тут спасибо читателям: один из них &lt;a href="https://bolknote.ru/all/ohota-na-robotov-1984/#comment-3"&gt;помог расколоть&lt;/a&gt; один из самых крепких орешков — книгу «Космонавт — мотоциклетный мастер».&lt;/p&gt;
&lt;p&gt;Книжку я купил, получил и с удовольствием прочитал дочке. Я почему-то не ожидал, что ей понравится, но она осталась в полном восторге.&lt;/p&gt;
&lt;p&gt;Удивительно, что я помню куда больше, чем ожидал: вспомнились почти все иллюстрации и довольно большая часть рассказов. Надо же, столько времени прошло, а это всё ещё в какой-то степени хранится в моей памяти.&lt;/p&gt;
&lt;p&gt;После полного прочтения выяснилась немного печальная штука: я думал, что один из рассказов, которые я помню, должен оказаться в этой книге, но, как оказалось, я искал не одну книгу, а две.&lt;/p&gt;
&lt;p&gt;Книжка детская, а рассказ был о том, что не всегда нужно говорить правду. Я помню, что папа объясняет это ребёнку на следующем примере. Когда мама была беременная, она не всегда была красивая. Но когда она спрашивала папу красивая ли она, папа иногда говорил ей неправду.&lt;/p&gt;
&lt;p&gt;В общем, теперь ищу эту книгу. Может быть кто-то из читателей её читал и вспомнит, либо какая-нибудь нейросеть мне со временем поможет.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.23.1@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.23.2@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Дочка и соревнования</title>
<guid isPermaLink="false">7763</guid>
<link>https://bolknote.ru/all/dochka-i-sorevnovaniya/</link>
<pubDate>Fri, 22 May 2026 19:08:31 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/dochka-i-sorevnovaniya/</comments>
<description>
&lt;p&gt;У дочки на этой неделе расстройство — в первый раз пришла на соревнованиях по плаванию первой, но медаль не дали. Плыла два раза, двумя стилями — на спине и кролем. На спине заняла второе место, а кролем пришла первой, но оказалось, что заплыв был разбит на два, и она в тройку не вошла.&lt;/p&gt;
&lt;p&gt;Зато проплыла на разряд, но и тут фиаско — в этот раз не было каких-то нужных судей, которые имеют право присваивать разряд, и разряд тоже не дали.&lt;/p&gt;
&lt;p&gt;Горько поплакала, даже поход в любимый ресторан не до конца скрасил день. На следующий день обиды уже забылись, но я что-то эту ситуацию отпустить пока не могу: мне было плохо от её слёз и я до сих пор переживаю. Понимаю, что это тоже важный жизненный урок, но как-то от этого не легче.&lt;/p&gt;
&lt;p&gt;Но были на этой неделе и радостные события.&lt;/p&gt;
&lt;p&gt;Во-первых, дочка сдала экзамен на десятый кю по айкидо. Она только недавно начала заниматься, это её первый пояс. Во-вторых, фактически закончила третий класс. Нам уже неофициально дали её табель — вышла ударницей. Очень переживала, что не перейдёт в следующий класс. Где её так напугали — непонятно.&lt;/p&gt;
&lt;p&gt;Учёба кончится, улетим в отпуск. Я уже живу только этой идеей. Голова нескончаемо болит каждый день уже которую неделю. Надеюсь, от стресса, а не от чего-то более серьёзного. Болит не очень сильно, но зато постоянно.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.22@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Дочкина медаль и художественный беспорядок на её столе&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Программирование на двух GPU</title>
<guid isPermaLink="false">7762</guid>
<link>https://bolknote.ru/all/programmirovanie-na-dvuh-gpu/</link>
<pubDate>Thu, 21 May 2026 19:59:06 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/programmirovanie-na-dvuh-gpu/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.21.1@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Две карты &lt;i&gt;Nvidia H100&lt;/i&gt;, вынутые из нашего сервера&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;На этой неделе мы наконец получили &lt;i&gt;NVLink&lt;/i&gt;, чтобы связать наши два видеоускорителя собственной шиной. Это нужно, чтобы запускать модели большего размера, занимающие обе карты: на шине общего назначения скорости не те, и модели еле ворочаются.&lt;/p&gt;
&lt;p&gt;Развернуть и потрогать пока успели только две модели:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;deepseek-ai/DeepSeek-V4-Flash&lt;/li&gt;
&lt;li&gt;QuantTrio/MiniMax-M2.7-AWQ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Обе модели урезанные, разумеется, но даже так они еле умещаются на картах, параллельность никакая. Эти модели должны быть мощнее, чем те, которые &lt;a href="https://bolknote.ru/all/programmirovanie-na-odnoy-gpu/"&gt;удалось запустить&lt;/a&gt; на одной карте; по крайней мере, синтетика даёт ожидаемые результаты, но на практике не всё так однозначно.&lt;/p&gt;
&lt;p&gt;Ребятам больше всех пока понравился «Квен-Кодер» из предыдущего эксперимента, хотя я уверен, что они ещё просто не распробовали новые модели.&lt;/p&gt;
&lt;p&gt;Надо понимать, что серьёзным облачным моделям эти модели в подмётки не годятся: они мощнее примерно на порядок, и оборудование, которое позволяет их запустить, стоит совершенно других денег.&lt;/p&gt;
&lt;p&gt;Для серьёзного программирования такие локальные модели непригодны, но в каких-то вещах их приспособить всё же удаётся. Сейчас мы заняты тем, что пытаемся очертить для себя круг задач, где они облегчают, а не усложняют жизнь. Поделиться мне пока ещё нечем, так как эксперименты в самом разгаре.&lt;/p&gt;
</description>
</item>

<item>
<title>Manchester Baby: что за компьютер</title>
<guid isPermaLink="false">7761</guid>
<link>https://bolknote.ru/all/manchester-baby-chto-za-kompyuter/</link>
<pubDate>Thu, 21 May 2026 09:02:15 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/manchester-baby-chto-za-kompyuter/</comments>
<description>
&lt;p&gt;Вчера &lt;a href="https://bolknote.ru/all/manchester-baby/"&gt;я писал&lt;/a&gt; про Манчестерскую малую экспериментальную машину по прозвищу «Малышка», но не написал, что этот компьютер из себя представлял.&lt;/p&gt;
&lt;p&gt;Если бы вы встретили его в какой-то из комнат какого-нибудь заброшенного НИИ, вряд ли поняли бы, что это компьютер: несмотря на свои не впечатляющие сейчас характеристики (память — 32 32-битных слова, производительность — 830 инструкций в секунду), он занимал несколько шкафов и весил одну тонну.&lt;/p&gt;
&lt;p&gt;Машина была разработана в качестве исследовательского прототипа для проверки концепции цифровой памяти с использованием электронно-лучевой трубки, вероятно, поэтому в рабочем состоянии не сохранилась, но в Музее науки и промышленности в Манчестере есть работающая копия.&lt;/p&gt;
&lt;p&gt;Машина запустила первую в мире сохранённую программу примерно в 11:00 утра в понедельник, 21 июня 1948 года. Программа вычисляла наибольший собственный делитель числа 2&lt;sup&gt;18&lt;/sup&gt;, перебирая все числа от 2&lt;sup&gt;18&lt;/sup&gt; в обратном порядке.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.curation.cs.manchester.ac.uk/computer50/www.computer50.org/mark1/firstprog.html"&gt;Программа&lt;/a&gt; состояла из семнадцати инструкций и выполнялась около 52 минут, пока не выдала правильный ответ — 131 072. За это время компьютер выполнил около 3,5 миллиона операций.&lt;/p&gt;
&lt;p&gt;Машина использовала четыре электронно-лучевые трубки — три в качестве памяти и одну для отображения. Трубка отображения могла показать содержимое одной из трёх областей памяти — основную, аккумулятор «А» и трубку управления, где хранились адрес текущей команды и сама выполняемая инструкция.&lt;/p&gt;
&lt;p&gt;Назначение почти всех трубок самоочевидно, а «аккумулятор» должен быть знаком каждому, кто знает слово «ассемблер».&lt;/p&gt;
&lt;p&gt;Ввод был устроен тоже просто: 32 кнопки, позволяющие выставить 32 бита в текущем слове, кнопки прохода по памяти, «запуск», переключение режима дисплея и так далее.&lt;/p&gt;
&lt;p&gt;Таким образом оператор последовательно передвигался по всем необходимым ячейкам памяти, вводя переключателями 32 бита в нужную ячейку, — так осуществлялся ввод программы.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.21@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="https://hoc.lgfl.org.uk/s2_manchester_baby.html"&gt;Реплика&lt;/a&gt; Манчестерской малой экспериментальной машины&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Manchester Baby</title>
<guid isPermaLink="false">7760</guid>
<link>https://bolknote.ru/all/manchester-baby/</link>
<pubDate>Wed, 20 May 2026 22:35:57 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/manchester-baby/</comments>
<description>
&lt;p&gt;Мне кажется, нейросети потенциально могут породить такое явление: зачем искать и скачивать программу, если проще её написать? Когда-то мы копили всё скачанное, потому что качать было долго. Сейчас я не храню ничего, что можно скачать повторно. Вполне возможно, скоро так же будет и с программами.&lt;/p&gt;
&lt;p&gt;Я уже начал лениться. Я тут недавно писал про «&lt;a href="https://bolknote.ru/all/kompyuternaya-sheya/"&gt;компьютерную шею&lt;/a&gt;» в фильме про Швейка 1957 года, а сегодня &lt;a href="https://www.opennet.ru/opennews/art.shtml?num=65486"&gt;прочитал&lt;/a&gt; про эмулятор компьютера 1948 года — Манчестерской малой экспериментальной машины. Я о ней никогда не слышал и не то, чтобы это что-то меняло в моём восприятии фильма про Швейка, но стало интересно — что там вообще можно было на ней запрограммировать в 1948 году.&lt;/p&gt;
&lt;p&gt;Я знаю только о &lt;a href="https://bolknote.ru/all/3501/"&gt;компьютерах Конрада Цузе&lt;/a&gt; того же времени, на этом мои познания заканчиваются, но о его работе никто и не знал — война помешала, а тут что-то более мейнстримовое.&lt;/p&gt;
&lt;p&gt;Эмулятор из прочитанной мной статьи идёт в наборе с целой кучей других и обещает качаться больше недели, поэтому я нашёл другой. Я сильно не утруждался, первым мне попался экземпляр для ДОСа, но поскольку я недавно как раз запускал у себя ДОС, то решил, что он меня вполне устроит.&lt;/p&gt;
&lt;p&gt;Оказалось, что устройство ввода компьютера того времени не вполне совместимо с моим терпением, тыкаться в эмуляторе ДОСа быстро наскучило. И вот тут проявилась та лень, о которой я пишу: вместо того, чтобы поискать новый эмулятор, я просто попросил нейросеть адаптировать мне то что есть для моей операционной системы.&lt;/p&gt;
&lt;p&gt;Нейросетка справилась одной левой — я сел позаниматься своими вещами, а когда переключился обратно, у меня уже запускался &lt;a href="https://github.com/bolknote/madm-sdl2"&gt;готовый эмулятор&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.20.gif" width="640" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Программа, выводящая слово «&lt;i&gt;BOLK&lt;/i&gt;»&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Клим С.</title>
<guid isPermaLink="false">7759</guid>
<link>https://bolknote.ru/all/klim-s/</link>
<pubDate>Tue, 19 May 2026 19:52:32 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/klim-s/</comments>
<description>
&lt;p&gt;Иногда я жалею, что время ЖЖ прошло. Когда-то это была очень популярная площадка для блогов — настолько популярная, что я знал немало людей, которые ставили знак равенства между ЖЖ и блогами вообще.&lt;/p&gt;
&lt;p&gt;Жалею не из-за какой-то абстрактной ностальгии, а потому что там часто можно было встретить по-настоящему интересных людей. Они, конечно, тоже тонули в общей массе авторов, но, к счастью, ЖЖ почему-то манил оригинальных пишущих людей, и найти их там было куда проще, чем в нынешнем интернете.&lt;/p&gt;
&lt;p&gt;Именно там я познакомился со многими, с кем потом годами приятельствовал. Позже жизнь нас пораскидала, но с кем-то я вижусь до сих пор. Правда, за их творческой жизнью теперь, к сожалению, почти негде наблюдать.&lt;/p&gt;
&lt;p&gt;ЖЖ, умерев, не породил себе наследников — разве что зеркальные лабиринты площадок для микроформатов, бесконечно переотражающие одни и те же тренды в разных лицах.&lt;/p&gt;
&lt;p&gt;Одного из таких приятелей, назовём его Клим С., я вижу почти каждый день. Иногда встречаю на улице, иногда вижу из окна кабинета — он работает со мной в одном здании. Когда-то мне нравилось читать его небольшие тексты, пропитанные здоровым хармсовским безумием. Теперь читать негде, ЖЖ окуклился, но с Климом я всякий раз здороваюсь, когда вижу его на улице — он вечно куда-то спешит, передвигаясь размашистым шагом.&lt;/p&gt;
&lt;p&gt;А недавно он отпустил длинные волосы и стал мне очень сильно кого-то напоминать. Сегодня, когда я его в очередной раз увидел из окна, понял кого — персонажа игры «&lt;a href="https://en.wikipedia.org/wiki/Tir_Na_Nog_(video_game)"&gt;Тир На Ног&lt;/a&gt;» для «Спектрума», в которую очень любил играть один из моих друзей.&lt;/p&gt;
&lt;p&gt;Меня игра особо не цепляла, но мой друг, приходя в гости, частенько за неё садился. Походка того персонажа и его развивающиеся волосы, как мне кажется, здорово напоминают моего приятеля Клима С.&lt;/p&gt;
&lt;p&gt;Пользуясь доступностью нейросетей, я, пока ехал домой, накидал небольшой виджет, в котором вы можете наблюдать персонажа этой игры, так похожего на моего приятеля Клима С., большого оригинала в душе, который теперь отлично маскируется под обычного офисного работника.&lt;/p&gt;
&lt;div id="tir-nanog-widget-2121212212121" style="width:512px;height:384px;background:#DBCF01;"&gt;&lt;/div&gt;&lt;script&gt;~function(e){"use strict";const t=".tnn-root{display:flex;align-items:center;justify-content:center;box-sizing:border-box;overflow:hidden;}.tnn-root *,.tnn-root *::before,.tnn-root *::after{box-sizing:border-box;}.tnn-root .tnn-canvas{display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges;border:none;outline:none;box-shadow:none;}.tnn-root .tnn-canvas:focus,.tnn-root .tnn-canvas:focus-visible{outline:none;box-shadow:none;}",n={bg:"data:image/webp;base64,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",pathTile:"data:image/webp;base64,UklGRi4AAABXRUJQVlA4TCEAAAAvH8AAEA8QEfMfQk0jSciDofevgaxQ+92ZiOh/uJbj3hoA",walk:["data:image/webp;base64,UklGRqQAAABXRUJQVlA4TJgAAAAvK0AaEA8QEfMfwm0iSZJU0GrDuLKPOjCu76Pe48rendpQUtWeCRH9DwAXYapCt9FSrx6meOpGhqLe7jchNFHQFaFbuivTdLu6bXJTzwc0b7qmbzfppslw2/QkI1zrrjYp8qEbWUNAdpjB0Bpsdhg6jnKtmqNuNyfCplzcWkhxKkgbPTWm/JM9L802IQzCBAoOGmURfxZhAA==","data:image/webp;base64,UklGRrgAAABXRUJQVlA4TKwAAAAvN8AZEA8QEfMfwo0CunXzQKvAVxFkNejqgqz9XCVJV8Ob9ExvENH/AICLkGuZunK4KE5TWDwlabK++gqYciyoA6bK9eUu5+bQFTqmv6B8O5V76KFthKtzRKiDVaNXkRY9LjI3L1Ff0kdHkRPymwr88j8TRW5+HPKUF00ugrkZgomVvZjI6Nc1YCJg8OwXDOsQwxCRLS6gqpoHUOjmQGHqsn4BSLQJA9BrA0IC","data:image/webp;base64,UklGRrQAAABXRUJQVlA4TKgAAAAvO0AZEA8QEfMfwo1Cu3H0QK3AVxGkHfDVBWlnuUqW1qBq9GduENH/AGBN2sNm9dTHrD3mh56qkIh1q+FJmxuzPzxRT/H0XWz2Z4aKsE25cHf/cyibHv1ed7a51zTr4qhyb1dVRJd3fXqO+qQe4gZlcqgl1g9rqhI1V7VHzaN/1hBWphZZ1uQIki5iiHFAVmcO7PyZjObxAGzZdyRg+HdiAjNYZc0CgG8=","data:image/webp;base64,UklGRpoAAABXRUJQVlA4TI0AAAAvNUAZEA8QEfMfwo0iSY5U0G5Df2WFuzBfX+Ge+ErDugPt5YoXRPQ/JGkto7XOoKxloM/pmBUzecVAa+Nc5fRRGi2Di2bnuDJcfb6wK3ty6H76iT1mbo51VXlhdr9XiQOz2sX8YH3YX8uL4l6tkfU/RhblkE4+DDZQhju5TgMzGa+rUEcDN9kKKZbUGwAA","data:image/webp;base64,UklGRqwAAABXRUJQVlA4TJ8AAAAvL8AZEA8QEfMfAm4CRpIkQbkFnUrBugOVesG4+6TyuQXa50o3IUT0PwCAS9QtRb9q1u0kmnmeZ2bN4CbKLGag1nQExKbMRcFUlYiAcIcfM4Md261m1Sqfd0ao24xm7vbXm+k+zipuzLC/lVzAXySpbfadS9yYgorZavVSnPXPDpM+7tyXjWY0xsq7Tws/yM3v01fApsFkY1gDAnawCQEA","data:image/webp;base64,UklGRsIAAABXRUJQVlA4TLUAAAAvOcAZEA8QEfMfAo5Cu2GkB2oFvoogrcFXF7id3b2KIa1B1XyxN4jofwBwFs2q5v6ZybP+0FSFzio09+2GJzJh6UmiLZtkdmlNHLb2D9lMonm67Xg7ZIbzNItdKry2YcL3W1fae4uh9rmLg7jnLlCcO7qzurev5va7q7+yf1aT9dfuGvIUTSxqyTG5IS2YejiuHyOmOgnnSeEBmWHfFsB25YBvvucBPEVi4CEwB3d1DcIUQCIAAA==","data:image/webp;base64,UklGRqgAAABXRUJQVlA4TJwAAAAvOUAZEA8QEfMfwnHaSIJUUN+GSWUCWOjUGyaATaVhvwP1q77LIKL/AQAE4OOm7y/loZf0+WK42kMLw/2mFQVbQPqNwtDjniLmM7EGcv95EL4O1t+cDnyf5KRnWKqBOsPK6eoZPmGkr1frz1QOknzrE610/JWg5XhVfnX63s1qmtgbG7YXmuEC2A8NCURjYEyHLohCugYK5fADIDk=","data:image/webp;base64,UklGRpgAAABXRUJQVlA4TIsAAAAvK8AaEA8QEfMfwm0bSY7UwLgDbConXJW6cl+kcnfvLjDW1G8IEf0PSVcIolre1uIwGdQ44RcG9Uu/TpZdVXnsLG9Olzu8cLSSt84MTzX6mDU2T+7UUayw/YkLZUmxGhYM5boWXOnL0W5t8U9NNX4ln1FFE/yiwLiJZPAyrIJro60jjbRthXThBooAAA=="],front:"data:image/webp;base64,UklGRqYAAABXRUJQVlA4TJoAAAAvF4ANEA8QEfMfwmmtbW/yhu4Sha0/A+BQHRWXTIBkg95SFHUALI4ZUFUjUeBwOcj0nswQ0X+FSRswdhyDGWADIiBROFPBPYPr3zJMPccglwPjIyAnVAlIkCvhwcZgwa/Bra/c2zm+nINPcYZfh/5fPAatfgrqL2Bemz5VKJhCM4CmjaUAgRJWgkfBsIxeWB6DAtQatiXIvgZm",back:"data:image/webp;base64,UklGRqYAAABXRUJQVlA4TJkAAAAvF4ANEA8QEfMfwmmtbW/y0nH5FTZVUhfoqLhkAiQb9JaiqAMwCArFBEgUOFwOMr1nh4j+K0zagLHjGKwBP+WeSziJfZCb+GWyq5J1tVon1SIRioKALCLIEGUipk8k8gHSIZDewe0VXGNGMPsG1P8RcSjzQ5u/hPvsxUyFdpVeAj0fOwVKTtkrEQMzDuO0GqY0zA5OLPRYF2sA",push:"data:image/webp;base64,UklGRsAAAABXRUJQVlA4TLMAAAAvK8ALEA8QEfMfAk61bc+a6y+Hn95hIt0AAjpzxMTA/4OESIiLjBQDcVAVMKZ/U9AQ0f9ABN4z7PIWbDvw2Ia/Pvy04bkNN2WIsoTNw77EYjersNjsy1yal2mPlCiPdxHl1zuUL1tI25CWoZnCRQwhwiYkJ7MTu9DCa7g4cQxzfDyt8ZetEZKCTYgKFoU548lmzu1oM2KVLtockt0V1xZDOi7rdLRjOu4jusoZdeUy/h0zAAA="};function a(){if(document.getElementById("tnn-embed-styles"))return;const e=document.createElement("style");e.id="tnn-embed-styles",e.textContent=t,document.head.appendChild(e)}function i(e,t={}){a();const i="string"==typeof e?document.querySelector(e):e;if(!i)throw new Error("TirNaNog.mount: container not found");i.classList.add("tnn-root");const o=t.width??512,r=t.height??384;let A=i.querySelector("canvas.tnn-canvas");A||(A=document.createElement("canvas"),A.className="tnn-canvas",A.setAttribute("tabindex","0"),A.setAttribute("aria-label","Tír Na Nòg"),i.appendChild(A)),A.width=o,A.height=r;const f=A.getContext("2d"),d=A.width,l=A.height,m=120,c=function(e){return e?.assets||n}(t),w={walk:[],front:null,back:null,push:null};let u=null,h=null;const b=new Set,s={state:"walk",direction:1,timer:0},k={x:d/2,y:.9*l,vx:0,facing:"right",mode:"walk",frame:0,frameTimer:0};let x=0,I=0,g=!1;function p(e){const t=w.walk[0];return t&amp;&amp;e?t.height/e.height*1:1}function y(e){return new Promise((t,n)=&gt;{const a=new Image;a.onload=()=&gt;t(a),a.onerror=()=&gt;n(new Error(`Failed: ${e}`)),a.src=e})}function G(){if(!u)return{scale:1,dx:0,dy:0};const e=Math.max(d/u.width,l/u.height),t=u.width*e,n=u.height*e;return{scale:e,dx:(d-t)/2,dy:(l-n)/2,dw:t,dh:n}}function J(e){const{scale:t,dy:n}=G();return n+e*t}function j(){const e="front"===k.mode?w.front:"back"===k.mode?w.back:"push"===k.mode?w.push:w.walk[Math.floor(k.frame)%w.walk.length];if(!e)return;const t=p(e),n=e.width*t,a=e.height*t;let i=k.x-n/2;const o=k.y-a;"push"===k.mode&amp;&amp;(i="left"===k.facing?0:d-n),f.save(),"left"===k.facing?(f.translate(i+n,o),f.scale(-1,1),f.drawImage(e,0,0,n,a)):f.drawImage(e,i,o,n,a),f.restore()}function Q(){const e=(t=w.walk[0])?t.width*p(t)/2:40;var t;return{half:e,full:2*e,minX:e,maxX:d-e}}function v(e){const{minX:t,maxX:n}=Q();return Math.max(t,Math.min(n,e))}function E(e){k.facing=e&gt;0?"right":"left"}function T(e){k.frameTimer+=e,k.frameTimer&gt;.09&amp;&amp;(k.frameTimer=0,k.frame=(k.frame+1)%w.walk.length)}function L(){k.frame=0,k.frameTimer=0}function F(e){s.state="walk",s.direction=e,k.mode="walk",E(e),k.vx=e*m}function U(e){s.state="push",s.direction=e,s.timer=.8+.7*Math.random(),k.mode="push",E(e),k.vx=0,k.x=v(k.x),L()}function X(e){if(Math.random()&lt;.25)return t=e,s.state="exit",s.direction=t,k.mode="walk",E(t),void(k.vx=t*m);var t;F(-e)}function K(e){const{full:t,minX:n,maxX:a}=Q(),i=k.x&lt;=n+1,o=k.x&gt;=a-1,r=k.x&lt;-t,A=k.x&gt;d+t,f=k.x&gt;.33*d&amp;&amp;k.x&lt;.66*d;switch(s.state){case"walk":if(k.mode="walk",E(s.direction),k.x+=s.direction*m*e,T(e),f&amp;&amp;Math.random()&lt;.004){l=s.direction&gt;0?"idleBack":"idleFront",s.state=l,s.timer=1+1.5*Math.random(),k.mode="idleFront"===l?"front":"back",k.vx=0,L();break}s.direction&gt;0&amp;&amp;o?U(1):s.direction&lt;0&amp;&amp;i?U(-1):k.x=v(k.x);break;case"push":k.mode="push",E(s.direction),k.vx=0,k.x=v(k.x),s.timer-=e,s.timer&lt;=0&amp;&amp;X(s.direction);break;case"idleFront":case"idleBack":k.mode="idleFront"===s.state?"front":"back",s.timer-=e,s.timer&lt;=0&amp;&amp;F(Math.random()&lt;.5?1:-1);break;case"exit":k.mode="walk",E(s.direction),k.x+=s.direction*m*e,T(e),(s.direction&gt;0&amp;&amp;A||s.direction&lt;0&amp;&amp;r)&amp;&amp;function(e){const{full:t}=Q();s.state="enter",s.direction=e,k.x=e&gt;0?-t-80:d+t+80,k.mode="walk",E(e),k.vx=e*m}(-s.direction);break;case"enter":k.mode="walk",E(s.direction),k.x+=s.direction*m*e,T(e),k.x&gt;=n&amp;&amp;k.x&lt;=a&amp;&amp;(s.state="walk",k.x=v(k.x));break;default:F(1)}var l}function N(e){b.size&gt;0?function(e){let t=!1;const{minX:n,maxX:a}=Q(),i=k.x&lt;=n+1,o=k.x&gt;=a-1;b.has("ArrowLeft")?(k.facing="left",i?(k.vx=0,k.mode="push"):(k.vx=-120,k.mode="walk",t=!0)):b.has("ArrowRight")?(k.facing="right",o?(k.vx=0,k.mode="push"):(k.vx=m,k.mode="walk",t=!0)):b.has("ArrowUp")?(k.vx=0,k.mode="back"):b.has("ArrowDown")?(k.vx=0,k.mode="front"):(k.vx=0,k.mode="walk"),t?(k.x+=k.vx*e,T(e)):"walk"===k.mode&amp;&amp;L(),k.x=v(k.x)}(e):K(e)}function R(e){if(g)return;const t=Math.min((e-I)/1e3,.05);I=e,N(t),f.imageSmoothingEnabled=!1,function(){if(!u)return f.fillStyle="#FFFF00",void f.fillRect(0,0,d,l);const{dx:e,dy:t,dw:n,dh:a}=G();f.drawImage(u,e,t,n,a)}(),function(){if(!h)return;const e=Math.round(J(558)),{scale:t}=G(),n=Math.round(h.width*t),a=Math.round(h.height*t);for(let t=0;t&lt;d;t+=n)f.drawImage(h,t,e,n,a)}(),j(),x=requestAnimationFrame(R)}const D=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"]);function W(e){D.has(e.key)&amp;&amp;(b.add(e.key),e.preventDefault())}function C(e){D.has(e.key)&amp;&amp;(b.delete(e.key),e.preventDefault())}function V(){b.clear()}function q(){}window.addEventListener("keydown",W),window.addEventListener("keyup",C),window.addEventListener("blur",V),A.addEventListener("click",q);const z={canvas:A,getPlayerState:()=&gt;({x:k.x,mode:k.mode,facing:k.facing,ai:s.state}),destroy(){g=!0,cancelAnimationFrame(x),window.removeEventListener("keydown",W),window.removeEventListener("keyup",C),window.removeEventListener("blur",V),A.removeEventListener("click",q),b.clear()}};return async function(){u=await y(c.bg),h=await y(c.pathTile),w.walk=await Promise.all(c.walk.map(y)),[w.front,w.back,w.push]=await Promise.all([c.front,c.back,c.push].map(y)),k.y=Math.round(J(560))}().then(()=&gt;{g||(F(1),I=performance.now(),x=requestAnimationFrame(R))}).catch(e=&gt;{console.error(e),f.fillStyle="#f00",f.font="16px monospace",f.fillText("Failed to load sprites",20,40)}),z}"undefined"!=typeof window&amp;&amp;(window.TirNaNog={mount:i,version:"dev"}),a(),e.TirNaNog={mount:i,version:"embed"}}("undefined"!=typeof globalThis?globalThis:window);TirNaNog.mount("#tir-nanog-widget-2121212212121");&lt;/script&gt;
</description>
</item>

<item>
<title>Память во сне</title>
<guid isPermaLink="false">7758</guid>
<link>https://bolknote.ru/all/pamyat-vo-sne/</link>
<pubDate>Tue, 19 May 2026 07:52:51 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/pamyat-vo-sne/</comments>
<description>
&lt;p&gt;Интересная штука — серийные сны, если задуматься. Не знаю, как они официально называются, это я их так называю, но мне, как, наверное, и многим, иногда снятся сны с продолжением. Причём продолжение может присниться через несколько лет после первых серий.&lt;/p&gt;
&lt;p&gt;Сегодня мне снился сон-продолжение, где моя карьера пошла совершенно по другому пути. Например, в нём я после переезда из Москвы ещё раз пришёл поработать в «Яндекс».&lt;/p&gt;
&lt;p&gt;После пробуждения я мало что помню: сон выветрился за какие-то минуты. При этом я успел запомнить, что многие события были прямым продолжением сна, который снился мне в последний раз около десятилетия назад.&lt;/p&gt;
&lt;p&gt;Вот у меня и возник вопрос — а где, собственно, хранится память о всех этих событиях между моими снами? Для моей «дневной личности» она недостижима — просыпаясь, я почти сразу забываю о том, что произошло. Получается, что во все я действую от лица личности с каким-то другим опытом, память которой хранится отдельно от моей, да ещё и сохраняется длительное время. Попахивает шизофренией.&lt;/p&gt;
</description>
</item>

<item>
<title>Компьютерная шея</title>
<guid isPermaLink="false">7757</guid>
<link>https://bolknote.ru/all/kompyuternaya-sheya/</link>
<pubDate>Fri, 15 May 2026 20:04:03 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/kompyuternaya-sheya/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2026.05.15@2x.webp" width="1000" height="562" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Что-то мне в последнее время часто попадаются статьи с фотографиями и рисунками так называемой «компьютерной шеи» — это когда человек, подолгу работая за компьютером, якобы со временем вырабатывает привычку постоянно наклонять голову чуть вперёд.&lt;/p&gt;
&lt;p&gt;Преподносится это как «вред от этих ваших компьютеров». В 90-е все сидели за экранами от излучения монитора — до сих пор не знаю, помогали они чему-то или только портили зрение, потому что затемняли экран. Вот любопытно, какую защиту теперь придумают, чтобы помочь нашим шеям.&lt;/p&gt;
&lt;p&gt;Я тут случайно наткнулся на фильм «Бравый солдат Швейк» 1957 года, так там у кучи народу такое положение шеи. Где же они в пятидесятых годах компьютеры взяли?&lt;/p&gt;
</description>
</item>

<item>
<title>Программирование на одной GPU</title>
<guid isPermaLink="false">7756</guid>
<link>https://bolknote.ru/all/programmirovanie-na-odnoy-gpu/</link>
<pubDate>Fri, 15 May 2026 18:00:07 +0300</pubDate>
<author></author>
<comments>https://bolknote.ru/all/programmirovanie-na-odnoy-gpu/</comments>
<description>
&lt;p&gt;Интересная штука встречается очень часто. Мне сложно её принять, хотя я понимаю, почему так произошло. Для людей нейросети слились в одно большое атомарное явление. Ну, знаете, как «учёные»: «Учёные заявили…». Какие учёные? Может, там биолог про математику говорит? Многим неважно, есть ли консенсус среди учёных по этому вопросу и насколько проверены данные, на основании которых «учёные заявили».&lt;/p&gt;
&lt;p&gt;Так же и тут. Как будто бы многие считают, что нейросети одинаковые: видел одну — видел все. Разумеется, это не так. Они разные по размеру, а значит, и по способностям. У большинства есть специализация, они обучались на разных данных и обладают разным «опытом». И то, что вы можете развернуть у себя на ноутбуке, в подмётки не годится большинству из того, что есть в «облаках».&lt;/p&gt;
&lt;p&gt;Мы недавно провели эксперимент среди нейросетей для программирования, которые можно развернуть на одной &lt;i&gt;Nvidia H100&lt;/i&gt;. У неё 96 ГБ видеопамяти, и это сейчас один из самых главных критериев — размер памяти, а не мощность самой карты.&lt;/p&gt;
&lt;p&gt;Даже в этом сегменте результаты сильно различаются. Мы попробовали следующие сети:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;i&gt;openai/gpt-oss-120b&lt;/i&gt; — четыре бита на параметр&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Qwen/Qwen3-Coder-Next-FP8&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;zai-org/GLM-4.7-Flash&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Qwen/Qwen3-Coder-30B-A3B-Instruct&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;gemma-4-31B-it&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Среди этих почти одинаковых по параметрам сетей — выбивается только &lt;i&gt;OSS&lt;/i&gt; со своими 120 миллиардами параметров, но в сильно урезанном виде — есть явный и безусловный лидер: &lt;i&gt;Qwen3-Coder-Next-FP8&lt;/i&gt;. Про более крупные сети и говорить не приходится: их архитектура и данные для обучения уносят их куда дальше по способностям и аналогам знаний о предмете.&lt;/p&gt;
&lt;p&gt;Я веду к тому, что если вы попробовали что-то делать с какой-то нейросеткой и у вас плохой опыт, то дело в вас — вы неправильно подобрали себе исполнителя.&lt;/p&gt;
</description>
</item>


</channel>
</rss>
