Angie
Спросили как я отношусь к появлению Angie — отечественного форка известнейшего
Это минимальный набор инструментов, чтобы сделать любой сайт. Времена менялись, Перл сменился ПХП, тот уступил Пайтону, МайЭсКуЭль заменила МарияДБ, но аббревиатура держалась.
Всё сломалось, когда пришёл nginx и вытеснил Апач.
Мне было жаль LAMP, — аббревиатуру, которую я знал с начала веба, но теперь есть шанс, что она починится по крайней мере на территории нашей страны.
А если серьёзно, никаких заметных телодвижений ребята пока не сделали, поэтому не вижу повода о них разговаривать. В стране постоянно появляются форки известных западных продуктов (в реестре отечественного ПО они достаточно заметны) и с тем же постоянством исчезают.
Будем дрессировать нейросети
Мой интерес к искусственному интеллекту до сих пор был скорее частным — на работе мы этот класс алгоритмов почти не использовали, хотя и делали осторожные подходы к предмету. Но всё меняется — в последнее время активно исследуем тему, дошли даже до того, чтобы попробовать растить собственные модели. Всё это пока немного «на коленке», первые опыты — собираем своей первый стенд из того, что удалось быстро раздобыть.
Потом собираемся прикупить четыре «Теслы» T4, чтобы вставить их в серверный четырёхюнитовый корпус, но это всё быстро в наше время не раздобыть.
«Перемотка»
Вчера утром я поделился идеей поиска по всему, что человек
Программа называется «Перемотка» («Rewind»), работает по подписке — за двадцать долларов в месяц она будет локально сохранять всё то, что вы просматриваете, слушаете или смотрите с возможностью поиска.
К сожалению, я не могу её попробовать — требуется «Мак» на процессоре M1 или M2, а у меня «Интел», но я подумываю обновиться, если решусь, попробую обязательно. Думаю, она не понимает русский язык, но всё равно протестировать живое воплощение решения беспокоящей меня проблемы было бы очень интересно!
Анекдот на Пайтоне
У меня есть друг, которому я регулярно шлю шутки про «Вархаммер». Сам в этой теме не разбираюсь, но хочется думать, что его они веселят. А я — тот самый друг, которому шлют то же, но на тему программирования. Пару раз даже присылали мои собственные шутеечки.
Вчера прислали известный неприличный анекдот про Василия Ивановича и Петьку, но написанный на «Пайтоне». И хотя у меня довольно пуританский блог, анекдот так вырвиглазно написан, что пришлось его переписать.
Вот что мне прислали:
class Chapaev:
nyuans = True
def fuck(Class):
Class.nyuans = True
Class.ass.append('Dick')
class Petyka:
nyuans = False
ass = []
if Chapaev.nyuans == True and Petyka.nyuans == False:
Chapaev.fuck(Petyka)Как по мне, плохо написано примерно всё, мне очень не понравилось, так что держите, вот вам моя версия, которая, кстати, как мне кажется, более точно отражает суть анекдота:
Chapaev = []
Petka = []
dick = [20, Chapaev]
Petka.insert(*dick)
isNuance = Chapaev in Petka and Petka not in Chapaev
print(isNuance) // TrueНу и пока у меня ещё был запал, переписал на ПХП известнейший мем из фильма «ДМБ»:
class Gopher implements Countable
{
public function count(): int
{
return 0;
}
}
$gopher = new Gopher;
var_dump(count($gopher)); // 0
var_dump(empty($gopher)); // falseРазница между наукой и религией
Очень понравилось объяснение разницы между наукой и религией в книге «Отчаяние» Грега Игана:
Предположим, завтра всё человечество исчезнет с лица земли, и пройдет несколько миллионов лет, пока новые виды создадут свои религиозные и научные культуры. Что,
по-вашему, будет общего между новыми религиями и старыми — современными нам?
Полагаю, лишь некие этические принципы, возводимые к общему биологическому наследству: половому размножению, воспитанию детей, преимуществам альтруизма, ожиданию смерти. А если биология будет отличаться очень сильно, перекрытий может не быть вообще.
Однако, если мы подождём, пока новая научная культура придет к идее ТВ, тогда, я верю, насколько отличной ни выглядела бы та «на бумаге», она будет в конечном счёте математически сводимой к нашей ТВ — как любой первокурсник способен доказать, что все формулировки уравнений Максвелла описывают в точности одно и то же.
В этом и разница. Учёные начинают со споров, но приходят к согласию, независимо от культуры, к которой принадлежат.
Сегментация современного интернета
В конце девяностых—начале нулевых мы постоянно поправляли тех, кто считал, что веб и интернет — это одно и то же. Веб только начинался, мы как раз его делали (в Казани было очень мало крупных сайтов, к которым я не приложил руку — верстал, программировал бэк и фронт, администрировал, модерировал и так далее) и он был только малой частью интернета.
Кроме веба у нас тогда были:
- «аська» — сверхпопулярный мессенджер;
- почта — тогда она была важной частью интернета, мы очень часто переписывались по почте;
- «ньюсы» — тематические группы общения по протоколу «news» (NNTP);
- «айэрси» — IRC, специализированные чаты, вроде современных групповых чатов «телеграма»;
- «эфтипи» — FTP, протокол обмена файлами, где мы постоянно искали необходимый софт;
…и чёрт знает что ещё, о чём я мог забыть —
Я хочу сказать, что интернет был крайне сегментированной штукой. Например, не существовало никакого способа поискать
Поисковые машины, которые тогда появлялись, пытались
Потом пришла эпоха веба, и всё это отошло на второй план. Мы стали всё тащить в веб — мессенджеры, магазины, почту, тематические группы и так далее. В большинстве случаев этот способ доступа к сервисам стал первичным — браузер стали рассматривать как новую операционную систему.
Любопытно, что сейчас мы переживаем обратное явление — сегментация вернулась и даже усугубилась. У нас несколько ходовых менеджеров сравнимой популярности, плюс новые их разновидности, вроде «Дискорда», закрытые снаружи соцсети со специальными приложениями под них, да и вообще — приложения считаются первичным способом входа, а иногда и единственным для очень многих сервисов.
Я всё чаще, пытаясь найти
Скучаю по временам бума текстовых блогов, когда почти наверное всё интересующее меня можно было так или иначе найти, не выходя из веба.
Если пофантазировать, решить мою проблему можно, — сделать
Если потом поверх прикрутить хороший поиск и нейроассистента, в которого можно было бы сказать «ну
Кажется это может быть частью нейроангела — концепции, которую я обдумываю на досуге. Это сервис, который решает рутинные вопросы в жизни, предвосхищает проблемы и подсказывает лайфкахи, когда они действительно нужны. Приложение с синтетической житейской смекалкой, которое могло бы стратегически направлять человека в жизни.
Пора выкинуть ёлку
После Нового года соседи потихоньку стали выбрасывать ёлки. У большинства сейчас пластик, но традиционалисты тоже встречаются. Лично у меня не получается воспринимать пластиковую ёлку как символ праздника, душа к этому не лежит.
И с тех пор, как мы с женой решили, что хотим отмечать этот праздник, мы ставим исключительно натуральные деревья.
С натуральной ёлкой есть только одно неудобство — утилизация. А именно, когда оттаскиваешь уже сухое дерево через коридор квартиры и дома, оно цепляется за всё ветками и с него опадает очень много иголок, которые потом приходится убирать.
Мы с женой несколько лет назад придумали срезать ветки секатором и складывать их в большие мешки для мусора — пышная пихта помещается примерно в три стодвадцатилитровых мешка, а голый ствол вынести легко.
Очень удобно и быстро. Соришь и убираешься в одном месте, а само занятие ненапряжное и даже
AVIF в GD
Вчера ночью чах, в очередной раз, над форматом AVIF — мысль была в качестве эксперимента добавить его в наш документооборот — продукт, разработкой которого я управляю.
Сейчас, чтобы показать документ в браузере, мы его конвертируем в JPEG — дёшево, сердито и везде поддерживается. Но страницы получаются большими (200 с лишком килобайт каждая) и иногда грузятся дольше, чем хотелось бы. Вот я и придумал проверить гипотезу, что AVIF тут поможет.
Пока примотал реализацию на соплях, как концепт. Результаты, кстати, хорошие, можно посмотреть на скриншоте разницу:
Но пока мотал, наткнулся на прекрасное. 🤦🏻♂️
В ПХП есть несколько модулей для работы с картинками, но самых распространённых два — GD и Imagick. Я начал с GD, так как на виртуалке он собран с поддержкой AVIF (а Imagick — нет), по крайней мере сам модуль так утверждает:
var_dump(gd_info()['AVIF Support']); // true
var_dump(imagetypes() & IMG_AVIF); // 256Так же существует функция imageavif, что хороший знак — модуль устроен так, что если поддержки
Но при попытке сконвертировать картинку из JPEG в AVIF создавался файл нулевой длины, хотя функция возвращала true:
var_dump(imageavif(imagecreatefromjpeg('0.jpg'), '0.jpg.avif')); // trueGD это очень старый модуль, он родился, когда в PHP главенствовал процедурный модуль, поэтому его суть — функции; в PHP, если мы вызываем функции
array(4) {
["type"]=>
int(2)
["message"]=>
string(50) "imageavif(): AVIF image support has been disabled
"
["file"]=>
string(17) "Command line code"
["line"]=>
int(1)
}Я погуглил ошибку, но не смог быстро разобраться что с ней сделать, поэтому переключился на Imagick. Там всё завелось без особых проблем — заменил шестую версию на седьмую и поставил недостающие пакеты:
yum shell
> remove php-pecl-imagick-im6
> install php-pecl-imagick-im7
> install ImageMagick7-heic
> install libheif
> runВ этом модуле, кстати, проверка на поддержку AVIF делается вот таким немного неочевидным способом:
$isAVIFSupported = Imagick::queryformats("AVIF") !== [];
У нас с женой появилась новая любимая песня
Краткость — сестра брата жены деверя золовки
Никак не могу понять телеграммный стиль некоторых комментаторов под фото. Ощущение такое, что опять вернулись телеграммы, где оплата по словам и у людей туговато с деньгами.
Например, попадается фото, на нём — девушка, под фото комментарий из одного слова, например, «глаза!» (или «ноги!»). Кажется, это означает примерно следующее: «милостивые господа, позвольте обратить ваше внимание на прекрасные глаза этой незнакомки».
А что может означать комментарий «Баржа» под фотографией? Справедливости ради,
Что этим хотел сказать автор комментария?
Давал свою экспертную оценку видовой принадлежности судна? Запрашивал её? Может это выдающаяся баржа? Или у неё есть
Купоны
Сегодня до рабочего дня (я обычно приезжаю на работу загодя), выбирал себе крупный молоток на «Маркете» — за все годы у меня так и не завелось приличного. Обычно всё что надо забиваю либо молоточком из детского набора (это ещё из моего детства), либо обухом топора.
В это время рядом присел менеджер, которому нужно было
Так я узнал, что существуют люди, которые не знают, что в интернете можно поискать купон. В следующий раз планирую рассказать ему про карты с кэшбэком — на эту покупку у меня будет кэшбэк 5%.
Шутки шутками, но оказалось (были опрошены три проходящие мимо ни в чём не повинные жертвы), что таких людей много. Если вы тоже из них, то рассказываю.
В интернете есть много сайтов (а в «ВК» — пабликов), которые называются «купонаторы». На них собраны купоны для самых разных магазинов. Всегда, когда я вижу на сайте
Обычно так сильно не везёт, но сэкономив даже 100—300 рублей с покупки, я всё равно получаю
Титанобоа vs. мегалодон
Загадка про курицу и яйцо для меня вообще не загадка, да и с китом и слоном мне всё досконально ясно. Но есть предел и моим знаниям — он в вопросах шестилетнего ребёнка.
Сегодня дочка огорошила меня новым вызовом: «папочка, а кто победит — титанобоа или мегалодон?», ответа у меня пока нет, буду изучать вопрос.
Углеродно-кремниевая сегрегация
<meta name="robots" content="noai, noimageai">Роботы, конечно, пока не обладают самосознанием и такое ограничение не ранит ничьих чувств, но животных без самосознания всё равно защищают от притеснений. Интересно появятся ли технофилы, которые будут защищать права угнетённых алгоритмов или это пока чересчур? Учитывая современные тенденции, я бы удивился.
Я, конечно, понимаю из какой проблемы родились эти метки — среди биологических иллюстраторов есть мнение, что нейросети, которые обучались на их работах, по сути, воруют их интеллектуальную собственность, так как работы алгоритмов основаны на просмотре готовых работ.
Недовольство, конечно, будет нарастать и эти метки не решение — они мало что дают, разве что сгенерируют
Выглядит это как двойные стандарты, так как люди делают то же самое — буквально смотрят целую кучу чужих работ, а потом на их основе выдают
Объяснение того как это работает на самом деле сложнее и, такое ощущение, что большинству недоступно. Простому же объяснению на понятных метафорах ещё предстоит родиться, но не факт, что оно не устареет ко времени своего рождения.
Тем не менее, собака лает, караван идёт, мы считали, что роботы нас освободят от физического труда, а они всё больше начинают освобождать от интеллектуального. Но цепочка от проблемы до результата пока достаточно длинная, чтобы ещё успеть вкусно покушать, сидя на её конце со стороны постановки проблемы.
Определение ширины и высоты файла JPEG
В «Эгее» есть
Пока рабочая теория такая, что функция ПХП getimagesize (она возвращает тип изображения и его высоту с шириной) иногда выдаёт неправильные значения.
Опровергнуть или подтвердить эту теорию
Вот Илья и попросил написать меня такой код на чистом ПХП. Надеюсь это позволит продвинуться в изучении проблемы — код вошёл в одиннадцатую версию «Эгеи».
Выложу его у себя тоже, чтобы не потерялся, ну и может
function readJPEGWxH(string $filename): array
{
$file = new SplFileObject($filename);
if (!$file->flock(LOCK_SH)) {
throw new RuntimeException('Cannot lock the file');
}
if ($file->fread(2) !== "\xFF\xD8") {
throw new RuntimeException('Unknown format');
}
for (;;) {
$decoded = @unpack('H4segment/nlen', $file->fread(4));
if ($decoded === false) {
throw new RuntimeException('Unknown format');
}
['segment' => $segment, 'len' => $len] = $decoded;
// SOFn (Start Of Frame)?
if (preg_match('/^ffc[0-3]/', $segment)) {
$segdata = @unpack('Cbits/nheight/nwidth', $file->fread(5));
if ($segdata === false) {
throw new RuntimeException('Unknown format');
}
return [$segdata['width'], $segdata['height']];
}
// len = full lenght of segment except segment magic code
if ($file->fseek($len - 2, SEEK_CUR) !== 0) {
throw new RuntimeException('Cannot find start of frame');
}
}
}Концепт: текстовый «Инстаграм»
Смотрите какую прелесть отыскал в закромах — мой концепт текстового «Инстаграма». Придумался он мне летом
Тогда я этот концепт реализовать не смог — не было технической возможности, а сейчас можно бы, но пока лениво. У меня тогда не было доступа к необходимой нейросети, а сейчас наверняка
Идея была в том, чтобы сделать «Инстаграм» доступным в консоли, а поскольку (обычно) в консоль нельзя вывести картинку, то мысль была в том, чтобы выводить текстовое описание картинки на преобладающем цвете. Почти так же должны были бы обрабатываться и аватары — берём текстовое описание, из него существительные, из них пробуем искать подходящий эмодзи из базы.
Весь остальной интерфейс, включая игры со шрифтами («𝓘𝓷𝓼𝓽𝓪𝓰𝓻𝓪𝓶», например) рисуется символами Юникода — там всё нужное есть.
Золото
Некоторые читатели ещё помнят моё увлечение поиском всяких предметов металлоискателем,
Поэтому когда я от одной знакомой услышал, что ей дед в наследство
Оказалось, что это реально, но монеты надо найти — она не помнит где точно они лежат. Время от времени я напоминал о себе и вот недавно удалось в первый раз взять в руки настоящие золотые монеты!
Дед оставил ей в наследство четыре монеты периода Николая Второго. Вопреки расхожему мнению, квартиру на них не купить, — я не специалист, но примерно прикинул по аукционам, — эти монеты тянут
В общем, золото в руках подержал, поставил, так сказать, галочку. 👍
AVIF в «Эгее»!
Как говорится, если нельзя, но очень хочется, то можно. «Эгея», как я писал не понимает формат AVIF, но мне его удалось
Изображение ниже я взял из своей заметки про Красную площадь в коронавирусный период. В оригинале оно весит 1,1 мегабайт в формате JPEG, в этой заметке используется сконвертированное изображение размером в 179 килобайт. Почувствуйте разницу.
Добавлено позднее: в небе, кстати, я отчётливо вижу артефакты сжатия, надо играть с параметром качества, прежде чем использовать. Но в остальном картинка как будто бы не попортилась.
Конечно, если ваш браузер не поддерживает AVIF, это будет не та разница, на которую я надеялся. Напишите мне, кстати, если картинка у вас не отображается — я хотел бы узнать что у вас за браузер и насколько он современный.
Итак, «Эгея» не поддерживает AVIF, но я её в «Эгею» вставил. Как же мне это удалось?
Дело в том, что «Эгея» поддерживает формат SVG, а SVG поддерживает внутри себя растровую графику, в том числе вставленную через протокол «data». Протокол «data» — это картинка, закодированная в текстовую строку, вида data:mime/type;encoding,encoded_data.
Вообще, SVG поддерживает и внешние ресурсы (то есть в теории способен подгрузить картинку снаружи), но при вставке через тег img (как в «Эгее») в нём это запрещено по соображениям безопасности.
Поэтому мысль такая — переводим графику в AVIF, кодируем в base64 («data» так умеет, а иначе бинарные данные не вставить),
Для конвертации я написал вот такой небольшой bash-скрипт (для работы требуется пакет ImageMagick):
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <picturename>"
exit 1
fi
NAME="$1"
NEWNAME="${NAME%.*}.svg"
WH=( $(identify -ping -format '%w %h' "$NAME") )
if [[ "$NAME" == *@2x* ]]; then
WH=( $(( ${WH[0]} / 2 )) $(( ${WH[1]} / 2 )) )
fi
cat<<XML > "$NEWNAME"
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 ${WH[*]}" width="${WH[0]}" height="${WH[1]}">
<image width="${WH[0]}" height="${WH[1]}"
href="data:image/avif;base64,$(convert "$NAME" "avif:-" | base64)"/>
</svg>
XML
echo "$NAME" to "$NEWNAME" was converted.Последовательность теперь у меня такая — готовлю графику в более привычном формате, запускаю скрипт, получаю файл SVG, вставляю его
Дополнение: уже сообщают, что
Биполярные сказки
У нас дома несколько «Алис» — дочка очень любит слушать сказки и всякие подкасты том углу квартиры, где она находится в данным момент. Естественно так получается, что я иногда
Есть такое мнение, что сказки должны
Дочка сейчас болеет ветрянкой, я провожу с ней времени больше, чем обычно и сказок наслушался сверх всякой меры. Сначала слушаешь сказку про то как мужик медведя обманул, — посыл такой, что мужик молодец, а медведь просто тупой, потом — про то как плохо обманывать, рассчитывать на врунов нельзя, дружить с ними не надо.
Ёклмн, да вы определитесь уже — хорошо обманывать или плохо? Или вообще плохо, но медведей обманывать можно? Ну, наверное, даже не буквально медведей, тут наверное
Если дети в сказках и улавливают
Кирпич «РЕЧИЦА»
Хочется вспомнить, что у меня блог ещё и про кирпичные клейма, тем более, что есть о чём написать — мы с Алмазом Гараевым (блог «Казань заброшенная») ещё весной забрались туда, куда не ступает нога приличного человека и я там наснимал несколько новых для себя клейм.
Одно из них, — «РЕЧИЦА», — нашлось на обломке кирпича. К счастью клеймо сохранилось полностью и найти информацию о нём труда не составило.
Речица — название деревни в Думиничском районе Калужской области. В 1897 году дворянин Владимир (по другим источникам — Владислав) Денисович Коссаковский построил в ней завод огнеупорного кирпича — глину там добывали давно поэтому логика в его решении была.
В революцию завод был национализирован и проработал ещё долго — до Великой отечественной войны, пока в 1942—43 годах деревня не была полностью разрушена в результате боёв. После войны завод перенесли в посёлок Марьинский, а Речица стала потихоньку вымирать.
Сейчас в Речице никакого производства нет, но на спутниковой карте видно несколько десятков домов, значит жизнь в ней ещё теплится.
Суперпосудомойка
Я обычно достаточно тщательно выбираю технику — много читаю, смотрю обзоры, пытаюсь определить для себя важные критерии, чтобы по ним потом выбрать подходящую модель.
Такая стратегия ещё не давала сбоев, но иногда выбранная модель настолько радует
Каждый раз, когда включаю нашу посудомойку, радуюсь её суперспособности, — в пол она светит не просто одним светодиодом, означающим, что она работает, а часами, где видно сколько времени осталось до конца.
Это как раз пример функциональности, которую я совершенно прохлопал, пока изучал посудомойки по обзорам, но которая досталась мне случайно, — я узнал, что такое бывает уже на этапе покупки.