Пишу, по большей части, про историю и программирование. Живу в Казани (Татарстан, Россия).

Позднее Ctrl + ↑

Загадочный кирпич

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

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

Загадочный кирпич «Н. А. Топорни… и Ко», найденный на рыбалке

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

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

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

Перевертмейстер

Сегодня узнал новое слово — «перевертмейстер», он же «переворотчик», он же «листмейстер». Это тот человек, который переворачивает (листает) музыкантам страницы с нотами, когда те заняты игрой на инструменте.

Кадр из минисериала «Гордость и предубеждение» (1995 год)

Более развёрнутый комментарий я нашёл в инстаграме профессиональной пианистки Елены Гриневич:

Кто такой перевертмейстер? Это добрый человек, который помогает пианисту с переворотами страниц, если вы играете на концерте/конкурсе/экзамене по нотам (что норма для всех концертмейстров и камерных ансамблей).

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

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

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

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

 2 комментария    285   24 дн  

Серебряные блёсны

В 1950-х годах, в результате строительства Волжской ГЭС, образовалось Куйбышевское водохранилище, крупнейшее в Евразии, площадью 6450 км². В результате его образования были затоплены огромные площади, в том числе ранее населённые людьми. Разумеется людей заранее предупредили и переселили, а пустые деревни, сёла и небольшие города частично или полностью утонули.

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

Серебряный рубль Екатерины II, 1764 год, вариация «с шарфом на шее», фото из открытых источников

Монет находилось много — за одну прогулку можно было насобирать несколько десятков. Серебряные и золотые тоже не были какой-то редкость — попадались частенько, судя по рассказам. Наверное взрослые находили им какое-то применение (сдать или продать их в СССР тогда было крайне проблематично), а дети бросали в воду или… делали из них блёсны для ловли рыбы.

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

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

Смайлик

Недавно узнал, что в стенограмме одной из речей американского президента Авраама Линкольна, которую напечатали в 1862 году в газете The New York Times, в 2004 году нашли некий знак, очень сильно похожий на обычный смайлик — ;)

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

Стенограмма речи Авраама Линкольна в газете The New York Times за 7 августа 1862 года

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

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

Правда, у меня есть ещё одна версия.

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

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

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

Частые ОРЗ

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

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

 1 комментарий    268   27 дн   COVID-19

FUJIFILM Instax MINI 11

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

Фудзифильм Инстакс Мини 11 и несколько фотографий

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

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

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

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

 1 комментарий    299   28 дн   дочка

Особенности использования индексов в PostgreSQL

Вчера под ночь боролся с «Постгресом» (это такая СУБД), в итоге поборол, но не так, как хотелось бы. Бизнес-задачу мне не хотелось бы сейчас рассматривать, поэтому для иллюстрации проблемы создам тестовую таблицу безо всякой смысловой нагрузки:

SELECT id, CASE WHEN RANDOM()>.5 THEN value END AS value
INTO test
FROM generate_series(1, 1000000) WITH ORDINALITY AS test(id, value)

В тестовой таблице два поля — идентификатор (id) и значение (value), примерно половина значений в поле value — NULL. И теперь нам надо создать индекс для запросов, которые выглядит примерно так:

SELECT id FROM test WHERE value IS NULL ORDER BY id;
SELECT id FROM test WHERE value IS NOT NULL ORDER BY id;

План для них выглядит одинаково печально, что логично — на таблице ни одного индекса:

Sort  (cost=61739.93..62977.68 rows=495100 width=4) (actual time=47289.775..47761.235 rows=498778 loops=1)
   Sort Key: id
   Sort Method: external merge  Disk: 6848kB
   ->  Seq Scan on test  (cost=0.00..14910.00 rows=495100 width=4) (actual time=12.039..40854.731 rows=498778 loops=1)
         Filter: (value IS NULL)
         Rows Removed by Filter: 501222
 Planning Time: 0.174 ms
 Execution Time: 48134.553 ms

Чтобы сэкономить место, мне очень хотелось сделать индекс функциональным:

CREATE UNIQUE INDEX ON test((value IS NULL), id);

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

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

Первый запрос ожидаемо улучшился:

Index Scan using test_expr_id_idx on test  (cost=0.42..33882.43 rows=495100 width=4) (actual time=0.056..519.584 rows=498778 loops=1)
   Index Cond: ((value IS NULL) = true)
 Planning Time: 0.182 ms
 Execution Time: 894.551 ms

А второй — нет:

Sort  (cost=62738.26..64000.51 rows=504900 width=4) (actual time=1046.582..1471.180 rows=501222 loops=1)
   Sort Key: id
   Sort Method: external merge  Disk: 6880kB
   ->  Seq Scan on test  (cost=0.00..14910.00 rows=504900 width=4) (actual time=0.033..522.071 rows=501222 loops=1)
         Filter: (value IS NOT NULL)
         Rows Removed by Filter: 498778
 Planning Time: 0.136 ms
 Execution Time: 1841.282 ms

Несмотря на то, что в индексе содержится информация, достаточная для выполнения этого запроса, в данном случае «Постгрес» не понимает, что VALUE IS NOT NULL эквивалентно (VALUE IS NULL) = false.

Причём, если попробовать переписать запрос, чтобы условие выборки выглядело как (VALUE IS NULL) = false, то тут оптимизатор не оплошает — перепишет за нас условие в виде VALUE IS NOT NULL и опять не будет узнавать его в индексе.

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

Во-первых, можно «замаскировать» конструкцию …IS [NOT] NULL, чтобы оптимизатор перестал его нормализировать:

CREATE UNIQUE INDEX ON test((CASE WHEN value IS NULL THEN TRUE ELSE FALSE END), id);

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

Во-вторых, можно создать два индекса вместо одного:

CREATE UNIQUE INDEX ON test((value IS NULL), id);
CREATE UNIQUE INDEX ON test((value IS NOT NULL), id);

Недостаток: у нас два индекса — при вставке или обновлении будем писать в два места, раздуваться (bloat) у нас будут тоже два индекса вместо одного.

В-третьих, можно не выпендриваться, а создать обычный индекс:

CREATE UNIQUE INDEX ON test(value, id);

Фатальный недостаток: индекс, по сути, бесполезен — он содержит всю таблицу целиком, «Постгрес» скорее всего выберет последовательное сканирование таблицы, а индекс использовать не будет.

И, наконец, вариант, который мне нравится в этой ситуации больше всего — частичные индексы:

CREATE UNIQUE INDEX ON test(id) WHERE value IS NULL;
CREATE UNIQUE INDEX ON test(id) WHERE value IS NOT NULL;

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

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

Карборан

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

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

Получение орто-карборана, начиная с трихлорида бора; иллюстрация из статьи «Выдающиеся соединения органической химии. Карборан»

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

Оказывается ещё в 1950-х годах было сформулировано понятие трехцентровых связей. В таких связях три атома связываются двумя электронами:

Согласно современным представлениям, атомы бора в этом соединении непосредственно не связаны друг с другом. Они соединяются с помощью атомов водорода. […] сферическая s-орбиталь водорода перекрывается одновременно двумя вытянутыми p-орбиталями двух атомов бора (орбиталь — область наиболее вероятного расположения электрона в пространстве, иначе говоря, электронное облако определенной формы). Образуется две таких связи (над и под мысленной плоскостью, в которой расположены фрагменты ВН2).

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

К такому меня школа не готовила.

 4 комментария    314   1 мес  

У вас «девочка»!

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

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

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

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

Такие дела, ребята.

 2 комментария    287   1 мес  

Длинные имена и PHP

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

Оказалось, что наша версия ПХП использует устаревший вызов readdir_r. У него много недостатков, но среди прочих — на некоторых системах он не может читать длинные имена. Проблему исправили в версии 7.4, но у нас всё ещё есть проекты на 7.3.

До конца перехода будем использовать системную утилиту /bin/ls, у неё таких трудностей не возникает.

Ранее Ctrl + ↓