Адаптация дочки в новом садике

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

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

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

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

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

3 комментария

«Курчане»

Любопытно какие детали иногда всплывают по случайности в людской памяти. Недавно рассказывал маме про наши курские корни (по заметной части веток мы — потомки переселённых из-под Курска однодворцев) и она кое-что вспомнила.

Говорит, что когда мой дед (её папа) выпивал, иногда в разговоре говорил что-то вроде «ведь вы курчане», маме было лет десять, слово она запомнила, а что оно означает не знала до недавнего времени. Интересно, что себя он курчанином не называл.

Чёрно-белое фото: женщина и двое мужчин сидят за столом на открытом воздухе, пьют из стаканов, вокруг зелень и фрукты.
Уже старенький Никанор Иванович Литвинов (1881—1975) — мой прапрадед; среди родственников

Думаю, слово появилось в его обиходе с подачи отца тёщи, моего прапрадеда Никанора Ивановича Литвинова, потомка Якова Тимофеевича Калетинова, купленного в качестве крепостного в 1829 году в деревне Копцева Старооскольского уезда — это как раз под Курском. Мама рассказывала, что Никанор Иванович отлично помнил своих предков, наверняка знал и откуда он.

Кстати, я так и не понял как Калетиновы превратились в Литвиновых. Может в документы вкралась ошибка, которая потом закрепилась, впрочем, Яков Тимофеевич (отчество было давно по крёстному) был незаконнорожденным, мало ли какая там история стояла за сменой фамилии.

Фрагмент ревизской сказки: строка 3 — «Якова покрепостил откуп Тимофеевъ», его сын Николай; справа — «Куплены въ 1829 году...», цифры 25 и 8.
Запись о покупке моего незаконнорожденного предка

Например, Яков мог быть незаконорожденным сыном некого дворянина Калитвинова, из-за чего его и продали с глаз подальше в другую губернию. Как известно внебрачные дети русских аристократов получали усечённую фамилию, так что Ка-литвинов мог превратиться в Литвинова. А форма «Калетинов» вполне могла появиться как ошибка переписчика.

Но это только версия, конечно.

Позже: списался с исследователем Курской губернии, вот что он ответил:

Посмотрели сказки 8-й ревизии помещиков Елисеевых. Указанных вами персон в этих ревизиях нет. Кстати, нет и Герасима Матвеевича Елисеева.

Герасим Матвеевич — это тот, у кого был куплен мой предок. Если его не оказалось в восьмой ревизии (это перепись 1833—1834 годов), то куда же он делся?

2 комментария

PHPFuck для PHP8

Немного про программирование.

Один из читателей написал, что программа PHPFuck (это способ писать программы без алфавитно-цифровых символов), которую я писал несколько лет назад, не работает с восьмой версией интерпретатора ПХП. Он попробовал починить её самостоятельно, но не преуспел.

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

<?=[[$_=@([].[]),$___=-!![],$$_=![]+![],$$_=$$_*$$_,$__=$$_+![],$$__=$$_+$__,
$____=$_[-![]-![]],$$___="{$$__}"^$____,$$___=($$___^"$___"). ($$___^"{$$__}"^"$___"^"{$$_}").
($$$_=$$___^"{$$_}"). $$$_.($_____="{$$__}"^"{$$_}"^++$____).("$___"&$____).
([$$___=$_[+![]],"{$$_}"|++$$___][+![]]).$_____.$_[+![]].$$$_. ("$__"^$_[-![]-![]]^"$___")
],$$___][+![]];

Выше новая версия.

Кстати, она компактнее, но при этом выводит больше текста — «hello world», вместо «Hello!» предыдущего варианта. Ниже я немного расскажу откуда взялась экономия и с чем ещё пришлось столкнуться.

Принцип формирования текста остался, в общих чертах, прежним — корнем всего является комбинация @([].[]), которая даёт слово ArrayArray из-за неявного преобразования массива в текст — это такая особенность ПХП (символ @ нужен тут, чтобы подавить предупреждение, которое выдаёт интерпретатор).

Из этой строки потом рождаются все остальные символы. Дело в том, что в ПХП над символами можно производить некоторые бинарные и математические операции, что иногда позволяет получить другие символы. Например, первая буква — h в слове hello получается из сочетания '9' ^ 'a' ^ '0' (где ^ — бинарная операция «исключающего или»).

При этом цифры я получаю довольно простым способом — 0 как +!![] (преобразованием false в число), «девятку»,  — набирая нужные цифры по единицам (из +![]), а a — как предпоследнюю букву из полученной ранее строки ArrayArray, то есть @([].[])[-2] (аналогично, -2 получается тут из двух замаскированных единиц со знаком «минус»).

По сравнению с предыдущим вариантом в новом коде сделаны следующие изменения.

Во-первых, вместо того, чтобы составлять из получаемых букв printf (функцию, которую я использовал в прошлый раз для вывода текста), тут я пользуюсь выводом через короткую конструкцию <?= — в этом основная экономия. Я выбрал этот вариант, так как конструкция <?, которую я использовал ранее, больше не работает, а заменившая её <?php содержит буквы.

В этой связи весь код теперь — большое выражение, все переменные в нём лежат внутри массива. Если давать им нормальные имена, то основной принцип выглядит как-то так: <?=[ [ $v1 = …, $v2 = …, $result = $v1 . $v2 . … ], $result ][1]; То есть они вычисляются внутри массива, последний элемент которого, содержащий вычисленное выражение, выводится.

Во-вторых, в ПХП стало больше строгости и числа, которые я использую для алхимии с буквами, теперь приходится преобразовывать в строки — раньше это происходило неявно, а сейчас интерпретатор останавливается с фатальной ошибкой. То же с не заданными константами — раньше они преобразовывались в строки (чем я пользовался, используя несуществующую константу, чтобы получить символ _ для дальнейших преобразований), теперь так делать нельзя.

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

Ниже приведен листинг этой программы, вдруг кому-то интересно:

<?php
declare(strict_types=1);

// Доступный алфавит
$abc = str_split(count_chars("Array0123456789", 3));

// буквы, которые надо получить
$need = str_split(count_chars("hello world", 3));

function gen(array $chrs): Generator
{
    // чем операции длиннее, тем ближе к концу
    // это нужно, чтобы более короткие конструкции выигрывали
    foreach ($chrs as $ch) {
        yield $ch => [$ch, $ch];
    }

    // возврат: из чего делаем, [как выглядит, значение]
    foreach ($chrs as $ch) {
        yield $ch => ["~$ch", ~$ch];
    }

    // для символа инкремент работает, а декремент — нет (особенность ПХП)
    foreach ($chrs as $ch) {
        $value = $ch;
        yield $ch => ["++$ch", (string)++$value];
    }
}

function eval_op(string $op, string $a, string $b): string
{
    return ([
        '|' => fn($a, $b) => $a | $b,
        '&' => fn($a, $b) => $a & $b,
        '^' => fn($a, $b) => $a ^ $b,
    ][$op])($a, $b);
}

function generate(array $set): Generator
{
    foreach (gen($set) as $src1 => [$p1, $ch1]) {
        foreach (gen($set) as $src2 => [$p2, $ch2]) {
            foreach (['|', '&', '^'] as $op) {
                $result = eval_op($op, $ch1, $ch2);

                if ($result !== $ch1 && $result !== $ch2) {
                    yield [
                        $src1,
                        $src2,
                        "$p1 $op $p2",
                        $result,
                    ];
                }
            }
        }
    }
}

function out(string $str): string
{
    return preg_replace_callback(
        '/[\x00-\x1F\x80-]/s',
        fn($m) => sprintf("\\x%02X", ord($m[0])),
        $str
    );
}

$set = $abc;

do {
    foreach (generate($set) as [$src1, $src2, $str, $res]) {
        $idx = array_search($res, $need, true);

        if (!isset($rules[$res])) {
            $rules[$res] = $str;
        }

        if ($idx !== false) {
            if (!in_array($src1, $abc, true)) {
                echo out("{$rules[$src1]} = '$src1'"), "\n";
            }

            if (!in_array($src2, $abc, true)) {
                echo out("{$rules[$src2]} = '$src2'"), "\n";
            }

            echo out("$str = '$res'"), "\n\n";

            unset($need[$idx]);
        }

        $set[] = $res;
    }

    $set = array_unique($set);
} while ($need);

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

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

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

2 комментария

О двенадцати хоботах

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

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

Текст русской народной песни о змее с двенадцатью головами и хоботами, похитившем матушку; строка «двенадцати хоботах» выделена жёлтым.
Кусочек сказания о Фёдоре Тырянине из «Собрания народных песен П. В. Киреевского», Приокское книжное издательство, Тула, 1986

Так откуда же у русских драконов взялись хоботы?

Разгадка в том, что слово «хобот» когда-то обозначало не шланг на морде животного, а хвост — у лошади, змеи, дракона. То есть у Змея Горыныча из сказки было двенадцать голов и двенадцать хвостов.

2 комментария

«Робинзонъ Крузо»

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

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

Титульный лист «Робинзон Крузо» Даниэля Дефо (издание третье, перевод М. А. Шишмаревой и З. Н. Журавской) и каталог изданий М. М. Стасюлевича с произведениями Жюля Верна.
«Робинзонъ Крузо: Его жизнь и удивительныя приключенія», Санкт-Петербург, М. М. Стасюлевича, 1914

На пластинки глаз не лёг, зато удивительным образом лёг на дореволюционное издательство «Робинзона Крузо», я и раньше нередко рассматривал кое-какие книги, но не решался их купить, а сегодня что-то толкнуло.

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

Карта трёх путешествий Робинзона Крузо, составленная И. Н. Леонтьевым для настоящего издания; на ней показаны маршруты трёх путешествий разными линиями по карте мира.
Карта трехъ путешествій Робинзона Крузо, составленная спеціально для настоящаго изданія И. Н. Леонтьевымъ

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

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

5 комментариев

Проницательные люди

Как известно, у Шерлока Холмса был реальный прототип, сравнимый с ним по способностям — доктор Джозеф Белл, британский врач-хирург, профессор Эдинбургского университета и наставник Артура Конан Дойла. То есть в мире достоверно существовал по меньшей мере один человек, который по мелким и незаметным другим деталям мог делать верные далекоидущие выводы. Хотя бы бо́льшую часть времени.

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

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

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

Всё никак не могу к этому привыкнуть.

5 комментариев

Эхо

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

Думаю дело в том, что усиливающая звук техника даёт на Красной площади очень сильное эхо (до сих пор помню это «Здравствуйте, товарищи! …ищи! …ищи! …ищи!»). По себе знаю насколько эхо мешает и сбивает. Единственный способ с ним бороться — говорить медленнее, чтобы не терять мысль, и делать паузы, чтобы оно успевало стихать.

2 комментария

Скопинский маньяк

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

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

Мужчина в тёмном костюме и галстуке смотрит на женщину с длинными тёмными волосами в джинсовой рубашке, сидящую рядом на фоне светлых ступеней.
Кадр из итальянского сериала восьмидесятых «Спрут» («La Piovra»)

Кажется впервые я почувствовал, что меня задевает эта тема ещё в детстве, в 80-е, при просмотре итальянского сериала «Спрут» («La Piovra»). Тогда было принято смотреть вообще всё подряд, тем более этого «подряд» не так-то много и было — два канала в телевизоре и никакого интернета — его ещё тогда не придумали. Поэтому этот сериал я смотрел со всеми, недоумевая что такое со мной происходит — все его криминальные герои меня почему коробили, а слово «мафия», которое я почерпнул оттуда, казалось мне каким-то ненастоящим и нелепым.

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

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

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

Хочешь не хочешь, а краем глаза я увидел столько текста на эту тему, что вполне составил впечатление и о кокетливом ключе этого интервью, и том факте, что маньяк мало того, что не раскаялся, так ещё, по сути, пообещал одной из своих жертв, что скоро до неё доберётся ещё раз:

Катя там жила — она не рожала, а Лена рожала. А сейчас наоборот получилось: Катя родила, а Лена нет. От меня родила и больше не рожает. Надо опять мне заняться ею.

Не знаю как описать мои чувства от того, что Собчак решила популяризировать такого персонажа… «Гнев», наверное, наиболее подходящее цензурное слово. Как по мне, такие люди должны умирать в полной изоляции и безвестности.

10 комментариев

Постаревшие дети

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

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

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

Мне кажется, комментаторы под такими постами как будто проверяют — не настал ли последний момент, не пора ли взрослеть, много ли вокруг ещё «постаревших детей»? Со своим опытом из студенчества я могу их понять — когда не хочется чем-то заниматься, хочется видеть, что есть ещё (и много!) таких, кто тоже не парится.

Но так не у всех, ребят.

4 комментария

← сюда туда →