Евгений Степанищев

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

«Рельефный Зоологическій Атласъ»

Когда-то давно бабушка одного моего друга работала в Казанском Пединституте и приносила домой книжки, списанные библиотекой этого учебного заведения. Среди них есть несколько очень старых и очень интересных. Одну из них — «Рельефный Зоологическій Атласъ Гагельберга» 1880 года выпуска, часть третья, я взялся отсканировать.

Сканы книги «Рельефный Зоологическій Атласъ Гагельберга», 1880.

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

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

Страничка статистики

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

SELECT YEAR(FROM_UNIXTIME(Stamp)) AS Year, COUNT(*) Total, SUM(LENGTH(Text)) Size
FROM e2BlogNotes
GROUP BY 1 ORDER BY 1

В статистике пока не участвуют «Дневники жизни» №№2, 5, 6 и 7, я ещё их сюда не перенёс (та ещё будет работка) и нет заметок, которые я писал в блоге на платформе ЖЖ. Кстати, можно будет попробовать их перенести автоматически, надо бы подумать над этим.

Совокупное количество символов (включая символы разметки) в заметках по годам

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

Во-вторых, переход на «Эгею» в 2018-м немного меня подстегнул, активность превысила показатели четырёх лет до этого, это согласуется с моими внутренними ощущениями — писать стало приятнее.

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

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

Количество заметок по годам

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

 Нет комментариев    138   2 дн  

Y2K79

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

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

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

my ($sec, $min, $hour, $mday, $mon, $year) = localtime;
printf "%d-%d-%d\n", $mday, $mon, '19'.$year;

1999-й год был последним, в котором это работало правильно — функция возвращала число 99, программист соединял это значение со строкой '19', получалось '1999', а в 2000-м году неожиданно многие программы стали показывать год как '19100'.

Атомными станциями такие программы, разумеется, не управляли, но править их всё равно пришлось, мы просто заменяли конкатенацию сложением с числом «1900».

Недавно я об этом вспомнил. Мы разбирались с ФИАСом — российской базой данных адресов, там у каждого адреса есть период его существования: начальная дата — когда адрес появился (например, дом построили) и конечная — когда исчез (дом снесли).

И оказалось, что «06.06.2079» в этой базе имеет магическое значение — если конечная дата содержит это значение, считается, что адрес существует. Сейчас все программы, обрабатывающие адреса из ФИАСа используют это значение как признак.

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

RHCP — Californication

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

Всегда считал, что не подвержен музыкальной ностальгии. «АукцЫон», «Пикник», «ДДТ», «Аквариум», «Агати Кристи», «Наутилус Помпилиус» и остальное, что слушал до дыр, на повторе в детстве и юности, всё как-то ушло из моей жизни, стало неактуально.

Музыка из песни «Калифорникейшн» группы «Ред Хот Чилли Пеперс» в исполнении Александра Мисько

Тем не менее, слушая недавно «Калифорникейшн» в исполнении великолепного гитариста Александра Мисько, понял, что ну вот она моя ностальгическая песня. Выпущена более 20 лет назад, до сих пор кажется актуальной и великолепной. Судя по тому, что её крутят по радио, не я один так думаю, но что это доказывает? Плохие песни там тоже крутят, и старые, и новые.

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

 1 комментарий    174   3 дн  

Старые газеты

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

Газеты из покинутого крысиного гнезда — грызуны их когда-то натащили, а потом съехали

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

Мокрую газету развернуть куда проще сухой

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

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

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

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

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

Ну посмотрим что интересного писали сто лет назад. «Отрывок из газеты» иногда имеет материальное воплощение

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

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

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

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

Степени оскорблений

Что оскорбительнее — «идиот», «имбецил» или «дебил»? Ответ даёт переводчик книги Пола Оффита «Ящик Пандоры»:

В начале 1900-х годов французский психолог Альфред Бине разработал тест для оценки умственного развития. Несколько лет спустя его переработал исследователь из Стэнфорда и переименовал в тест Стэнфорд-Бине.

В тесте Стэнфорда-Бине idiot назывались люди с IQ 0—25, imbecile — с IQ 26—50, а затем moron — с IQ 51—70. Прим. перев.

Таким образом «имбецил» примерно в два раза оскорбительнее «дебила» (moron), а «идиот» — в четыре.

 1 комментарий    148   3 дн  

«Алиса»: после трёх дней использования

«Яндекс.Станция» — голосовой помощник компании «Яндекс»

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

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

Мы с дочкой используем «Алису» каждый день, утром и вечером. Пока наш опыт использования — считанные дни, но уже чётко видны довольно существенные недостатки.

Самый главный — «Алиса» постоянно теряет сеть. Иногда замолкает посредине сказки, продолжая не с того места, на котором остановилась, иногда конкретно говорит, что не видит сети вайфай. При этом она лежит на столе рядом с «умной» лампой «Сяоми» и роботом «Вектором», которые ни разу не были замечены за потерей сети.

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

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

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

:———)

Шесть лет назад Артём Поликарпов, как он сам утверждает придумал вип-смайлики, с тире вместо дефиса. Он и сам не знает, прав ли он в своём утверждении, но идея получила распространение, такие смайлики мне иногда встречаются — например, ими пользуется одна моя подруга.

Вввип-смайлик для солидных-пресолидных господ!

Артём, рад сообщить, что я смог улучшить твой результат! В стандарте Юникод 6.1 есть символ «тройное длинное тире», что в три раза более «вип», чем твои вип-смайлики! Знак используется в библиографиях для обозначения того же автора, что и в предыдущей записи.

К сожалению, мой «Макбук» недостаточно лакшери, чтобы поддерживать этот символ, но в смартфоне под Андроид символ отображается.

 1 комментарий    209   5 дн  

SplFileObject

ПХП, как известно, вырос из процедурного языка — во многих местах до сих пор видны «уши» процедурного подхода. Одно из таких мест — работа с файлами. Большинство ребят используют тут исключительно процедурный подход. Что-то вроде:

$fp = @fopen("test.log", "ab");
if ($fp !== false) {
    // в реальном коде надо бы проверить результат этих функций,
    // тут упрощённый код для иллюстрации принципа
    flock($fp, LOCK_EX);
    fwrite($fp, "Log line\n");
    fclose($fp);
} else {
    throw new \RuntimeException(error_get_last()['message']);
}

К счастью с 2005 года в языке существует класс SplFileObject, который умеет делать тоже самое, но в ООП-стиле.

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

$fp = new \SplObjectFile("test.log", "ab");
$fp->flock(LOCK_EX);
$fp->fwrite("Log line\n");
$fp->flock(LOCK_UN);

Интересно, что когда я пытался продемонстрировать проблему с блокировками, то довольно быстро накидал код, в котором она происходила:

$x = [
    new \SplFileObject('test.log', 'ab'),
    &$x
];

$x[0]->flock(LOCK_EX);
unset($x);

echo "Written\n";
sleep(10);

Если попробовать этот код запустить в двух разных консолях, то второй процесс будет ждать первый. По крайней мере по «МакОС» и ПХП 7.4.

Но, если заменить unset на $x = null, произойдёт удивительное — второй процесс получит возможность записать в файл сразу же, то есть сборщик мусора убирает его моментально. Я не знал о таком различии между этими двумя способами уничтожения объекта. Любопытно — с чем это связано и изменится ли в будущем?

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

Требуются энергичные агенты

Недавно писал как мне нравится дореволюционная реклама, совсем не раздражает, не то что современная. Из этого правила нашлось исключение.

Объявление в газете «Камско-волжская рѣчь», вторникъ 5 ноября 1913 г., №244-й

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

Ранее Ctrl + ↓