эгея

Начинаю выздоравливать

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

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

13 комментариев

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

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

Дело в том, что в движке, который я использую для своего дневника, для проигрывания аудио используется библиотека «Жуэль», а её текущая версия, в свою очередь использует старую версию библиотеки «howler.js», в которой есть вот такой код:

self._navigator = (typeof window !== 'undefined' && window.navigator) ? window.navigator : null;
var checkOpera = self._navigator && self._navigator.userAgent.match(/OPR\/([0-6].)/g);
var isOldOpera = (checkOpera && parseInt(checkOpera[0].split('/')[1], 10) < 33);

Проблема в регулярном выражении OPR\/([0-6].) и в версии «Оперы». Недавно версия перевалила за 100 и эта регулярка, вместо корректного номера, стала возвращать «10».

Из-за этого третья строка считает мою «Оперу» слишком старой (потому что 10 меньше 33), чтобы поддерживать проигрывание файлов MP3.

Заменил у себя на сайте howler.js на актуальную версию и всё заработало. Заодно предложил патч в «Жуэль», надеюсь примут оперативно.

4 комментария

Моя тема для «Эгеи»

Вчера выложил свою тему оформления для движка «Эгеи». Меня давно просили, а вчера был очередной комментарий на эту тему, ну я и сделал это наконец. Тему надо положить в папку user/themes/bolk, выбрать её в настройках блога и сбросить кеши.

5 комментариев

Определение ширины и высоты файла JPEG

В «Эгее» есть какой-то плавающий баг, из-за которого иногда не заливаются файлы 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');
        }
    }
}

5 комментариев

AVIF в «Эгее»!

Как говорится, если нельзя, но очень хочется, то можно. «Эгея», как я писал не понимает формат AVIF, но мне его удалось всё-таки в неё вставить, причём даже малой кровью.

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

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

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

Красно-белая церковь с разноцветными луковичными куполами и золотыми крестами на фоне голубого неба с белыми облаками, вид снизу через каменную стену и металлический забор.
Моя фотография храма Василия Блаженного (1555—1561 гг.) из заметки «Красная площадь без людей»

Итак, «Эгея» не поддерживает AVIF, но я её в «Эгею» вставил. Как же мне это удалось?

Дело в том, что «Эгея» поддерживает формат SVG, а SVG поддерживает внутри себя растровую графику, в том числе вставленную через протокол «data». Протокол «data» — это картинка, закодированная в текстовую строку, вида data:mime/type;encoding,encoded_data.

Вообще, SVG поддерживает и внешние ресурсы (то есть в теории способен подгрузить картинку снаружи), но при вставке через тег img (как в «Эгее») в нём это запрещено по соображениям безопасности.

Поэтому мысль такая — переводим графику в AVIF, кодируем в base64 («data» так умеет, а иначе бинарные данные не вставить), из-за кодирования они увеличатся на 33%, но даже при этом овчинка выделки стоит, а потом получившееся запихиваем в SVG.

Для конвертации я написал вот такой небольшой 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, вставляю его драг-н-дропом в редактор «Эгеи». Не знаю насколько у меня такой способ приживётся, буду пока считать эту запись тестовой.

Дополнение: уже сообщают, что в 15-й и ниже Айос ничего не видно.

13 комментариев

Формат AVIF и «Эгея»

Есть такой современный формат графики — AVIF, который родился из видеоформата AV1. Интересен он тем, что даёт иногда существенную выгоду от использования — в моём непоказательном эксперименте на первой попавшейся картинке он уделал формат JPEG на порядок).

Вместе с тем он неплохо поддерживается современными браузерами — 79% по данным сайта CanIUse. Это ещё без учёта полифилов.

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

Таблица поддержки браузеров: Chrome, Edge, Safari, Firefox, Opera, IE и мобильные версии показывают версии с поддержкой (зелёные), частичной (жёлтые) и отсутствием (красные).
Уровень поддержки браузерами формата графики AVIF

У меня возникла хорошая, на первый взгляд, идея чуть упростить себе жизнь через модуль mod_rewrite веб-сервера «Апач» («Эгея» его требует, у меня на хостинге он тоже используется) при помощи примерно такого правила:

<IfModule mod_rewrite.c>
AddType image/avif .avif

RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/avif
RewriteCond %{REQUEST_FILENAME} \.jpg$
RewriteCond "%{REQUEST_FILENAME}.avif" -s
RewriteRule ^.*$ $0.avif [END,T=image/avif]
</IfModule>

Что тут написано? Если браузер поддерживает формат AVIF (смотрим в заголовке), и запрашивает JPEG (определяется по расширению), и существует файл ненулевой длины с расширением .avif (то есть image.jpg.avif, например), то отдаём ему AVIF.

Хорошо работает, пока в папке с картинками лежит только image.jpg.avif, как только кладёшь ещё и image.jpg — перестаёт, отдаётся только она. Вчера час наверное думал что не так, пока наконец не понял — поверх «Апача» на хостинге стоит nginx, а ему мои правила по барабану.

Если картинки по урлу нет, то nginx отдаёт запрос дальше в «Апач», срабатывает правило, отдаётся AVIF, как только кладёшь JPEG, nginx его видит, отдаёт по урлу, не спрашивая «Апач» ни о чём.

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

2 комментария

Как оставить комментарий

Давно знаю, что многим неочевидно как оставить комментарий у меня в блоге. Время от времени мне кто-нибудь пишет в личку с этим вопросом и я утомился отвечать индивидуально.

Пишу для всех сразу: чтобы оставить комментарий под любой из заметок, надо написать текст, а потом нажать, например, на конвертик под текстовым полем (на него указывает зелёная рука на скриншоте). Там надо будет ввести имя, которым вы хотите представиться, и адрес электронной почты. Если почты нет, напишите что-нибудь похожее, типа «mail@example.org».

Интерфейс формы «Ваш комментарий» с кнопкой «Отправить» и иконками входа через Telegram, Twitter, Facebook, VK и email; зелёная рука указывает на иконку email.
Жмём туда, куда указывает зелёная рука

Более продвинутый способ — нажать на кнопку логина через социальные сети. К сожалению, мой ответ (или комментарии других пользователей) вы никуда не получите, зато комментарий будет с вашим юзерпиком.

4 комментария

Тёмный режим

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

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

Дополнено: подкорректировал цвета, плюс сегодня вышла новая «Эгея», переехал на неё.

7 комментариев

Cookie в PHP 7.4

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

Выяснилось, что плюс появился сам собой, люди его и не думали ставить. Так я понял, что столкнулся с каким-то багом.

Сравнение значений HTTP-заголовков: в левом — "test=test+test%2Btest", в правом — "test=test%20test%2Btest", что демонстрирует разное кодирование пробелов и плюсов в URL.
Слева как куки ставились до ПХП 7.4, справа — как ставятся теперь, пробел кодировался как «+», «плюс» — как «%2B»

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

Проблема воспроизводится у тех комментаторов, которые оставили свой первый комментарий до того, как мой сайт перешёл на ПХП 7.4. В этой версии сменился способ кодирования пробела в «куках» (см. на скриншоте) — был +, стало %20.

В принципе, можно вернуть «статус-кво» следующим кодом:

if (strpos($_SERVER['HTTP_COOKIE'], '+') !== false) {
    parse_str(strtr($_SERVER['HTTP_COOKIE'], ['; ' => '&']), $_COOKIE);
}

Но хорошо бы внедрить в движок блога код, который будет перекодировать такие куки у пользователей.

4 комментария

Перепись «Эгей»

Кратко: найдено 1160 блогов, из непустых изготовлен файл OPML с 929 адресами.

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

  1. в список теперь входят и те блоги, которые установлены не в корень сайта, ранее я их для простоты обработки отбрасывал;
  2. в прошлый раз я совсем забыл, что бывают и англоязычные «Эгеи», теперь я их ищу по фразе Powered by Aegea, нашлось много нового;
  3. странно, но свою лепту внесли и украинские/белорусские поисковики — добавили несколько новых ссылок, я ожидал, что «Гугл» в этом деле их всех превзойдёт, но нет, чтобы что-то найти во всей полноте, надо искать сразу везде;
  4. попросил список блогов с сайта, куда отсылаются анонсы постов, сделанных в «Эгеях» 2.7 и выше;
  5. добавил в список и живые блоги из проекта коммерческого хостинга блогов на базе «Эгеи».

В итоге получился список из 1160 ссылок. Из этого списка я убрал пустые и дубликаты одного блога на разных хостах и из оставшихся 929 адресов сделал OPML-файл.

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

Скриншот поста в блоге с заголовком «Boy, а как вы сюда попали?» и текстом о тестировании движка, где автор просит не рассказывать никому о ссылке.
Тайна твоего адреса умрёт вместе со мной (нет)

А ещё у сообщества «Эгеи» появился свой чат в «Телеграме», присоединяйтесь!

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

10 комментариев

Данные по «Эгеям»

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

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

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

Столбчатая диаграмма: значения для категорий 4.3 (1), 5.2 (1), 5.3 (45), 5.4 (61), 5.5 (42), 5.6 (262), 7.0 (122), 7.1 (192), 7.2 (114), 7.3 (93), 7.4 (25); первая колонка ??.
Распределение используемых версий ПХП, в некоторых случаях версию определить не удалось

Первым делом посмотрел у каждого блога версию ПХП, некоторые сайты отмолчались, но бо́льшую часть удалось проинспектировать. Распределение близко в нормальному, за исключением версии 5.6, которая необъяснимым образом сохраняет свою популярность, несмотря на то, что уже давно снята с поддержки.

HTTP-заголовок с версией PHP 4.3.7, выделенной синим, и информацией о сервере Apache/1.3.31, дате 16 марта 2020 года и модулях mod_deflate и rus/PL30.20.
«Эгея» версии 2.1 на ПХП версии 4.3.7, в качестве веб-сервера используется «русский» Апач, уже мало кто помнит что это такое

Любопытно, что нашёлся настоящий старичок — заброшенный блог на «Эгее» 2.1 с версией ПХП 4.3.7! Владелец не справился даже с его установкой — первой страницей открывается инсталлятор.

Столбчатая диаграмма показывает рост значений с 18 до 417 в период с 2.1 по 2.8, затем снижение до 130 к 2.9; ось Y до 450, ось X — даты.
Распределение используемых версий «Эгей», некоторые сайты в момент тестирования не работали, их версия помечена вопросом

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

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

Столбчатая диаграмма показывает распределение значений по времени: пик 572 в +03:00, далее 96 в +04:00, 85 в +00:00, 79 в +05:00, 73 в +02:00, остальные значения от 1 до 37.
Распределение установок «Эгей» по часовым поясам, пик находится на «+03:00», часовой пояс, например, Москвы

Следующее, что я решил посмотреть — распределение «Эгей» по часовым поясам. Как видно из графика, большинство блогов живёт по московскому времени и наверняка находится в центральной части России, хотя третий пояс есть и во многих других странах. Замечу, что есть и экзотика — один блог в поясе «+05:30», это Шри-Ланка и Индия.

Столбчатая диаграмма показывает рост значений с 1 в 2009 году до пика 362 в 2019, затем снижение до 70 в январе 2020 и рост до 146 в марте 2020.
Степень живости блогов на движке «Эгеи»

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

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

Оставить комментарий

Эге-ге-я

Для лиги ленивых: найдено 768 блогов, есть файл OPML.

Горизонтальная столбчатая диаграмма: Яндекс — 236, Рамблер — 172, Гугл — 102, Бинг — 45, Мейл.ру — 6.
Количество «Эгей», найденных различными поисковыми системами. Лидирует «Яндекс», отстаёт «Мейл»

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

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

Менее надёжный находит и мой блог тоже, и даёт 1068 ссылок. Если суммировать оба метода, то в совокупности получается 1288 записей, где бо́льшая часть — действительно блоги на «Эгее». Неидеальная точность проистекает из самого метода — я задаю строку поиска "Движок — Эгея" (стандартная строка, выводится стандартно на каждой странице), а это, очевидно, недостаточно уникальная строка.

Дальше список, полученный вторым методом, можно проредить скриптом — убрать все сайты, к которым не удаётся подсоединиться и те, которые не содержат стандартный «подвал» «Эгеи»:

while read url; do
    wget -T1 -t1 -q -O- "$url" |
    fgrep -q -m1 blogengine.ru &&
    echo "$url"
done < aegea-candidates.log

Если потом выкинуть варианты одного сайта через http и https, а так же с www и без, то останется 768 блогов.

Есть такое мнение, что блоги на «Эгее» ведут люди, в основном, неординарные, которых стоит читать. Для тех, кто в это верит, я собрал весь список в файл OPML, добавьте в свою любимую РСС-читалку.

17 комментариев

Юзерпики в «Эгее»

Во второй раз занимаюсь разовой конвертацией блогов в формат «Эгеи», надо бы записать кое-какие вещи, а то забывается. Авось придётся в третий, опять придётся разбираться.

В основном обращаться приходится к трём таблицам, имеющим довольно говорящие названия: Notes — сами заметки, Comments — комментарии к ним (там же хранятся и авторы комментариев, единого профиля у них нет) и Aliases — адреса, по которым доступны страницы (в моей схеме в этой таблице нет поля Alias, куда и записывается сам адрес).

Краткая схема БД «Эгея» 2.5: таблицы Notes, Aliases, Comments с полями и связями; форматы (raw, calliope, nearden), пути к иконкам и аватарам, условие IsGIPUsed.
Основные поля основных таблиц «Эгеи» версии 2.9

Назначения полей, в основном, понятны из названий, кроме разве что поля Stamp — это временная метка создания чего либо в секундах (timestamp) и поля с префиксом GIP, об этом чуть ниже.

Если вам интересны метки (теги), то понадобятся ещё две таблицы: Keywords — где хранится русское название метки и её урл и NotesKeywords, таблица, связывающая метки и заметки.

Теперь про GIP. Если флаг IsGIPUsed в таблице Comments установлен в ноль, то это прежняя схема хранения автора комментарий — без юзерпика, чтобы юзерпик появился, надо выставить IsGIPUsed в единицу, в поле GIP записать сервис, через который была проведена аутентификация (facebook, vk или twitter), а в GIPAuthorID записать некий идентификатор пользователя во внешнем сервисе.

Юзерпик нужно положить в pictures/avatar/ с именем, составленным из полей GIP и GIPAuthorID, записанных через дефисоминус. Например: vk-1.jpg — это был бы юзерпик Дурова, создателя «Вконтакте», если бы он зачем-то зашёл хоть на одну «Эгею».

Тут есть одна интересная деталь. Дело в том, что у меня в блоге, когда он ещё работал на самописном движке, уже были юзерпики, были они и у Олега Петровича, блог которого я переносил сегодня ночью. Причём и у меня, и у Олега авторизация была своя собственная, не обязательно через те сервисы, которые поддерживает «Эгея». Как же мне удалось перенести юзерпики?

«Эгея» в этом месте имеет простой механизм расширений — в принципе в неё несложно добавить любой внешний механизм аутентификации, что я и сделал. Подобрал в папке system/theme/images/, где движок ищет картинки внешних сервисов, подходящую картинку (email.svg) и написал фейковый плагин для сервиса email, который положил в файл system/gips/email.php:

<?php

class E2GIPEmail extends E2GIP {
  protected $type = 'email';

  private function _get_instance() {
    return (object) [];
  }

  public function get_auth_url() {
    return '';
  }

  public static function get_profile_url($id, $link) {
    return false;
  }

  public function callback() {
    return true;
  }
}

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

Добавлено позднее: невероятно, но факт, оказалось, что GIP-плагины можно класть ещё и в users/gips/, что гораздо удобнее, так как в этой папке он не перетрётся при обновлении «Эгеи».

11 комментариев

«Глазелки» ★

Скриншот страницы блога «Глазелки: Путевой журнал» с заголовком «Архитектурный марафон #43. Бетьки. Церковь Владимирской иконы Божией Матери» и фото куполов храма на фоне неба.
Перерождённый на «Эгее» блог моего друга — «Глазелки.ру»

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

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

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

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

Рекомендую посетить обновлённые «Глазелки». Надеюсь Олег в скором времени напишет туда что-нибудь новое.

6 комментариев

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

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

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, я ещё их сюда не перенёс (та ещё будет работка) и нет заметок, которые я писал в блоге на платформе ЖЖ. Кстати, можно будет попробовать их перенести автоматически, надо бы подумать над этим.

Столбчатая диаграмма показывает рост с 1989 по 2020 год: пик в 2001 году (~1 млн), затем снижение, второй пик в 2010–2011 гг. (~850 тыс.), далее колебания до 2020 г. (~100 тыс.).
Совокупное количество символов (включая символы разметки) в заметках по годам

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

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

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

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

Столбчатая диаграмма показывает рост и спад значений с 1989 по 2020 год, с пиком около 700 в 2003 году и вторым пиком около 500 в 2010 году.
Количество заметок по годам

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

Оставить комментарий

Как я чужие тексты своровал

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

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

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

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

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

Скриншот XML-документа с обсуждением брендов: пользователь Lord_Randall и автор спорят о джинсах Levi's, логотипах на одежде и этикете стирки ярлыков, дата 22.09.2003.
Так выглядел изнутри импортированный в ленту моего блога текст Димы Смирнова

Чтобы понять откуда у меня чужие тексты, заглянул в резервную копию блога того времени, благо она у меня кочует с ноутбука на ноутбук в составе остального барахла. А ларчик просто открывался…

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

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

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

2 комментария

Обновился на бету «Эгеи» версии 2.9

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

Скриншот Finder macOS с папкой avatars: 15 миниатюр аватаров (мемы, лица, геометрические фигуры) и имена файлов email-...jpg; путь /Users/bolk/Sites/e2/pictures/avatars
Наконец-то скачал себе все аватары пользователей, до этого они хранились в облаке «Яндекса»

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

Разумеется, раз это бета, то могут быть баги, например. Я уже заметил, что блок «Избранное» не работает, как только Илья выпустит патч, сразу же накачу исправление. Патч выпущен, накатил новую версию, «Избранное» работает.

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

Другая заметная вещь — «глаз». Около него пишется количество прочитавших заметку. Не знаю в точности что это значит, но занятная штука, пусть будет (она отключается). У меня посещаемость после борьбы с аудиторией упала на два порядка и теперь составляет примерно 800 человек в прыжке, более обычная цифра — около 400—500 в день.

6 комментариев

Отключение антиспама

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

Заодно мы с поддержкой «Мастерхоста» наконец-то разобрались как сделать редирект с www.bolknote.ru на домен без www.

Оставить комментарий

«Ваш комментарий похож на спам»

Ребята, который комментируют мой блог (это не относится к тем, что читает через ЖЖ или Фейсбук), я знаю, что вы очень страдаете от так называемой «защиты от спама». К сожалению, у движка Эгеи, который я использую, нет никакой настройки на эту тему, но я обязательно придумаю как отключить эту защиту, потерпите немного.

11 комментариев

Переезд на HTTPS

Окно браузера с сообщением «Безопасное соединение» для bolknote.ru, сертификат COMODO CA Limited, TLS 1.2, первое посещение — 3 мая 2018 г.

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

Это меня раздражает. Обычно это автоматизируют, но у «Мастерхоста», где я сейчас беру хостинг, такой автоматизации нет, а самому мне её костылить претит. Поэтому я просто заплатил «Комодо» через каких-то посредников 1000 рублей и закрыл эту тему на два года.

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

10 комментариев

← 1 2 →