Спички Сапожникова
И снова продолжаю разбирать находки с чердаков.
Иногда среди чердачного хлама попадаются коробки́ спичек, один такой, советских времён, я уже выкладывал. На этот раз хочу поделиться фотографией оборотной стороны дореволюционного коробка.
Мало что проясняющая для современного обывателя надпись «безъ сѣры и фосфора» означает, что спички производились по шведской технологии — без ядовитого белого фосфора (он заменялся красным), а серу, которая сильно воняла при горении (что породило поговорку «сначала вонь, потом огонь»), заменили воском, стеарином или парафином, пропитав ими головку спички.
Как и написано на этикетке, фабрика, произведшая коробок, основана в 1887 году. Её основатель — Иван Исаакович Сапожников родился в деревне Барминская Пустошь Бобинской волости Вятского уезда, вблизи станции Вятка, в семье крестьянина. Однажды Иван Исаакович узнал, что в Слободской волости появился новый промысел — спичечное производство, заинтересовался, разузнал подробности
Сначала работала только семья Ивана, но товар пользовался большим спросом, производство ширилось, вскоре пришлось нанять других крестьян в своей деревне, потом задействовать рабочие руки из других сёл. Спрос рос и Иван Исаакович решил построить собственную фабрику. Купил за бесценок землю на болоте
Дела шли хорошо, продукция стала экспортироваться за рубеж. В 1900 году предприятие Ивана Сапожникова вышло в лидеры губернии: годовой оборот производства составил 260 тысяч рублей, продукция сбывалась в Казанскую, Пермскую, частично в Вятскую губернии, в приволжские города.
В мае 1909 года был учреджён торговый дом с названием «Иван Исаакович Сапожников с сыновьями», а 1916 году открылась ещё одна спичечная фабрика близ слободы Дымково.
Но наступила революция, в 1918 году спичечная фабрика Ивана Исааковича была национализирована и в 1920 году получила название «Красная Звезда». Дальнейшая её история мне уже малоинтересна.
Хоть бренд и исчез, но судя по легкообнаруживаемым на специализированных ресурсах генеалогическим деревьям, потомки Ивана Исааковича
Программисты-«волшебники»
Про
Хочу высказаться также по триаде «объект — указатель — ссылка».
Изначально в Си (не «++») ссылок не было. Были только объекты и указатели. Любой начинающий сталкивался с указателями, как только ему требовалось впервые изменить в теле функции значение переданного функции параметра:
void func1(int i) { i = 1; }
void func2(int* i) { *i = 1; }Далее:
int i = 0;
func1(i); // всё ещё i==0
func2(i); // вот теперь i==1Этот код демонстрирует то свойство Си,
Спрашивается, так зачем ещё потребовались ссылки? Ответ таков. В мире существует, не исчезает и даже порой ширится класс
Пусть лучше в теле func2 тоже будет написано
void func1(int i) { i = 1; }
void func1(int &i){ i = 1; }
int i = 0;
func1(i); // волшебного значка нет, i не изменилось
func2(i); // волшебный значок! i изменилось.Смотрите, операторы в теле функций одинаковые, а работает
Программисты Си долго сопротивлялись,
Коронавирус и рукопожатие
Через несколько дней мы собирались лететь в отпуск в Китай,
Весь этот инфошум здо́рово давит на психику и, чтобы понимать реальное положение дел, мне лучшим подспорьем показался канал доктора Комаровского, где он регулярно и популярно рассказывает о том, что известно на текущий момент.
В своём последнем видео доктор призвал тщательно мыть руки, чихать в локтевой сгиб и перестать здороваться за руку со всеми подряд — этой рукой мы потом трём нос и это, по утверждению Комаровского, есть основной канал распространения вируса гриппа.
Я тут подумал, что это хорошо подтверждается статистикой. В основном за руку здороваются мужчины, и 71% заболевших — тоже мужчины. В этом есть даже
Дополнение: рухнула моя теория, друг в комментариях в «Фейсбуке» утверждает, что в азиатских культурах рукопожатие не принято (он живёт в Сингапуре).
19 февраля 1908 года
Продолжаю разбирать находки с чердаков.
Одна из вещей, найденных там, — несколько листков отрывного календаря за 1908 год. Было очень соблазнительно выкладывать по листку в соответствующие даты, но слишком долго ждать, поэтому буду постепенно выкладывать безо всякой системы.
Анекдот меня не впечатлил, а вот «меню» — да. Как я понимаю, это это идеи того, чем можно было бы побаловать гостей в этот день:
Супъ изъ сушеныхъ вишень.
Рыба жареная.
Суфле изъ муки.
Бросился в глаза «суп из сушеных вишен» — очень необычное блюдо, как по мне, никогда о таком не слышал. Я подумал что это в правду
PHP FFI
В ПХП 7.4 предпринята очередная попытка обзавестись интерфейсом к языку Си. Кажется наконец за это расширение взялись
Для интереса посмотрел что за АПИ получилось. В принципе, всё очень просто. Вот как выглядит
/**
* @method object mkdtemp(string $template)
* @method object strerror(int $errnum)
* @property-read int $errno
*/
$ffi = FFI::cdef('
// Импортируем функцию создания временного директория
char *mkdtemp(char *template);
// Импортируем функцию перевода кодов ошибок в строку
char *strerror(int errnum);
// Импортируем переменную, хранящую коды ошибок
int errno;
');
/**
* Фунция для создания временных директориев по маске
* @param string $template Шаблон создания (см. man mkdtemp)
* @return string Путь до временного директория
*/
$mkdtemp = function (string $template) use ($ffi): string {
$result = $ffi->mkdtemp($template);
if ($result === null) {
$errno = $ffi->errno;
$errstr = $ffi->strerror($errno);
throw new RuntimeException(FFI::string($errstr), $errno);
}
return FFI::string($result);
};Как можно понять из кода, создаётся объект, в который импортируются сущности, перечисленные в сишной нотации в первом параметре. В общем случае вторым параметром требуется указать библиотеку для импорта, но в данном случае работает и так.
Не знаю заработает ли этот код без изменений под Линуксом и Виндоузом, у кого есть под рукой, посмотрите, пожалуйста.
В этом примере параметры в импортированные функции передаются как обычные типы ПХП, а некоторые возвращаемые значения требуют конвертации. Так char * возвращается как специальный объект, который нужно преобразовывать в строку вызовом метода FFI::string.
Вот тривиальный текстовый пример использования созданной выше функции:
$template = implode(DIRECTORY_SEPARATOR, [sys_get_temp_dir(), 'ffiphp.XXXXXX']);
try {
$tmp = $mkdtemp($template);
rmdir($tmp);
echo $tmp, "\n";
} catch (RuntimeException $e) {
echo $e->getMessage(), "\n";
}Суть происходящего проста: если директорий удалось создать, то он будет уничтожен, а его имя — выведено на экран, иначе появится текстовое сообщение об ошибке.
PHP8 и strpos
Мне очень нравится куда двигается язык ПХП в последние годы. Много вещей удалось исправить, и движение в правильную сторону не останавливается. На список изменений восьмой версии приятно смотреть, кроме пресловутой компиляции «на лету», есть очень много других приятных изменений, в том числе, в ключе поднятой темы, буду убраны некоторые архаичные и вредные штуки.
В процессе изучения списка изменений, иногда находятся грабли, на которые я, к счастью, никогда не вставал. Хорошо, что они со временем из языка исчезают. Например:
The needle argument of strpos(), strrpos(), stripos(), strripos(), strstr(), strchr(), strrchr(), and stristr() will now always be interpreted as a string. Previously
non-string needles were interpreted as an ASCII code point. An explicit call to chr() can be used to restore the previous behavior.
Я даже не подозревал, что в качестве параметра в функции поиска подстроки сейчас можно (в восьмой версии будет нельзя) передать код символа. Так как в ПХП мало кто следит за типом переменной, можно получить несколько обескураживающие результаты:
// объявили строковую переменную и где-то по коду она превратилась в число,
// 49 — это код символа «1»
$needle = (int) "49";
// выдаёт «Есть»
echo @strpos("12349", $needle) === false ? "Нету\n" : "Есть\n";
// Несколько неожиданно выдаёт «Нету», ищется символ с кодом «49» (единица)
echo @strpos("02349", $needle) === false ? "Нету\n" : "Есть\n";В ПХП8 число будет преобразовано в строку и искаться будет именно строка, то есть оба этих примера выдадут «Есть».
Выполнение запроса с таймаутом
В продукте, который мы делаем в нашей компании, не используется PDO для соединения с базой данных — так исторически сложилось и вряд ли имеет смысл менять. Причина тому — оптимизации; мы широко используем эскуэль и задействуем диалектные особенности используемой СУБД (в нашем случае это «Постгрес»). То есть универсальность PDO нам ничего бы не дала.
Недавно возникла задача выполнения запроса с таймаутом — если выполнение запроса занимает больше времени, чем по нашему мнению пользователь готов ждать, то лучше прервать запрос и показать заглушку. В PDO кажется такая возможность есть (параметр можно задать, но мы не тестировали), а в постгресовском модуле для ПХП готового способа не оказалось.
Мы долгое время перебирали идеи (вплоть до внешнего процесса с таймером), но ничего не выглядело достаточно хорошо, чтобы помещать это в код. В конечном счёте мой братишка предложил очень простое решение. Ответ лежал в работе с асинхронным АПИ. Обычно это выглядит
$con = pg_pconnect("…");
if ($con === false) {
throw new \RuntimeException('Could not connect');
}
// асинхронно выполняем запрос, в синхронном варианте тут было бы pg_query
if (pg_send_query($conn, "select * from users")) {
// тут можно делать что угодно, пока мы не будем готовы принять результат
// …
// синхронно получаем результат
var_dump(pg_get_result($conn));
}Поскольку pg_send_query неблокирующий, то можно было бы попытаться
function waitForResult($connection, callable $callback, int $timeout): void
{
$stream = pg_socket($connection);
while (pg_connection_busy($connection)) {
$read = [$stream];
$write = $except = null;
$numChangedStreams = stream_select($read, $write, $except, 0, $timeout);
if ($numChangedStreams > 0 || $numChangedStreams === false) {
break;
}
$callback();
}
}После отсылки запроса мы получаем сетевой сокет соединения с базой данных и ожидаем в нём появления данных для чтения. Если за таймаут этого не происходит (или возникает ошибка), то цикл ожидания прерывается, иначе вызывается функция обратного вызова для получения порции данных.
Нафталин
Признаться, не помню, чтобы хоть раз встречал нафталин в жизни, кроме как в присказках — обычно это синоним
И вот, копаясь в старом сундуке на чердаке одного из друзей, увидел три пустые упаковки, взял себе, рассмотреть как следует. Инструкция по применению на одной из упаковок гласит:
Нафталин ПРИМЕНЯЕТСЯ для предохранения меховых, шерстяных, ковровых изделий, одежды и обуви от ПОРЧИ их МОЛЬЮ.
Вещи необходимо вычистить и просушить, а затем пересыпать нафталином.
Нафталин необходимо насыпать не на вещи, а на бумагу, которой они перекладываются.
Можно мешочки с нафталином разложить в шкафах или сундуках.
Ценные вещи вешают на плечики, а мешочки с нафталином кладут в карманы или подшивают к подкладке.
Мелкие шерстяные вещи хранят в наволочке, мешках, коробках, на дно которых насыпают нафталин.
Как легко догадаться, нафталин — яд. Отравление им вызывает головные боли, тошноту, рвоту, раздражение слизистых оболочек. Хроническое воздействие нафталина также приводит к нарушению работы печени и поджелудочной железы, вызывает развитие атрофического ринита и фарингита. Помимо этого, он — возможный канцероген.
Думаю, в тех количествах, которые применяли для отпугивания моли, он не опасен, хотя и не изучал этот вопрос.
Нафталин — никакая не «химия» (привет натуропатам!), в природе его выделяет один из видов термитов, чтобы защитить свои гнёзда от муравьёв, грибков и нематод. Добывают его, правда, не из термитов, а из каменноугольного дегтя, закалочного масла и другого сырья.
Юникод 13
Рассматривал на днях символы эмодзи, которые появятся в тринадцатой версии Юникода. Юникод всё больше превращается в конструктор, впрочем что так и будет стало очевидно ещё пять версий назад, когда появились модификаторы цвета кожи.
Чтобы получился чернокожий мужик в фате, берётся девушка в фате, к ней плюсуется нужный цвет кожи и символ мужского пола. На первый взгляд тут есть
Похоже, что тут выбрали второй путь, так как подтверждения продуманному подходу мне нагуглить не удалось. По мне так это печально, так как в будущем по чёткой логике эти смешные значки мог бы генерировать (и понимать по набору правил)
Само по себе расширение эмодзи всё новыми значками мне кажется неоправданной затеей, непонятно куда их такая прорва и зачем нужны новые. Один из минусов — создание шрифта с эмодзи с нуля (например, для новой мобильной системы) с каждым годом требует всё более значительных усилий.
Несколько лет назад, когда интернет был поменьше, а я поизвестней, мне в голову даже приходила идея создать сайт Ассоциации Синекожих Людей (см. аргироз) и потроллить от его имени Консорциум Юникода — потребовать появления синего модификатора и синекожих эмодзи,
🥶🥶🥶
Конечно это ни на что не повлияло бы, максимум —
Лучшее образование
Прекрасный Саша Ларьяновский, лучше и не скажешь:
Читаю мнения родителей, что надо запретить телефоны в школах, потому что тогда дети будут все внимание отдавать учебе.
Что меня смущает. Я ж знаю этих родителей. Они росли со мной. Их в моей же школе учили химии, биологии, физике, математике… При мне.
А потом они бросились ставить банки с водой перед телевизором. Не, реально, я сам видел. Натурально перед Чумаком и Кашпировским ставили эти банки. От литра до пяти в объеме, дважды в неделю.
Они ещё сейчас упрекают в необразованности нынешнее поколение.
Так вот заряжали ведьводу-то. Некоторые сразу после школы, иные постарше были. Одновременно с этим они бросились читать и верить — верить! в гороскопы, покупать гомеопатию и повально креститься.
Хотя никакие телефоны не отвлекали их от уроков естествознания и точных наук. Не, натурально, как вспомнишь школу без телефонов, так все вокруг меня в классе учились, не смыкая ног.
И вот эти ребята, с банками воды у телека, 25 кадром в обучении языкам, гороскопами и чтением — простите — комсомольской правды, уповают, что убрать телефоны на уроках поможет учиться их детям.
Единственное, что нашему поколению может помочь прозреть, это, конечно, сушеные крылья летучих мышей, собранных в полнолуние високосного года. Их надо растолочь и посыпать порошком телефоны детей.
Если не поможет — насыпать льняного семени в край глаза.
Шутки с бородой
Продолжаю выкладывать вырезки из газет царских времён — из тех обрывков, что иногда попадались мне на чердаках. На фотографии кусочек всё того же номера 244 газеты
Спешите ознакомиться, «1001 совѣтъ даромъ» от мизогиниста, скрывающегося за именем весёлого скрипача К’аламбура:
Как становится очевидным в самом конце, это — столетней давности
Для продвижения своей продукции Ш. заспамили своими баннерами в газетах всю Россию — многие годы на обложке самого читаемого в России журнала «Нива», прямо под названием журнала располагалась реклама их коньяка. Кроме прессы, она была на вагонах трамваев и поездов, на бортах пароходов, и даже в спектаклях персонажи просили подавать только шустовский коньяк.
В итоге продукция стала знаменитой не только в России, но и за границей, неоднократно получала награды на международных выставках. В 1912 году фирма «Н. Шустов и сыновья» стала поставщиком двора Его Императорского Величества.
Большей популярности в России не имел ни один производитель алкогольных напитков.
Модифицированное приложение Mi Home
Провидению было сегодня угодно, чтобы я совсем по другому поводу переходя по ссылке, натолкнулся на модифицированное приложение Mi Home, в котором решается главное неудобство умного дома «Сяоми» — разделение устройств на европейские и китайские, на которое я уже
После установки в приложении появились чайник и очиститель воздуха, несмотря на выбранный в качестве региона Китай.
Это просто чудо
Что интересно, «Яндекс.Станция» тоже увидела новое устройство — в списке появился очиститель воздуха, которым, впрочем, управлять не особо интересно. А вот умный помощник «Алекса́» опять подвела, ничего нового найти не смогла и единственное, чем получается через неё управлять — пылесос.
«Рельефный Зоологическій Атласъ»
Книга не в идеальном состоянии, поэтому я решил сканировать только таблицы с цветными изображениями животных — на них утраты сказались менее всего. Результат в формате ПДФ можно скачать с моего сайта.
Кстати, оцените объём работы, который пришлось проделать издателю — 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, я ещё их сюда не перенёс (та ещё будет работка) и нет заметок, которые я писал в блоге на платформе ЖЖ. Кстати, можно будет попробовать их перенести автоматически, надо бы подумать над этим.
Из графиков можно сделать несколько выводов:
Надеюсь, темпы я не снижу, так как в голове есть огромный объём того, что хочется сюда вынести, правда формализовать это непросто, но я буду пытаться.
Y2K79
«Проблема
Проблемой (непонятно насколько реальной) тогда озаботились абсолютно все, государства выделяли деньги для её исправления, возможно благодаря этим усилиям ничего страшного не случилось. Я с той проблемой столкнулся минимально, уже постфактум, да и то, только потому что программировал на Перле.
Не знаю как сейчас, а тогда на Перле для получения даты часто использовали функцию localtime, шестой по порядку элемент которого совпадал с двумя последними цифрами года. Обычным способом вывода даты в то время был такой код:
my ($sec, $min, $hour, $mday, $mon, $year) = localtime;
printf "%d-%d-%d\n", $mday, $mon, '19'.$year;Атомными станциями такие программы, разумеется, не управляли, но править их всё равно пришлось, мы просто заменяли конкатенацию сложением с числом «1900».
Недавно я об этом вспомнил. Мы разбирались с ФИАСом — российской базой данных адресов, там у каждого адреса есть период его существования: начальная дата — когда адрес появился (например, дом построили) и конечная — когда исчез (дом снесли).
И оказалось, что «06.06.2079» в этой базе имеет магическое значение — если конечная дата содержит это значение, считается, что адрес существует. Сейчас все программы, обрабатывающие адреса из ФИАСа используют это значение как признак.
В общем, через 59 лет российских программистов, если таковые будут ещё существовать, ждёт работа по замене этой константы на другое значение, конечно если хоть одна из программ, которые мы сейчас пишем, проживёт столько. Впрочем, если
RHCP — Californication
Многими утверждается, что музыка первой четверти жизни, какой бы плохой она ни была по современным меркам, всегда воспринимается некритично — этакий вариант импринтинга. То, чем фанател в детстве и юности, будет будить тёплые чувства вечно.
Всегда считал, что не подвержен музыкальной ностальгии. «АукцЫон», «Пикник», «ДДТ», «Аквариум», «Агати Кристи», «Наутилус Помпилиус» и остальное, что слушал до дыр, на повторе в детстве и юности, всё
Тем не менее, слушая недавно «Калифорникейшн» в исполнении великолепного гитариста Александра Мисько, понял, что ну вот она моя ностальгическая песня. Выпущена более 20 лет назад, до сих пор кажется актуальной и великолепной. Судя по тому, что её крутят по радио, не я один так думаю, но что это доказывает? Плохие песни там тоже крутят, и старые, и новые.
Может она давно устарела и так же нелепа сейчас на слух, как синтезаторные «спецэффекты» в советских фантастических фильмах, а мне всё кажется, что она шедевр, играющий на струнах моего сердца?
Старые газеты
Вся процедура довольно долгая, спешить нельзя, поспешишь — порвёшь бумагу. Начинаю я с того, что аккуратно отделяю листы один от другого, разворачиваю, кладу на обычную офисную бумагу (она будет впитывать излишнюю влагу) и опрыскиваю водой из пульверизатора для цветов.
Потом самая сложная работа, — постепенно расправляя газету, пройтись по ней утюгом, чтобы максимально разгладить все морщинки. Сильно лучше не становится, но исходный материал
Настоящие реставраторы газету бы аккуратно промыли, распрямили, потом просушили в специальном прессе между двумя листами мягкого материала, но повторюсь — эта газета таких усилий не стоит.
Лист сохнет, через несколько часов возвращаюсь проверить результат — иногда некоторые места надо смочить и прогладить заново и так несколько раз. Самые грязные места я поливаю особенно обильно и прохожусь губкой, иногда грязь удаётся убрать, но бывает, что она въедается слишком сильно.
Грязь и типографская краска с газеты в процессе налипает на утюг, это надо обязательно контролировать, один раз я не уследил и размазал
«Отрывки» такого качества никому не нужны — ни хозяину чердака, ни мне, ни археологам, ни коллекционерам. Поэтому всё понравившееся я вырезаю ножницами, ещё раз проглаживаю, сканирую и выбрасываю.
Единственное исключение — статья про выборы Гитлера 1934 года, заметку о таком поворотном для нашей страны событии я заламинировал и повесил на «доску материальных предметов» — есть у нас дома пробковая доска, куда мы всякую материальную мелочёвку из жизни вешаем.
Всё достойное дальнейшей жизни оставляю, обговаривая этот момент с хозяевами чердаков, правда редко
Степени оскорблений
Что оскорбительнее — «идиот», «имбецил» или «дебил»? Ответ даёт переводчик книги Пола Оффита «Ящик Пандоры»:
В начале
1900-х годов французский психолог Альфред Бине разработал тест для оценки умственного развития. Несколько лет спустя его переработал исследователь из Стэнфорда и переименовал в тестСтэнфорд-Бине.
В тесте
Стэнфорда-Бине idiot назывались люди с IQ 0—25, imbecile — с IQ 26—50, а затем moron — с IQ 51—70. Прим. перев.
Таким образом «имбецил» примерно в два раза оскорбительнее «дебила» (moron), а «идиот» — в четыре.
«Алиса»: после трёх дней использования
Горько это признавать, но после трёх дней использования голосовой помощник от «Яндекса» всё больше разочаровывает.
Горько, потому что потенциально это потрясающий отечественный продукт, у которого на русскоязычном рынке пока нет конкурентов.
Мы с дочкой используем «Алису» каждый день, утром и вечером. Пока наш опыт использования — считанные дни, но уже чётко видны довольно существенные недостатки.
Самый главный — «Алиса» постоянно теряет сеть. Иногда замолкает посредине сказки, продолжая не с того места, на котором остановилась, иногда конкретно говорит, что не видит сети вайфай. При этом она лежит на столе рядом с «умной» лампой «Сяоми» и роботом «Вектором», которые ни разу не были замечены за потерей сети.
Второе — время реакции. Если амазоновская «Але́кса» реагирует почти моментально, то «Алиса» в сравнении сильно проигрывает, не знаю в чём проблема, но задержки некомфортные.
Третье — попытки «Алисы» хохмить меня окончательно заколебали. «Станция» в формате «мини» немного глуховата и я сильно утомляюсь от нашего нелепого разговора — пытаюсь дать команду всё повышая голос, в ответ — по 2—3 фразы, не имеющие никакого отношения к отданной команде.
По сумме — я бы её немедленно продал, было бы чем заменить. Посмотрим что получится у «Мейла» с её «Марусей», у моей подруги как раз она скоро появится.
:———)
Шесть лет назад Артём Поликарпов, как он сам утверждает придумал
Артём, рад сообщить, что я смог улучшить твой результат! В стандарте Юникод 6.1 есть символ «тройное длинное тире», что в три раза более «вип», чем твои
К сожалению, мой «Макбук» недостаточно лакшери, чтобы поддерживать этот символ, но в смартфоне под Андроид символ отображается.