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

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

FFI: баг не будет исправлен?

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

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

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

Видимо, придётся жить с тем, что есть.

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

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

Первый параметр strcpy должен быть указателем на отдельно выделенную память достаточного размера. И в FFI есть метод для выделения памяти: FFI::new. Его и надо использовать вместо str_repeat.

Таким образом правильная работа с указателями должна выглядеть примерно вот так:

function strcpy(?string &$dst, string $src):void
{
    $len = strlen($src);
    // изготавливаем тип, в котором уместится копируемая строка
    $type = FFI::arrayType(FFI::type('char*'), [$len]);
    // выделяем место под изготовленный тип и преобразуем его в
    // указатель на «char», как того требует «strcpy»
    $destination = FFI::cast('char*', FFI::new($type));

    FFI::cdef('char *strncpy(char *dst, const char *src, size_t len);')
       ->strncpy($destination, $src, $len);
    // преобразуем область памяти в строку
    $dst = FFI::string($destination, $len);
}

$rock = "ROCK";
var_dump($rock); // «ROCK»
strcpy($rock, "SOCK");
var_dump($rock); // «SOCK»

Что тут происходит?

Мы хотим вызвать сишную функцию для копирования одной строки в другую. В месте, куда мы собираемся копировать, должно быть выделено достаточное количество памяти, мы её выделяем методом FFI::new, передавая ему на вход специально изготовленный тип — указатель на массив однобайтовых символов длиной c копируемую строку.

Тип, который мы изготовили, приходится преобразовывать — он у нас char*[…], а надо char*, мы работаем с Си, а это строготипизированный язык. После копирования преобразуем область памяти в пхпешную строку. Память, выделенная при помощи FFI::new, освободится автоматически.

«Пурген»

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

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

Дореволюционная реклама «Пургена», слабительного средства компании «Доктор Байер» (Будапешт)

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


Подпись владельца компании на бумагах на «Пурген», 1908 год

Я было подумал, что производитель, упомянутый тут, — известная сейчас компания «Байер» (поэтому я его и взял), но нагуглил более полную версию рекламы:

Никуда негодную поддѣлку и фальсификаты содержатъ всѣ тѣ коробки, которыя не снабжены синей бандеролью съ русской надписью и на которыхъ внизу на крышкѣ не помѣщена фирма Dr. Bayer és Társa Budapest. Коробка 65 коп., во всѣхъ аптекахъ.

Компанией «Dr. Bayer és Társa Budapest» (с венгерского «Доктор Байер и партнёр, Будапешт») управляли, по всей видимости, довольно известные в то время у себя на родине фармацевты — сначала Анталь Байер, потом его сын — Анталь Байер-младший. Предприятие владело несколькими патентами, завоевало медали на лондонских, парижских и будапештских международных фармацевтических выставках, а так же, по утверждению венгерской «Википедии», первым вывело на рынок лекарственные препараты в ампулах.

Автоматы газировки

Из «Фейсбука», из поста про коронавирус и многоразовые стаканы в советских автоматах газированной воды, хочу вынести интересное воспоминание о временах СССР. Текст ниже не мой.


Стакан газированной воды без сиропа стоил 1 копейку, с ним — 3

Знавал я в те далёкие времена весьма приблатнённого товарища, в обязанности которого входило обслуживать эти автоматы. Помню, некоторые тонкости из его рассказов. Выручку они принимали весом. Ссыпая в пластмассовое ведро и взвешивая безменом (молодому поколению поясню: вес монет СССР 1 коп — 1 грамм, 3 коп — 3 грамма).

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

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

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

 9 комментариев    131   1 д  

Столетние семена

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

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

Сѣмена дыни начала 20-го века садоводства «Восточная флора»

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

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

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

Реклама «Восточной флоры» в издании 1907 года «„Вся Волга“. Коммерческій справочникъ и общій адресъ-календарь»

Кстати, реклама «Восточной флоры», где был пакетик был куплен прошлым владельцем, легко находится на пятнадцатой странице издания 1907 года «„Вся Волга“. Коммерческій справочникъ и общій адресъ-календарь».

Оттуда мы узнаём, что в магазине был громадный выбор пальм, араукарий и цветочных растений, полный ассортимент цветочных, огородных, сельскохозяйственных и других семян, а так же адрес магазина — Николаевская площадь, дом Головиной (с адресацией тогда в Казани было всё очень плохо). Дом, кстати, существует и поныне, современный его адрес — Лобачевского, 6/27.

Управление увлажнителем

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

Так выглядит половина датчика открытия дверей; для работы требует хаб, с которым он соединяется по протоколу ЗигБи

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

Наклеил в спальню на балконную дверь (окно там не открывается). При открытии или закрытии двери датчик подаёт сигнал хабу по протоколу «ЗигБи», а хаб умеет программироваться на исполнение различных сценариев автоматизации.

Внешний вид созданной автоматизации, связывающий датчик и увлажнитель

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

 2 комментария    182   3 дн   xiaomi

Восстановление фотографий

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

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

Детская фотография моей двоюродной бабушки, «восстановленная» нейросетями

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

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

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

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

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

 8 комментариев    278   3 дн  

Карантин

Французская гравюра Огюста Раффе «Варварство и холера входят в Европу. Поляки сражаются, власти делают протоколы и Франция…»

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

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

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

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

 3 комментария    227   5 дн   COVID-19

Лавровый лист завода им. Семашко

Вкратце: на снимке раннесоветская этикетка лаврового листа 1924—1931 годов

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

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

Лавровый лист, выпущенный химико-фармацевтическим заводом им. Н. А. Семашко

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


Роман Романович Кёлер — промышленник, основатель российской фармацевтической промышленности, мануфактур-советник

Роман Романович открыл свою фабрику в 1882 году, положив таким образом ни много ни мало начало фармацевтическому производству в России. Продукция предприятия Кёлера была удостоена высших наград на Сибирско-Уральской художественно-промышленной выставке 1887 года, на Казанской научно-промышленной выставке 1890 года, на Всероссийской художественно-промышленной выставке 1896 года в Нижнем Новгороде и на Всемирной выставке 1893 года в Чикаго.

В 1918 году предприятие национализировали, а в 1928—1932 года перепрофилировали и модернизировали, был прекращен выпуск парфюмерных и косметических изделий. Фабрика несколько раз меняла названия и в настоящий момент известна как ОАО «Мосхимфармпрепараты» им. Н. А. Семашко».

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

«Санистероль»

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

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

Реклама из газеты «Камско-Волжская речь» 1908 года

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

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

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

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

Детская частная жизнь

Вкратце: есть ли у вас какие-то правила — что можно выкладывать о своих детях в интернет, а что нет?

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

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

Но эти видео — история более-менее приватная, их видим мы и бабушки-дедушки.

Теперь же я задумался над тем как и что писать о дочке тут — как она отнесётся к написанному, когда вырастет и существует ли уже такое явление как травля одноклассниками/одногруппниками за выложенное родителями в интернет?

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

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

Ранее Ctrl + ↓