Этот сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Позднее Ctrl + ↑

Эрудиция, ум, предприимчивость

Вряд ли стоит говорить о том, как ценен для человека ум. В конце концов, именно ум дистанцирует нас от других животных. Но ум очень сложно померить. Как быстро понять, что кто-то — умный? Тем более, что многие путают ум с другими понятиями. Например, эрудицией. Годы прошли, прежде чем я понял, что Анатолий Вассерман не умный, а эрудированный. Другой пример — ум путают с предприимчивостью. Существует даже поговорка «если ты такой умный, то почему такой бедный?».

Это потому, что люди от необходимости придумали несколько признаков, чтобы быстро определить — умный человек или нет, все они грешат неточностями, но других у нас нет. Например, мы признаём умными тех, кто хорош в науках — например, математике или физике. При этом они могут казаться откровенно тупыми в других областях. Эрудированный человек тоже кажется умным, мы привыкли к тому, что умные люди эрудированны, а исключения редки. Нам кажутся умными грамотные люди — как правило грамотность приходит с упорной работой над собой, а она развивает интеллект.

Я не буду пытаться дать определение уму или интеллекту, я хочу поговорить о другом. Мы столкнулись с новым объектом, который кажется умным, но умным не является — речь, конечно, о больших языковых моделях.

Человек оказался не готов к тому, что чат из машины хранит в своих формулах столько знаний, вычисляет некие связи между ними, так хорошо пишет тексты, что они кажутся рассуждениями, но при этом не является умным.

Некоторые мои знакомые, всерьёз обманувшись этим, навсегда (по их словам) разочаровались в больших языковых моделях, когда столкнулись с «галлюционациями» — это когда языковая модель в процессе генерации текста в некоторых местах далеко отходит от реальности, просто потому что работает так, что её задача — сгенерировать правдоподобный текст, а не рассуждать, придерживаясь фактов. Вероятности выпадения следующего слова настроены в ней так, чтобы как можно ближе быть к реальным знаниям, но и только.

Но хуже всего, что другие мои знакомые вдруг уверовали в мудрость языковых моделей и просят у них точного рецепта как поправить дела в ситуациях, которые определяют их жизнь. Я к ним не лезу, у меня нет синдрома мессии, да кажется, что они так глубоко верят, что мои слова для них куда менее весомы, чем их заблуждения. Это похоже на психотерапию, но разница огромна — психотерапевт никогда не будет делать выбор за вас, языковые модели же подобной этикой не связаны, в них нет такого понятия.

В этой связи я даже как-то стал по-другому смотреть на ксенофобов, которым всё мерещится сюжет фильмов «Терминатор», «Матрица» и других, где роботы порабощают людей. Их идеи — перегиб в другую сторону, но в среднем по больнице у нас в обществе как будто у всех взвешенное отношение к этому этапу развития искусственного интеллекта.

Анатолий Вассерман по версии нейросети ChatGPT 4 — пример эрудиции, но не ума

Природа и дети

Присматривал вчера за дочкой, которая играла на речке — строила мостик от одного островка к другому из прутиков и камней. Пока я смотрел на то как она, оступаясь, перебиралась по веткам, подумал, что не знаю как относиться к нейропсихологам, которые занимаются детьми.

Сейчас считается, что средний современный ребёнок хуже владеет своим телом, хуже его чувствует, хуже оценивает риски, чем дети моего, например, поколения, потому что ему негде вот так полазить, рискуя упасть в холодную воду, ободраться и наставить себе синяков.

Я не исследовал тему глубоко, но знаю, что проблема обсуждается, а специалисты существуют, мы и сами водили дочку к одной из них.

С одной стороны — получение опыта на природе кажется чем-то важным, особенно в плане оценки рисков. С другой стороны я помню своё детство, когда мы лазили по разрушающейся заброшенной стройке и прыгали с её третьего этажа в снег.

Один парень там сломал ногу, другой пропоролся о торчащую, как оказалось, в месте приземления арматуру, а мне упал на голову кирпич, правда это была другая стройка… Не лучше ли контролируемая среда под присмотром взрослого?

Ответа у меня нет, наверное, потому что и вопрос меня не настолько интересует. Мы дочке разрешаем взаимодействовать со средой столько, сколько она хочет, вопрос только времени и доступности среды. Это не значит, что я стану кричать на стройке «молодец, дочка, заберись повыше», но и у неё желания лезть на стройку не возникает.

Таблица умножения

Еве в школе задали выучить таблицу умножения. Пытались учить по столбикам — умножение сначала на одно число, потом на следующее и так далее. Не особо-то это работает — выученное столбиками воспроизводится потом тоже только столбиками. Надо как-то учить вразнобой, а это совсем скучно, дочка от такого быстро устаёт.

Против такого я знаю только один способ — геймификацию. Задумался что за игру можно было бы сделать, почему-то вначале мне пришло в голову, что это должно быть что-то настольно-карточное. Потом осенило — надо на Скретче написать! Мы же как раз с ним возимся!

Сделали программу, где ёжик задаёт вопросы, на неправильные ответы недовольно верещит, а на правильные — ест банан. Недавно ходили с дочкой кормить и гладить живых ёжиков, бананы они уминают за милую душу.

За правильный ответ начисляется одно очко, на неправильный — вычитается. На сто очков сделали танец ёжика под музыку.

Программировал, в основном, я, для дочки пока такое сложно — взаимодействие двух спрайтов через сообщения у неё пока в голове не укладывается, но когда она загоралась что-то несложное доделать, давал клавиатуру ей.

Оно того стоило — дочка вчера на интересе дошла до танца, хотя уже очень устала от прошлых повторений таблицы и от программирования.

Дочкин конный спорт

Из всего многообразия того, чем занималась или занимается сейчас дочка, конный спорт стоит немного особняком — несмотря на то, что тренировки проходят относительно редко — всего раз в неделю, это, тем не менее, занятие которым она увлечена уже несколько лет с перерывами только на болезнь, отпуска и каникулы вне дома.

Дочка без ума от лошадей и всегда рада занятиям конным спортом — это у неё от её мамы. Думаю, она совсем бы была не против ходить туда чаще, если бы мы нашли для этого время. У неё сейчас прекрасный возраст — есть желание и энергия пробовать себя во всём подряд. Мы это только поддерживаем, но надо оставлять и время на отдых.

Тем не менее, хотя и редкие, но регулярные занятия столько лет подряд, дают результаты. Дочка часто выступает на соревнованиях, а в прошлое воскресенье выступила в новом качестве — впервые была одна на маршруте, но заняла второе место. До этого, если не считать парного выступления с мамой, её лошадь под уздцы всегда водил тренер, дочкина же задача была в том, чтобы принимать правильную посадку.

Перед выступлением волновалась, но выступила, как по мне, шикарно. Сделала две ошибки — вместо остановки перевела лошадь на шаг и была помарка после вольта (круга) — надо было вывести лошадь позже, чтобы чётче попасть между балок препятствия.

Что происходит, когда main — переменная

Хочу провести работу над ошибками.

Вчера я писал о сбойной программе на Си с самым коротким текстом и, как оказалось, неправильно описал почему, собственно, она вызывает сбой.

Напомню, речь идёт о программе, которая состоит из одного слова — main; или int main;, если забыть о стандарте Си89. Я думал дело в том, что попытка запустить программу приходит к чтению переменной и передаче управления на адрес ноль, но один читателей попенял, что в оригинальной статье указана другая причина.

Я решил глянуть получившийся ассемблер, чтобы разобраться где же правда. Для этого удобно использовать утилиту objdump:

objdump -D -d -M intel ./small

Оказалось, что я был неправ.

Чтобы это увидеть, надо посмотреть в ассемблерном листинге код, который вызывает функцию __libc_start_main() — она передаёт управление функции main(), указатель на которую указывается в регистре rdi. Как мы видим, адрес, записываемый в этот регистр указывает на секцию .data, код в которой запрещён к запуску, именно поэтому программа и падает.

Почему именно туда? Там хранятся все переменные, в том числе переменная main, то есть используется не адрес, записанный в этой переменной, как я думал раньше, а выполнение передаётся прямо на адрес, где хранится сама переменная.

Кстати, это означает, что на оборудовании, где защиты памяти нет или при запуске в реальном режиме (например, из-под DOS), программа может и не упасть — просто начнёт выполнять какой-то мусор, в котором вполне могут попасться инструкции корректного завершения.

Маленькая сбойная программа на Си

Попалась мне тут статья про задачку, которую автору задали в университете — написать самую маленькую (по объёму текста) программу на Си, которая компилируется, но выполняется с ошибкой. Прежде чем читать, я попробовал написать такую самостоятельно.

Сначала я подумал о рекурсии:

main(){main();}

Для экономии байт можно использовать стандарт Си89, где всё, у чего нет при определении задания типа, имеет тип int — это позволяет убрать тип функции main.

Программа компилируется, но, как и задумывалось, падает с ошибкой:

bolk@note ~$ gcc-14 -std=c89 small.c && ./a.out
Segmentation fault: 11

Дальше я подумал, что вряд ли в статье используется такой очевидный способ и, перебрав в уме несколько вариантов, решил сосредоточится на делении на ноль. Лучший вариант, который мне пришёл в голову, вот такой, он на один байт меньше:

main(a){a/=0;}

Очевидная идея — поделить число на ноль и никуда не присваивать, работать не будет, компилятор просто выкинет константное выражение. Поэтому его надо или присвоить переменной или вернуть. return занимает больше присваивания, но куда бы мы могли присвоить? Нужна же переменная.

Переменную можно взять из аргументов функции main, в первый её аргумент записывается число параметров при вызове. Если ноль поделить на ноль, это ошибки не вызовет, но там всегда не ноль, потому что нулевой параметр всегда существует и содержит имя программы.

Поэтому мы можем поделить его на ноль и программа упадёт при вызове:

bolk@note ~$ gcc-14 -std=c89 -Wno-div-by-zero small.c && ./a.out
Floating point exception: 8

Но самая короткая сбойная программа оказалась почти втрое меньше. Выглядит она так:

main;

Она компилируется, хоть и с замечанием, и падает, как и требуется по условию:

bolk@note ~$ gcc-14 -std=c89 small.c && ./a.out
small.c:1:1: warning: data definition has no type or storage class
    1 | main;
      | ^~~~
Bus error: 10

Тут определяется статическая переменная main с неявным заданием типа int, которая, как все такие переменные, инициализируется нулём. Поскольку компоновщик видит имена, но ничего не знает о типах, он связывает адрес переменной с адресом точки входа в программу. Когда программа запускается, управление передаётся по адресу ноль, что вызывает ошибку.

Ошибка вызывается, кстати, потому что адрес ноль является зарезервированным значением в Си. Ноль обозначает, что указатель пустой (имеет значение NULL), поэтому при обращении к нему срабатывает специальная ловушка, вызывающая ошибку. Правда это возможно только на платформах с защитой памяти.

Добавлено: Оказалось, что я неправильно разобрался в происходящем.

Бинтуронги и лемуры

Большую часть своей жизни я прожил кошатником, но несколько лет во время очередного самокопания, внезапно понял, что теперь я собачник. Не знаю как так случилось, но на улице я скорее поглажу чью-то собаку, чем кошку. А когда-то было наоборот.

Но есть в моём сердце место и для других животных, с которыми мне было очень интересно пообщаться.

В Таиланде мне очень понравились бинтуронги. Для нас это экзотика — больше ни в одном зоопарке мира они мне не попадались. Животные очень милые и общительные, жаль только, что ночные — днём они всё-таки немного вялые.

По характеру любопытные, но очень тактичные. Не помню чем мы их там кормили, но ни разу не было такого, чтобы они сами выхватили у нас еду, как это делают обезьяны, например. Ещё у них очень сильный хвост — они даже могут на нём висеть, пока держишь их на руках, они всё время очень трогательно им за вас цепляются.

Я и бинтуронг в зоопарке Као Кео в Таиланде (2012 год)

В Китае довелось потрогать лемуров. Они более бесцеремонные, но при этом всё равно очень милые. Куда более своенравные и независимые — не могу себе представить, чтобы их можно было подержать на руках, как кошку или погладить полной ладонью. Бинтуронги на такое соглашались с полной готовностью.

Интересно, что лемуры очень неохотно подходят, если стоишь к ним лицом, может быть это для них признак агрессии, как для макак, когда им смотришь в глаза. Вот если подставить спину — почти сразу прыгают и потом с удовольствием сидят на плече, выбирая что именно ты им там даёшь в качестве корма.

Лемуры в контактном зоопарке города Хайкоу (Китай, 2025 год)

Есть животное, с которым я бы очень хотел пообщаться, но вряд ли доведётся — это красная панда. Впервые близко я её увидел в зоопарке Барселоны в 2014 году. Позже мы ещё специально дважды летали в Москву, чтобы показать её дочке, которой она тоже очень нравится. Дважды, потому что в первый раз панда так и не вышла из домика в вольере.

Единственный снимок красной панды, который я успел сделать в зоопарке Барселоны, прежде, чем у меня сел фотоаппарат (2014 год)

Принтер, MacOS и IPv6 часть вторая

К сожалению, ни отключение IPv6, ни фиксирование адреса IPv4 (ещё одна мера, которую я попробовал) не излечили полностью проблемы с принтером. Но в процессе копания в настройках, я обратил внимание, что у него очень старая прошивка — 2012 года. Подумал, может обновление решит проблему?

На сайте последняя прошивка датируется началом 2020-го, но беда в том, что программа под «МакОС», которая обновляет мою модель принтера, перестала поддерживаться много лет назад и просто не запускается (у меня — HP LaserJet Pro P1102w).

До и после обновления прошивки

Вообще это очень странно — выпускать для принтера каждой линейки свою программу для обновления прошивки, да ещё и для каждой операционной системы отдельно. Загадка для меня, почему нельзя писать более универсально — программу, которая обнаруживает подключенную модель принтера, проверяет устарела ли прошивка, качает её (или указывает где её взять), после чего обновляет.

В общем, поскольку под «МакОС» программа не работает, пришлось обновлять прошивку через «Виндоуз», благо у меня уже развёрнута виртуалка с Windows XP, которую я использую, чтобы переписывать фотографии, сделанные винтажными часами «Касио».

Поставил туда драйвер от принтера и программу для обновления прошивки. Где-то в интернете я прочитал, что прошивку следует обновлять через USB и потратил много времени, чтобы разыскать дома шнурок (в принтере используется USB-B), но оказалось, что всё происходит через вайфай.

Почему-то драйвера долго не хотели ставится, но в итоге с какой-то попытки установились. Что было не так — непонятно. После этого всё прошло без проблем — программа обновления прошивки сразу нашла принтер и за несколько минут его обновила.

Теперь остаётся наблюдать — решилась ли проблема.

Принтер, MacOS и IPv6

Я выключил IPv6 на принтере, но позже оказалось, что полностью проблема не решилась

Какое-то время назад один из домашних принтеров стал плохо работать с МакОСью — наши с женой «Макбуки» стали видеть его только после отключения от сети и включения обратно.

Я вообще привык, что в МакОСи постоянно что-то ломают, поэтому обычно просто жду, когда починят. Бывает, что ожидания не обманываются. Но тут время шло, раздражение росло, но ничего не менялось. Причём принтер нам нужен частенько и вот так с ним возиться каждый раз, когда надо печатать — очень неудобно.

Вчера решил зайти в его веб-интерфейс, подумал, вдруг замечу что-нибудь, что поможет решить проблему. Интуиция легонько звякнула, когда я увидел галочку IPv6. Решил попробовать выключить.

Похоже в ней и было дело. После этого, как я выключил этот протокол, принтер стал работать без нареканий.

Веб-интерфейс принтера я нашёл следующим образом.

Cначала запустил из командной строки сканирование сети:

$ dns-sd -B _printer._tcp
Browsing for _printer._tcp
DATE: ---Mon 28 Apr 2025---
21:09:21.373  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
21:09:21.374  Add        2  14 local.               _printer._tcp.       HP LaserJet Professional P1102w

Потом запросил информацию о найденном принтере:

$ dns-sd -L "HP LaserJet Professional P1102w" _printer._tcp local.
Lookup HP LaserJet Professional P1102w._printer._tcp.local.
DATE: ---Mon 28 Apr 2025---
21:09:59.306  ...STARTING...
21:09:59.306  HP\032LaserJet\032Professional\032P1102w._printer._tcp.local. can be reached at NPI78BD4A.local.:515 (interface 14)
 txtvers=1 qtotal=1 rp=auto pdl=application/vnd.zeno-zjs,application/vnd.cups-raster ty=HP\ LaserJet\ Professional\ P1102w product=\(Hewlett-Packard\ HP\ LaserJet\ Professional\ P1102w\) priority=50 adminurl=http://192.168.0.127 usb_MFG=Hewlett-Packard usb_MDL=HP\ LaserJet\ Professional\ P1102w Transparent=T Binary=T

Адрес, на который надо зайти браузером, находится после подстроки adminurl=.

Митап по PHP

Признаюсь, я как-то подрастерял былой пыл в ведении моих записей, поэтому отлыниваю написать даже о самых ярких событиях, к которым я недавно имел отношение. Например, в прошлую субботу, 19 апреля наша компания устаивала митап по языку программирования PHP, а я был одним из её центральных организаторов.

Если судить по отзывам, событие чрезвычайно всем понравилось. Многие сказали, что давно не участвовали в чём-либо настолько хорошо проведённом, хотя, на мой взгляд, огрехи тоже были. В конце-концов, это первый митап, который мы сделали своими силами.

Не знал, что организация подобный событий отнимает столько сил. Несмотря на список, который мы начали вести с самого начала, то одно, то другое постоянно выпадало из зоны внимания, настолько много всего пришлось учесть.

Мы начали примерно за два месяца, тем не менее, кое-что пришлось делать буквально в последнюю неделю — например, только в последнюю неделю стало понятно сколько примерно народу придёт, потому что люди записывались и записывались. От количества зависело сколько арендовать стульев для сидения и столов для кофе-брейка, а так же количество еды.

Я очень переживал за эти вещи, потому что при форс-мажоре мы бы просто не успели найти новых подрядчиков.

Большое спасибо докладчиками — Александру Макарову, Максиму Пестову и Станиславу Кошевому за то, что вызвались поучаствовать и интересные доклады.

Видео я показать не могу, верьте на слово, — мы его принципиально не записывали. Если мы сделаем наши митапы регулярными, не будем записывать и впредь — наша идея в том, чтобы люди больше общались, хотя бы вынуждено, приходя вот на такие события.

Я (справа) объясняю что-то Максиму Пестову — одному из выступающих на нашем митапе
Александр Макаров, один из лидеров разработки фреймворка yii выступает на нашем митапе

Зима, угомонись

Когда мы были первый раз в Турции, помню, поразило, что, при всей компактности страны, можно за один день, сев в автомобиль, побывать в трёх климатических зонах.

У нас Казань вчера сменила по меньшей мере две, хотя мы никуда не ездили. Днём было тепло, в рубашке с длинными руковами еа улице было комфортно, вечером похолодало и пошёл дождь, а ночью начался снегопад. Всё покрыл довольно заметный слой снега.

P. S. Это новый для меня опыт — страдать аллергией на цветение посреди снегопада.

Первая дочкина программа

Время не сохранило мою первую программу. Из своих дневников жизни я прочитал, что она была на Бейсике для компьютера «Радио-86РК». Я едва помню сам этот факт, не говоря уже о том, что же я тогда написал. Жаль я не записал в дневник что делала та программа, сейчас мне самому интересно было бы взглянуть.

Поэтому я решил сохранить первую дочкину самостоятельную программу. Она написана на языке «Скретч». Два дня назад мы вместе попробовали написать программу по уроку на «Ютубе», а вчера дочка перед сном написала свою собственную.

Конечно, очень простая — нажимаешь на пробел, собака лает. Фон и звук взят из стандартной библиотеки.

Интернет всё мертвее

Теория мёртвого интернета — моя любимая конспирологическая теория, я полюбил её за то, что она единственная из всех может со временем стать реальностью. В этом году мы стали к её осуществлению немного ближе. Компания «Имперва» опубликовала исследование, согласно которому 51% всех пользователей интернета — это боты. Судя по опубликованным графикам, их доля от года к года растёт.

51 процент всех пользователей интернета — боты

Ну и вдогонку.

Я помню, где-то видел статью по поводу того, что самый популярный язык программирования — PostScript, на нём пишется больше всего программ. Дело в том, что он используется в принтерах. Каждый раз, когда вы что-то печатаете, ваши документы превращаются в программу на языке PostScript, которую пишет робот для принтера.

Если ещё вспомнить, что в Солнечной системы всего две населённые планеты — Земля и Марс, причём последняя населена исключительно роботами…

В общем, роботы уже общаются больше нас, программируют больше нас и отжали себе целую планету, где людям не место!

Старый Новый Завет

Чуть больше года назад у жены умерла бабушка со стороны мамы. Она была очень хорошей, доброй женщиной, мы все её очень любили. Дочка до сих пор плачет иногда, когда её вспоминает.

Мы попросили отдать нам какие-нибудь её вещи, чтобы в нашей семье осталась память о ней и получили старинный Новый Завет. Он в плохом состоянии, титульник утрачен, но по очень характерному рисунку на обложке я определил издание — это вторая половина 19-го века, синоидальная типография Санкт-Петербурга. Сейчас книга находится на реставрации в мастерской «Ваш реставратор».

Этот Новый Завет достался семье жены от прадедушки по линии мамы — Александра Ивановича Андриянова. В молодости, ещё до революции Александр батрачил, а его будущая жена была дочерью богатых купцов Шуралёвых, живших в Арском районе. Её родители активно жертвовали на храм Казанской иконы Божией Матери, построенный в 1830 году в селе Старое Чурилино.

Богатые родители, конечно, противились браку с бедным батраком. Чтобы быть вместе, Александр выкрал невесту из дома, и молодые сбежали. Родители девушки признали их союз лишь после рождения второго ребёнка — тогда пара обвенчалась в той самой церкви.

Александр Иванович Андриянов (4 ноября 1903—20 июля 1989) в центре, чуть правее — брат жены

В 1930 году храм закрыли: после последней службы чекисты выдворили верующих, а монахов и монахинь арестовали. Здание превратили в зернохранилище, позже — в склад ГСМ и резервный объект Казанского завода. Новый Завет, вероятно, попал к Александру Ивановичу в те годы, когда угроза закрытия церкви стала очевидной. Мама жены, его внучка вспоминает, что, по рассказам дедушки, он получил книгу ещё до брака. Значит это произошло до 1924 года, когда у него родился первый ребёнок. В советские годы книгу не афишировали, она лежала дома.

В 1992 году храм вернули верующим. Во время реставрации в подвале обнаружили замурованный склеп с 78 черепами, уложенными в шахматном порядке. Предполагают, что останки принадлежали захоронениям у старой церкви, а при строительстве их перенесли в подвал, следуя церковным традициям. Сегодня на этом месте устроена часовня для поминовения.

Аллергия-2025

Каждый год весной меня мучает аллергия. В этом году из-за тёплой весны она до меня добралась раньше, чем в прошлом — сразу по прилёте из Китая. Таблетки, как водится, помогают лишь ограниченно. Вроде должны были с прошлого года где-то остаться медицинские маски, но куда они подевались — непонятно, не нашёл. Заказал на «Озоне» новые, завтра должны прийти, дотерплю на таблетках.

Знаю парочку людей, которые этот период «переживают» — маски не носят, таблетки не пьют, терпят. Если про таблетки я ещё как-то понимаю, — есть много людей с иррациональным страхом любых медикаментов, то что не так с масками мне непонятно, спрашивать постеснялся.

Ранее Ctrl + ↓