{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блоги: заметки с тегом Эгея",
    "_rss_description": "Автоматически собираемая лента заметок, написанных в блогах на Эгее",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/blogengine.ru\/blogs\/tags\/egeya\/",
    "feed_url": "https:\/\/blogengine.ru\/blogs\/tags\/egeya\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/blogengine.ru\/blogs\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "137458",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/think-on-45\/",
            "title": "Думаем дальше № 45 — «Комната интеллектуальной разгрузки» c Михаилом Руденко",
            "content_html": "<p>С Михаилом Руденко обсуждаем его модель ДКЦП, принятую в ней терминологию, а также её возможное приложение к Эгее.<\/p>\n<p>Все выпуски подкаста:<br \/>\n<a href=\"https:\/\/podcasts.apple.com\/us\/podcast\/думаем-дальше\/id1744862171\">Эпл<\/a> · <a href=\"https:\/\/www.youtube.com\/playlist?list=PLl7kvlp_qh0j9uzQGU2ws4DkBWdbjY1_d\">Ютюб<\/a> · <a href=\"https:\/\/music.yandex.com\/album\/29069497\">Я.Музыка<\/a> · <a href=\"https:\/\/thinkon.mave.digital\">Мейв<\/a> · <a href=\"https:\/\/cloud.mave.digital\/51724\">РСС для подкастного приложения<\/a><\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n  <tr>\n    <td style=\"text-align: left\">0:00<\/td>\n    <td style=\"text-align: left\">Что такое <a href=\"https:\/\/ponedelnik.ru\/dkcp-lection\">ДКЦП<\/a><\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">7:55<\/td>\n    <td style=\"text-align: left\">Что вообще значит «модель»<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">12:32<\/td>\n    <td style=\"text-align: left\">Польза лингвистических инструментов анализа<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">15:43<\/td>\n    <td style=\"text-align: left\">«Проблема», «задача» или «конфликт»? Объяснение на сырке<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">24:11<\/td>\n    <td style=\"text-align: left\">Обсуждаем эфир с Кириллом Мышкиным и какие там конфликты в его боте<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">40:17<\/td>\n    <td style=\"text-align: left\">Инварианты обмена: зачем так называть и почему их именно девять<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">55:51<\/td>\n    <td style=\"text-align: left\">Как применить ДКЦП к Эгее<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">1:04:19<\/td>\n    <td style=\"text-align: left\">Эгея и «маниакальное внимание к мелочам»<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: left\">1:12:03<\/td>\n    <td style=\"text-align: left\">Аудитория Эгеи и что у неё общего с Роллс-Ройсом<\/td>\n  <\/tr>\n<\/table>\n<p>Виспер и ЧатГПТ послушали выпуск за вас и делятся выводами:<\/p>\n<blockquote>\n<p>В этом выпуске обсуждается «Дворец культуры ценностного предложения» (ДКЦП) — методология и модель, созданная Михаилом. Илья читает статью Михаила и делится впечатлением: идея кажется очень интересной и полезной, но изложение чрезмерно сложным, будто бы его можно было объяснить проще. Михаил соглашается, что тема действительно непростая, и рассказывает, что намеренно сделал акцент на нюансах, которые обычно теряются при упрощениях, пусть и ценой усложнения. Суть модели — рассматривать любую продажу или обмен как систему взаимосвязанных элементов, которые помогают понять, что именно мешает или помогает сделке состояться.<\/p>\n<p>Главное в подходе — мыслить через девять «инвариантов», составляющих структуру обмена. Это как чертёж или глобус: глядя на модель, можно увидеть целое явление, которое иначе слишком абстрактно. В центре внимания оказывается конфликт — противоречие между желанием и препятствием. На примере белкового сырка Михаил показывает, что ценность продукта проявляется именно в том, как он помогает разрешить конфликт (хочу восполнить белок, но неудобно готовить коктейли). Такие конфликты не всегда очевидны и формулируются не сразу, а часто обнаруживаются в исследовании клиентского опыта.<\/p>\n<p>Много внимания уделено и терминам. Илья сомневается в словах «модель» и особенно «инварианты», ведь они звучат тяжеловесно и неочевидно. Михаил поясняет, что «инвариант» здесь не содержание, а форма: как неизменные категории обмена, которые всегда есть (участники, объект, коммуникация и т. д.), даже если их наполнение меняется. В повседневной работе он чаще говорит «блоки» или «элементы дворца». Также они обсуждают, зачем нужны редкие термины — иногда это вопрос брендинга, иногда — способ точнее схватить смысл.<\/p>\n<p>Под конец Илья предлагает применить ДКЦП к его собственному проекту — движку для блога «Эгея». Он делится историей его появления и сомнениями: проект для души, но хочется понять, как из него можно получать больше пользы и денег, не разрушая его смысл. Михаил показывает, как модель может помочь: выявить ценности (например, внимание к мелочам и аутентичность), определить вклад клиента (не только деньги, но и усилия при установке), найти сегменты аудитории (редакторы, дизайнеры, айтишники) и увидеть, какие конфликты продукт решает.<\/p>\n<p>Основные идеи и выводы:<br \/>\n— ДКЦП — это модель обмена, позволяющая увидеть структуру и взаимосвязи в любой продаже или сделке.<br \/>\n— Центр модели — конфликт: противоречие между «хочу» и «мешает», которое продукт должен разрешать.<br \/>\n— Девять «инвариантов» — неизбежные элементы любого обмена; термин спорный, но отражает идею постоянных категорий.<br \/>\n— Лексика и термины важны: язык задаёт рамку мышления и помогает точнее видеть смысл (гипотеза Сепира—Уорфа).<br \/>\n— Модель полезна не только для бизнеса, но и для личных проектов: помогает выявить ценность, аудиторию, сценарии применения.<br \/>\n— Необязательно менять продукт под рынок — можно искать аудиторию, у которой ценности совпадут с твоими.<br \/>\n— Подражание и символический смысл (например, использовать инструмент «как у Бирмана») тоже могут быть драйверами ценности.<\/p>\n<p>Такой выпуск будет интересен предпринимателям, продакт-менеджерам, дизайнерам и редакторам, а также всем, кто делает свои проекты и хочет системнее понимать, как формируется ценность и что мешает продукту находить отклик у людей.<\/p>\n<\/blockquote>\n",
            "date_published": "2025-09-16T13:16:30+05:00",
            "date_modified": "2025-09-16T16:46:58+05:00",
            "tags": [
                "Думаем дальше",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Tue, 16 Sep 2025 13:16:30 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "137458",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "137277",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/aegea-2025-sep-1-special\/",
            "title": "Первосентябрьская скидка на Эгею — 2025",
            "content_html": "<p>С этого момента и до конца среды, 3 сентября (по Москве), объявляется акция — скидка на год Эгеи.<\/p>\n<p>А именно 2999 ₽ вместо обычных 3999 ₽:<br \/>\n— за лицензию на год при установке на вашем сервере;<br \/>\n— за продление такой лицензии на год (можно продлить хоть на сколько, даже если у вас ещё действующая, но вы собираетесь пользоваться ещё долго).<\/p>\n<p>Воспользуйтесь специальными условиями <a href=\"https:\/\/blogengine.ru\/get\/special\/\">на специальной странице<\/a>.<\/p>\n<p>Бонус: если вы это сделаете прямо сегодня (по Москве), то ещё три месяца получите бесплатно, а если у вас лицензия истекла за последние три месяца, то долг прощается и вы получаете год и три месяца от сегодняшнего дня. Напишите мне, если хотите воспользоваться бонусом.<\/p>\n<p>Вот, купите на сэкономленные деньги себе учебник. День знаний же!<\/p>\n",
            "date_published": "2025-09-01T18:43:42+05:00",
            "date_modified": "2025-09-01T18:41:53+05:00",
            "tags": [
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Mon, 01 Sep 2025 18:43:42 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "137277",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "135579",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/switching-to-cursor\/",
            "title": "Как перейти на Курсор",
            "content_html": "<p>Вы наверное слышали про новый <a href=\"https:\/\/cursor.com\">редактор кода Курсор<\/a> со встроенным ИИ. Я даже слушал подкаст с его авторами несколько месяцев назад. Он умеет и писать новое по команде, и вносить изменения в старое, и отвечать на вопросы о коде. Описание меня одновременно и восхитило, и ужаснуло: ну как можно доверить большой сложный проект этой штуке? Он же там всё сломает!<\/p>\n<p>Я давно хожу в Дипсик с вопросами типа «накидай мне ХТМЛ+ЦСС для того-то», или «напиши алгоритм такой-то переработки массива», или «сделай регулярное выражение». Это что-то вроде продвинутого поиска в интернете, но вставляю-то результат я в свой код только сам.<\/p>\n<p>В общем, оказалось, что Курсор — это совсем не страшно, рекомендую всем.<\/p>\n<p>Просто скачайте Курсор и откройте свой проект, он вам ничего там не сломает. Для начальной настройки доверия с ним можно просто поговорить. Я открыл репозиторий Эгеи и сказал: посмотри, что за изменения я сделал в рабочей папке, и опиши их смысл и цели, как ты их понял. Он покрутил колёсиком и выдал очень внятное описание. Я бы вам показал, но не хочу раскрывать планы на Эгею раньше времени.<\/p>\n<p>Дальше его можно просить о чём хочешь, он будет что-то предлагать, и при этом показывать, какие изменения он будет вносить. Их можно принимать и отклонять, а можно попросить его что-то объяснить или додумать. Мне понравился такой момент: я попросил его доработать метод walk (), чтобы он передавал в колбек не только текущий элемент, но и предыдущий и следующий:<\/p>\n<blockquote>\n<p>expand this function to pass not only the $band, but also previous and next bands in the flow<\/p>\n<\/blockquote>\n<p>Курсор:<\/p>\n<blockquote>\n<p>I’ll help modify the walk function in the Neasden Model class to pass previous and next bands to the callback. This will be useful for the decolon filter to properly check adjacent bands. First, let me search for the Model class to see its full implementation...<\/p>\n<\/blockquote>\n<p>То есть он не просто принял команду, а даже между делом объяснил, зачем это может быть полезно. И это правильное объяснение! Я ровно за этим его об этом и попросил.<\/p>\n<p>Он написал код, но на каждом обороте цикла он стал по три раза вызывать некую функцию <tt>expandFlowElement<\/tt>. Я попросил убрать это, он переписал. Я спросил:<\/p>\n<blockquote>\n<p>is it worth it?<\/p>\n<\/blockquote>\n<p>Курсор:<\/p>\n<blockquote>\n<p>Looking at the <tt>expandFlowElement<\/tt> implementation, I can see that it’s actually a very lightweight operation that just:<\/p>\n  <ol start=\"1\">\n    <li>For strings: Splits by newlines and wraps in a simple array structure<\/li>\n    <li>For arrays: Just wraps the input in a slightly different array structure<\/li>\n  <\/ol>\n<p>The operation is:<\/p>\n  <ul>\n    <li>Pure memory operations (no I\/O)<\/li>\n    <li>No complex calculations<\/li>\n    <li>No external calls<\/li>\n    <li>No database queries<\/li>\n    <li>No file operations<\/li>\n  <\/ul>\n<p>Given this, the optimization I suggested might actually be counterproductive because:<\/p>\n  <ol start=\"1\">\n    <li>It creates an additional array in memory (<tt>$expanded_flow<\/tt>)<\/li>\n    <li>The original version only expands elements when they’re actually needed<\/li>\n    <li>The memory overhead of storing the expanded array might be more significant than the small CPU savings<\/li>\n  <\/ol>\n<p>I would recommend reverting the change. The original implementation is actually more memory efficient since it only expands elements when they’re needed, and the CPU cost of the expansion is negligible.<\/p>\n<p>Would you like me to revert the changes back to the original implementation?<\/p>\n<\/blockquote>\n<p>Ну это разве не магия?<\/p>\n<p>А вчера он мне помог ответить на письмо. Мне написал пользователь Эгеи с вопросом о том, как ему внести постоянные изменения в <tt>.htaccess<\/tt>, чтобы Эгея их не перетирала при обновлении. Я помню, что что-то такое вроде предусматривал, пишу Курсору:<\/p>\n<blockquote>\n<p>do I have a feature where a user can add their own lines that will be automatically added to .htaccess file when I’m generatnig it<\/p>\n<\/blockquote>\n<p>Курсор:<\/p>\n<blockquote>\n<p>Let me search through the codebase to find any functionality related to custom <tt>.htaccess<\/tt> directives.<\/p>\n<p>Yes, I can confirm that the project does have a feature for adding custom <tt>.htaccess<\/tt> directives. There are two configuration parameters that allow users to add their own custom directives to the <tt>.htaccess<\/tt> file:<\/p>\n  <ul>\n    <li><tt>custom_htaccess_directives<\/tt> — For adding general Apache directives<\/li>\n    <li><tt>custom_htaccess_rewrites<\/tt> — For adding custom rewrite rules<\/li>\n  <\/ul>\n<p>These can be set in your config file (<tt>user\/config.php<\/tt>). When the <tt>.htaccess<\/tt> file is generated, your custom directives will be inserted at specific locations:<br \/>\nGeneral directives will be placed at the top of the file (after the comment)<br \/>\nRewrite rules will be placed inside the <tt>&lt;IfModule mod_rewrite.c&gt;<\/tt> block, before the default rewrite rules<\/p>\n<p>For example, in your <tt>user\/config.php<\/tt> you could add:<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code>$_config['custom_htaccess_directives'] = &quot;\n# Custom directives\nAddType application\/x-httpd-php .php\n&quot;;\n\n$_config['custom_htaccess_rewrites'] = &quot;\n# Custom rewrite rules\nRewriteRule ^custom-page$ index.php?go=custom-page [L]\n&quot;;<\/code><\/pre><blockquote>\n<p>The system will automatically insert these custom directives when generating the <tt>.htaccess<\/tt> file, while preserving all the default functionality. This is handled by the <tt>e2_ensure_htaccess_on_apache ()<\/tt> function in <tt>system\/core\/install.php<\/tt>. Note that the <tt>.htaccess<\/tt> file will be regenerated during updates, but your custom directives will be preserved as long as they are properly set in your config file.<\/p>\n<\/blockquote>\n<p>Он всё понял, описал и даже примеры использования привёл! Ну я и ответил на письмо этим текстом.<\/p>\n<p>Там есть не только чат. Он ещё прямо в коде иногда пытается читать мысли и подсказывать, что написать. Бывает такое, что ты изменил что-то в одном месте в коде, и потом идёшь в другое, чтобы сделать там аналогичное изменение. Например, изменил порядок аргументов в функции, а потом идёшь в вызовах исправить. В таком случае, когда ты туда придёшь, тебя там будет ждать готовое изменение, которое надо будет просто принять кнопкой «Таб».<\/p>\n<p>Короче, я уверовал примерно за первый час.<\/p>\n<p>Но ведь переход с одного редактора на другой — это всё равно всегда боль? А тут этого этапа просто не было. Курсор настолько буквально слизал весь вид ВС Кода, что я иногда даже не понимаю, что это другой редактор. Он импортировал все сочетания клавиш, расцветку и прочее. Ощущение, что я никуда не переезжал, просто ВС Код научился чтению мыслей. Самый драматический переход по смыслу и самый безболезненный на практике за всю историю редакторов кода.<\/p>\n<p>Если бы пару лет назад мне показали скриншот ВС Кода, где ко всем панелям добавилась бы ещё панель «Чат», я бы подумал, что это шутка с доведением до абсурда раздувания ВС Кода всё новыми панелями. А вот оказалось, что совсем не шутка.<\/p>\n",
            "date_published": "2025-04-16T13:43:44+05:00",
            "date_modified": "2025-04-16T14:53:39+05:00",
            "tags": [
                "искусственный интеллект",
                "Курсор",
                "программирование",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Wed, 16 Apr 2025 13:43:44 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "135579",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "130430",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/kak-rabotayut-otlozhennye-publikacii-v-egee\/",
            "title": "Как работают отложенные публикации в Эгее",
            "content_html": "<h2>Смысл «отложенности» с точки зрения веб-программирования<\/h2>\n<p><a href=\"https:\/\/blogengine.ru\">В платной Эгее<\/a> есть возможность запланировать заметку на время. Понятно, что у меня нормальный интерфейс выбора даты и времени. Но интересно, что для реализации самой функции отложенных публикаций нужно думать как веб-программист, а я заметил, что это не у всех получается.<\/p>\n<p>Допустим, автор запланировал выход заметки на 15:00. Как добиться, чтобы в 15:00 заметка вышла? Веб-сервер умеет отвечать только на запросы, он не умеет по собственной инициативе просыпаться и что-то начинать делать. И тут почему-то многие разработчики начинают думать в сторону крона — планировщика запуска задач по расписанию.<\/p>\n<p>Эгея должна работать на любом шаред-хостинге, у меня нет возможности настраивать и запускать там произвольные вещи. Но главное, что это и не нужно.<\/p>\n<p>Чтобы заметка вышла в 15:00, в 15:00 ничего не должно произойти, буквально ничего. Потому что что вообще значит «вышла»? Допустим вот сервер может проснуться в 15:00 и начать действовать, что он должен сделать-то? Отправить эту заметку на случайный айпи-адрес?..<\/p>\n<p>Сама фраза «заметка должна выйти в 15:00» означает только одно: на все запросы, сделанные начиная с 15:00 нужно отвечать сайтом, где уже опубликована эта заметка. Если на сайт кто-то зайдёт в 14:54, а потом кто-то в 15:19, то заметку нужно будет показать по второму запросу, вот и всё.<\/p>\n<p>Чтобы это работало, нужно было сделать три вещи. Первая — это дать назначать в качестве даты-времени выхода заметки дату-время из будущего. Вторая — при формировании страниц сайта отображать и вообще учитывать только заметки, время которых уже наступило. Третья — доработать систему кеширования, чтобы в 15:19 сайт не открывался в устаревшем виде из кеша.<\/p>\n<h2>Доработка системы кеширования<\/h2>\n<p>Эгея — редчайший пример веб-приложения, где <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/glavny-princip-keshirovaniya-dannye-vsegda-aktualny\/\">хорошо запрограммирован кеш<\/a>: он хранится вечно, пока актуален, но перестаёт показать устаревшие данные ровно в тот момент, когда они устарели. До появления фичи отложенных заметок устаревшие кеши удалялись при редактировании данных. Например я отредактировал заметку, добавив в неё новый тег — все кеши, которые использовались для выдаче заметок по этому тегу, удаляются, чтобы при следующем запросе сформироваться заново.<\/p>\n<p>А тут нам нужно сделать, чтобы кеш каким-то чудом в 15:00 удалился несмотря на то, что автор ничего не редактирует. Разумеется, в 15:00 мы ничего делать не будем; решать этот вопрос мы будем в 15:19, когда читатель обратится за заметкой.<\/p>\n<p>Но откуда мы узнаем, что именно запрос в 15:19 потребует пересборки кеша, а на тот, что был в 14:54, можно ещё отвечать из кеша? Ведь время публикации заметки хранится в базе данных, а если мы будем ходить в неё на каждый запрос для проверки, то это обессмыслит само существование кеша!<\/p>\n<p>Чтобы решить эту задачу, пришлось реализовать запланированное устаревание кеша. Рядом с кешем на диске хранится файл с датами-временами, в которые кеш должен устаревать. Каждый раз, когда пользователь планирует выход заметки на будущее, эти дата-время записываются в этот файл. Перед тем, как выдать данные из кеша, Эгея смотрит: а нету ли в файле дат-времён устаревания даты-времени из прошлого? Если есть, значит кеш устарел, и его надо удалить, а уже потом собирать страницу по-честному, из базы.<\/p>\n<p>Таким образом фича планирование заметок на будущее фактически сводится к фиче планирования устаревания кеша.<\/p>\n",
            "date_published": "2024-08-31T22:21:18+05:00",
            "date_modified": "2024-08-31T22:32:20+05:00",
            "tags": [
                "программирование",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Sat, 31 Aug 2024 22:21:18 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "130430",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "127771",
            "url": "https:\/\/bolknote.ru\/all\/slozhnosti-proverki-versiy\/",
            "title": "Сложности проверки версий",
            "content_html": "<p>Случайно обратил внимание какое-то время назад, что у меня на сайте почему-то перестало проигрываться аудио в формате <i>MP3<\/i> в «Опере», моём основном браузере. Никак не доходили руки разобраться, но в эти длинные праздники я всё-таки докопался до сути. Суть оказалось смешной до нелепого.<\/p>\n<p>Дело в том, что в движке, который я использую для своего дневника, для проигрывания аудио используется библиотека «<a href=\"https:\/\/github.com\/ilyabirman\/Jouele\">Жуэль<\/a>», а её текущая версия, в свою очередь использует старую версию библиотеки «<a href=\"https:\/\/github.com\/goldfire\/howler.js\"><i>howler.js<\/i><\/a>», в которой есть вот такой код:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">self._navigator = (typeof window !== &#039;undefined&#039; &amp;&amp; window.navigator) ? window.navigator : null;\nvar checkOpera = self._navigator &amp;&amp; self._navigator.userAgent.match(\/OPR\\\/([0-6].)\/g);\nvar isOldOpera = (checkOpera &amp;&amp; parseInt(checkOpera[0].split(&#039;\/&#039;)[1], 10) &lt; 33);<\/code><\/pre><p>Проблема в регулярном выражении <tt>OPR\\\/([0-6].)<\/tt> и в версии «Оперы». Недавно версия перевалила за 100 и эта регулярка, вместо корректного номера, стала возвращать «10».<\/p>\n<p>Из-за этого третья строка считает мою «Оперу» слишком старой (потому что 10 меньше 33), чтобы поддерживать проигрывание файлов <i>MP3<\/i>.<\/p>\n<p>Заменил у себя на сайте <i>howler.js<\/i> на актуальную версию и всё заработало. Заодно предложил патч в «Жуэль», надеюсь примут оперативно.<\/p>\n",
            "date_published": "2024-05-02T20:24:26+05:00",
            "date_modified": "2024-05-02T20:26:00+05:00",
            "tags": [
                "javascript",
                "программирование",
                "Эгея"
            ],
            "author": {
                "name": "Евгений Степанищев",
                "url": "https:\/\/bolknote.ru\/",
                "avatar": "https:\/\/bolknote.ru\/pictures\/userpic\/userpic@2x.jpg?1760600028"
            },
            "_date_published_rfc2822": "Thu, 02 May 2024 20:24:26 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "127771",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "125110",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/think-on-1\/",
            "title": "Думаем дальше № 1 — «Тексту положено быть быстрым» с Никитой Прокоповым",
            "content_html": "<p>Так, ну <a href=\"https:\/\/t.me\/ilyabirman_channel\/9883\">вот вам первый экспериментальный выпуск подкаста<\/a>. В этот раз беседуем с Никитой Прокоповым. Что будет дальше — пока не знаю, но хочу ещё. Обложек, чаптеров и платформ пока нет; пока просто файлик в телеграме. Я решил, что если будет хотя бы несколько выпусков, тогда уже буду всем этим заморачиваться. Название тоже может поменяться.<\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n<tr>\n<td style=\"text-align: left\">0:00<\/td>\n<td style=\"text-align: left\">История про табло<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">5:56<\/td>\n<td style=\"text-align: left\"><a href=\"https:\/\/t.me\/nikitonsky_pub\/577\">Пост Никиты про сложное и простое<\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">10:15<\/td>\n<td style=\"text-align: left\">Как мы с разных сторон познакомились с переусложнением<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">15:36<\/td>\n<td style=\"text-align: left\">Не верь в сложность, когда говорят «просто поверь»<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">20:13<\/td>\n<td style=\"text-align: left\">Оценивать чужую работу плохо, но...<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">22:16<\/td>\n<td style=\"text-align: left\">Причина как критерий хорошего дизайна<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">27:51<\/td>\n<td style=\"text-align: left\">Интуиция, факты и законы природы<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">34:05<\/td>\n<td style=\"text-align: left\">Элон (Илон?) Маск и ПХП<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">36:00<\/td>\n<td style=\"text-align: left\">Эгея быстрая, хотя Илья даже не старался<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">37:55<\/td>\n<td style=\"text-align: left\">Нисден 3.0 стал в сто раз быстрее<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">46:38<\/td>\n<td style=\"text-align: left\">Современный компьютер предательски тормозит незаметно<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">51:18<\/td>\n<td style=\"text-align: left\">Парсинг ХТМЛ<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">58:46<\/td>\n<td style=\"text-align: left\">Ускорение ТОМЛ-парсера<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">1:02:54<\/td>\n<td style=\"text-align: left\">Формальные грамматики<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">1:08:11<\/td>\n<td style=\"text-align: left\">Апач против Нгинкса<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">1:11:26<\/td>\n<td style=\"text-align: left\">Как файлы с точкой в начале стали скрытыми<\/td>\n<\/tr>\n<\/table>\n<p>Чё, как вам? Какие темы раскрыть в следующих выпусках?<\/p>\n",
            "date_published": "2023-12-25T20:09:58+05:00",
            "date_modified": "2023-12-29T17:59:10+05:00",
            "tags": [
                "Думаем дальше",
                "Нисден",
                "подкаст",
                "технологии",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Mon, 25 Dec 2023 20:09:58 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "125110",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "124847",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/aegea-11-3\/",
            "title": "Эгея 11.3",
            "content_html": "<p>Вышел очередной апдейт <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/aegea-11\/\">11-й версии<\/a>.<\/p>\n<h2>Что изменилось<\/h2>\n<p>Теперь с Эгеей идёт новый прекресный Нисден 3.0, см. ниже.<\/p>\n<p>Также добавлен автосброс кеша при смене домена, об этом тоже см. ниже.<\/p>\n<p>Ещё ранее в версии 11.2 <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/aegea-11-2\/\">добавилось переименование файла<\/a>:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-11-2-file-rename@2x.jpg\" width=\"488\" height=\"280\" alt=\"\" \/>\n<\/div>\n<p>Роберт Блинов обратил моё внимание на то, что это меню сделано буквально так, как я сам учу не делать: в нём кнопка удаления находится предательски близко к часто используемой кнопке «Вставить», из-за чего можно случайно удалить только что загруженный файл.<\/p>\n<p>В 11.3 я сделал минимальное движение, чтобы проблема была не настолько острой — отодвинул удаление за черту:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-11-3-file-rename@2x.jpg\" width=\"488\" height=\"280\" alt=\"\" \/>\n<\/div>\n<p>А ещё теперь картинку вставляет даблклик по ней, чтобы вообще в это меню не ходить.<\/p>\n<p>Что ещё изменилось:<\/p>\n<ul>\n<li>видосы с пометкой @loop автозапускаются с большей надёжностью;<\/li>\n<li>размер и качество юзерпика теперь можно настроить в конфиге (userpic_size, userpic_jpeg_quality) — для Ильяхова пришлось добавить, а то он здоровенный юзерпик вывел, и ему пикселей не хватало;<\/li>\n<li>Лайкли обновились до 3.1;<\/li>\n<li>Эгея теперь проверяет наличие библиотеки GD в одной из первых строк, и сразу останавливается, если её нет, вместо того, чтобы удивлять пользователя тем, что с картинками что-то ничего не работает;<\/li>\n<li>другие проблемы с обработкой изображений логируются более подробно, чтобы можно было, если что, раскопать, почему не работает.<\/li>\n<li>подкрутились цвета тегов в некоторых темах.<\/li>\n<\/ul>\n<p>Починилась разная эзотерика:<\/p>\n<ul>\n<li>если поисковый запрос буквально совпадает с существующим тегом, Эгея показывает этот тег в начале выдачи поиска; так вот, этот тег выводился в том регистре, как было введено в поиск (например, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/found\/италия\/\" class=\"nu\">«<u>италия<\/u>»<\/a>), а не в том, в котором он реально записан (например, «Италия»);<\/li>\n<li>если изменить время публикации заметки, которая была опубликована не в том часовом поясе, где вы находитесь сейчас, оно сохранялось неправильно как раз с разницей между этими часовыми поясами (точнее, оно сохранялось «правильно» в текущем вашем часовом поясе, и съезжало при отображении в часовом поясе заметки);<\/li>\n<li>надёжнее отображается информация о сроке действия платной лицензии;<\/li>\n<li>теги, которые были запинены в платной или старинной версии Эгеи, продолжали выделяться в списке сильнее даже после перехода на бесплатную версиях, и это никак нельзя было победить.<\/li>\n<\/ul>\n<h2>Нисден 3.0<\/h2>\n<p>За обработку форматирования текста в Эгее отвечает форматтер Нисден. Я его написал для Эгеи, но использую кое-где ещё. Это он превращает текст в звёздочках в жирный шрифт, имена загруженных файлов в настоящие адаптивные картинки и играющие песни; умеет узнавать и красиво оформлять списки, таблицы, ссылки; расставлять правильные кавычки и тире, неразрывные пробелы, оживлять ссылки на таймкоды в видео и аудио.<\/p>\n<p>С Эгеей 11.2 шёл Нисден версии 2.87. За время своего существования он оброс кучей хаков и костылей, что мешало его развивать. А мои задумки на 12-ю Эгею потребуют от него намного больше разных умений. Поэтому я взялся переписать его.<\/p>\n<p>С Эгеей 11.3 идёт Нисден версии 3.0. Особых новых фич вы не заметите, они будут потом. Но зато вы можете заметить катастрофическое ускорение обработки текста — иногда в десятки раз. Конечно, обработку одной заметки нормальной длины вы и раньше не замечали: даже если она длилась 0,1 с, это всё равно мгновенно на фоне задержки интернета. Но вообще-то это было очень медленно.<\/p>\n<p>Чтобы убедиться, что новый Нисден ничего не сломает, я протестировал его на одиннадцати тысячах заметок: всём своём блоге и всём блоге Болка — мы оба ведём блоги по двадцать с лишним лет.<\/p>\n<p>Есть и несколько приятных побочных эффектов переписывания более прямыми руками:<\/p>\n<ul>\n<li>типограф теперь типографит текст в подписях аудиотреков (да, раньше не умел);<\/li>\n<li>если нумерованный список начать с «0.», то он отображался как маркированный, а теперь  станет нормальным нумерованным с нуля;<\/li>\n<li>если написать два подряд заголовка одинакового уровня, теперь они корректно определяются как два заголовка, а не как один с переносом внутри (а если вы как раз имели в виду перенос строки внутри заголовка, теперь придётся его сделать явно через &lt;br \/&gt;);<\/li>\n<li>таймкоды заработали в загруженном на сервер Эгеи видео (раньше, оказывается, работали только с Ютюбом и Вимео).<\/li>\n<li>джаваскрипт для обработки таймкодов в видео теперь подгружается только если вы их используете (раньше подгружался всегда, так как был неотъемлемой частью модуля видео);<\/li>\n<li>саммари заметок (отображаются на страницах тегов; передаются в качестве метатега description) стали чище: туда стало попадать меньше мусора, не являющегося текстом заметки, например те же таймкоды.<\/li>\n<\/ul>\n<p>Это изменения автоматически случатся во всех уже опубликованных заметках. Я считаю их все правильными, но если для вас какие-то из них нежелательны, придётся подкрутить вручную.<\/p>\n<h2>Автосброс кеша при смене домена<\/h2>\n<p>Также теперь Эгея автоматически сбрасывает весь кеш, если вы запрашиваете её по новому имени домена. Зачем это?<\/p>\n<p>Некоторые пользователи ранее сталкивались такой проблемой. Если хреново настроен сервер так, что одна и та же Эгея открывается по разным доменам (например, с www и без), без редиректа, то Эгея может закешировать свои внутренние ссылки с одним доменом и использовать этот кеш на другом. Например, вы зашли на example.com, потом переходите на конкретную заметку, а она открывается уже с www.example.com. Это выглядело неожиданно и некрасиво.<\/p>\n<p>Хуже всего, если там вместо домена вдруг возникал айпи-адрес, потому что у кого-то сервер открывается прямо по нему! Мне жаловались: «Эгея ставит ссылки на айпи-адрес вместо домена!» А Эгея ничё не ставит, она даже не знает, какой у вас айпи-адрес. Это вы или кто-то зашёл по этому айпи-адресу, а Эгея закешировала ссылки.<\/p>\n<p>Долгое время я считал, что такая кривая настройка сервера — проблема пользователя. Не должно по разным адресам открываться одно и то же! Потом оказалось, что некоторые пользователи пользуются такими хостингами, где настроить редирект невозможно или сложно. Тогда, ещё много версий назад, в конфиге Эгеи добавился параметр preferred_domain_name, чтобы Эгея хотя бы сама могла редиректить на тот домен, который вы считаете каноническим. Но кто ж пойдёт настраивать? Проще пожаловаться мне.<\/p>\n<p>У меня была мысль попробовать как-то переписать кеширование так, чтобы в кеш адреса всегда попадали без домена, а домен к ним пририсовывался уже после вытаскивания их из кеша, но оказалось, что это слишком дофига работы. Поэтому я плюнул и сделал в Эгее тупое правило: если тебя открывают не по тому домену, по которому открывали в прошлый раз, убей все кеши и генерируй все страницы заново.<\/p>\n<p>Это решение никак не меняет того факта, что сервер настроен плохо. Более того, если он у вас настроен плохо, Эгея теперь будет неэффективно использовать кеш, удаляя его каждый раз, когда домен сменился. Нагрузка на ваш неправильно настроенный сервер возрастёт. Но зато снизится нагрузка на меня, связанная с необходимостью разруливать такие ситуации вручную!<\/p>\n<p>Приятный побочный эффект — если вы реально переехали с одного домена на другой, просто перенеся все те же файлы с собой, кеш сбрасывать не придётся.<\/p>\n<h2>Как обновиться<\/h2>\n<p>Если Эгея у вас оплачена, напишите мне, и я дам вам полную версию 11.3. Если вы пользуетесь сервисом, подождите, пока мы обновим его.<\/p>\n<p>Свежий дистрибутив лайт-версии — в конце страницы <a href=\"https:\/\/blogengine.ru\/get\/\" class=\"nu\">«<u>Стать пользователем<\/u>»<\/a>. Замените папку \/system\/ новой.<\/p>\n<p>См. также: <a href=\"https:\/\/blogengine.ru\/compare\/\">Что изменилось в файлах с версии 11.2<\/a> (или любой другой).<\/p>\n",
            "date_published": "2023-12-11T10:57:23+05:00",
            "date_modified": "2023-12-17T18:21:44+05:00",
            "tags": [
                "Нисден",
                "релиз",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Mon, 11 Dec 2023 10:57:23 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "124847",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "122680",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/aegea-2023-sep-1-special\/",
            "title": "Первосентябрьская скидка на Эгею",
            "content_html": "<p>С этого момента и до конца воскресенья, 3 сентября, объявляется акция — скидка на год Эгеи.<\/p>\n<p>А именно 2999 ₽ вместо обычных 3999 ₽:<br \/>\n— за лицензию на год при установке на вашем сервере;<br \/>\n— за продление такой лицензии на год (можно продлить хоть на сколько, даже если у вас ещё действующая, но вы собираетесь пользоваться ещё долго);<br \/>\n— за продление сервиса Эгеи на год (можно заплатить только один раз, но тоже независимо от того, сколько у вас осталось до истечения действующей).<\/p>\n<p>Воспользуйтесь специальными условиями <a href=\"https:\/\/blogengine.ru\/get\/special\/\">на специальной странице<\/a>.<\/p>\n<p>Вот, купите на сэкономленные деньги себе учебник. День знаний же!<\/p>\n",
            "date_published": "2023-08-31T19:54:23+05:00",
            "date_modified": "2023-08-31T20:00:30+05:00",
            "tags": [
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Thu, 31 Aug 2023 19:54:23 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "122680",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "121275",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/what-aegea-does-talk\/",
            "title": "Доклад «Что делает движок блога „Эгея“»",
            "content_html": "<p>Прочитал в мае в Москве доклад о своём <a href=\"http:\/\/blogengine.ru\/\">движке блога «Эгея»<\/a>:<\/p>\n<div class=\"e2-text-video\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/vrcXLs_PhVA?enablejsapi=1\" allow=\"autoplay\" frameborder=\"0\" allowfullscreen><\/iframe>\n<p>\n00:00 Интро<br \/>\n03:32 Обработка текста и содержимое заметок<br \/>\n09:36 Внешний мир: шаринг, сео, урлы, комментарии<br \/>\n16:59 Навигация: поиск, теги, рекомендации, перебивки и меню<br \/>\n25:48 Качество жизни<br \/>\n<\/p>\n<\/div>\n<p>Встречается мнение, что движок блога — это простейшая задача веб-разработки. Нужно вытащить из базы данных заметки и показать их в определённом порядке. Ну ещё дать интерфейс добавления и редактирования. «Эгею» называют «лёгким» движком. Рассказываю, сколько всего «Эгея» делает под капотом, чтобы быть такой приятной и при этом оставаться «лёгкой» в глазах пользователей.<\/p>\n<p>Смотрите и обязательно покажите знакомым программистам, чтобы настроить их на нужный лад.<\/p>\n<p>Спасибо организаторам HolyJS — конференции для JavaScript‑разработчиков — за приглашение и запись выступления! Ребята просили передать, что сейчас <a href=\"https:\/\/holyjs.ru\/callforpapers\/?utm_source=partner&utm_medium=birman&utm_campaign=cfp\">открыт приём заявок<\/a> на осеннюю конференцию.<\/p>\n",
            "date_published": "2023-07-05T00:12:31+05:00",
            "date_modified": "2023-09-19T21:15:32+05:00",
            "tags": [
                "видео",
                "доклады",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Wed, 05 Jul 2023 00:12:31 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "121275",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "120387",
            "url": "https:\/\/bolknote.ru\/all\/moya-tema-dlya-egei\/",
            "title": "Моя тема для «Эгеи»",
            "content_html": "<p>Вчера <a href=\"https:\/\/github.com\/bolknote\/bolk-aegea-theme\">выложил<\/a>, наконец, свою тему оформления для движка «Эгеи». Меня давно просили, а вчера был очередной комментарий на эту тему, ну я и сделал это наконец. Тему надо положить в папку <tt>user\/themes\/bolk<\/tt>, выбрать её в настройках блога и сбросить кеши.<\/p>\n",
            "date_published": "2023-06-14T00:15:42+05:00",
            "date_modified": "2023-06-14T00:15:19+05:00",
            "tags": [
                "Эгея"
            ],
            "author": {
                "name": "Евгений Степанищев",
                "url": "https:\/\/bolknote.ru\/",
                "avatar": "https:\/\/bolknote.ru\/pictures\/userpic\/userpic@2x.jpg?1760600028"
            },
            "_date_published_rfc2822": "Wed, 14 Jun 2023 00:15:42 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "120387",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "119825",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/aegea-11-2\/",
            "title": "Эгея 11.2",
            "content_html": "<p>Ещё один апдейт <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/aegea-11\/\">11-й версии<\/a>.<\/p>\n<p>Появилась возможность переименовать загруженный файл из меню с превьюшками в редакторе:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-11-2-file-rename@2x.jpg\" width=\"488\" height=\"280\" alt=\"\" \/>\n<\/div>\n<p>Зачем это надо. Вы могли загрузить файл вставкой картинки через ⌘V в редактор, и он назвался как попало, а вам хочется, чтобы назывался по-вашему. Или вы могли забыть написать @2x в названии ретинового файла или @loop в названии зацикленного видео. Раньше надо было удалить файл, переименовать у себя на диске, загрузить новый, не забыть исправить имя в редакторе, а сейчас — просто переименовываешь и всё. Эгея сразу переименовывает и в редакторе тоже.<\/p>\n<p>Эгея переименовывает внимательно:<\/p>\n<ul>\n<li>не даст случайно переписать другой файл с тем же именем, но промолчит, если существующий файл с тем же именем — это реально точно такой же файл байт в байт;<\/li>\n<li>не сломает другие заметки, если вдруг в них используется файл под старым именем (сделает копию вместо переименования);<\/li>\n<li>не даст переименовать jpeg в mp3, но даст в jpg, если вам так нравится больше.<\/li>\n<\/ul>\n<p>Что ещё изменилось:<\/p>\n<ul>\n<li>у Черновиков появилась иконка с карандашиком, чтобы сразу перейти в редактор, а не просто открыть превью заметки;<\/li>\n<li>добавились параметры конфига custom_htaccess_rewrites и custom_htaccess_directives, чтобы можно было добавить отсебятины в .htaccess и Эгея её не перетирала при обновлении (при изменении этих параметров Эгея сама перезапишет .htaccess, то есть его по-прежнему не нужно редактировать руками);<\/li>\n<li>можно установить переменную окружения или серверную переменную E2_SYNTH_URLS, чтобы Эгея генерировала красивые урлы, так что если у вас Нгинкс, и вы настроили все реврайты в нём, то можете заодно сделать fastcgi_param E2_SYNTH_URLS true, чтобы не трогать конфиг Эгеи;<\/li>\n<li>подтюнились темы оформления;<\/li>\n<li>на странице \/settings\/underhood\/ теперь показывает, на каком серверном ПО крутится Эгея.<\/li>\n<\/ul>\n<p>Починилось:<\/p>\n<ul>\n<li>ошибки в инсталяторе под ПХП 8.2;<\/li>\n<li>ошибки под ПХП 5.6;<\/li>\n<li>у всех превьюшек картинок на сервере было то же расширение, что у исходных файлов, хотя на самом деле они все джипеги — теперь будут с расширением jpg как положено;<\/li>\n<li>могла не работать загрузка файлов на конфигурациях без красивых урлов;<\/li>\n<li>редкие баги в РСС;<\/li>\n<li>вёрстка количества новых комментариев иногда ломалась в новом дизайне;<\/li>\n<li>поля для ввода имени и почты в комментариях иногда могли появляться, когда не нужно;<\/li>\n<\/ul>\n<h2>Как обновиться<\/h2>\n<p>Если Эгея у вас оплачена, напишите мне, и я дам вам полную версию 11.2. Если вы пользуетесь сервисом, подождите, пока мы обновим его.<\/p>\n<p>Свежий дистрибутив лайт-версии — в конце страницы <a href=\"https:\/\/blogengine.ru\/get\/\" class=\"nu\">«<u>Стать пользователем<\/u>»<\/a>. Замените папку \/system\/ новой.<\/p>\n<p>См. также: <a href=\"https:\/\/blogengine.ru\/compare\/\">Что изменилось в файлах с версии 11.1<\/a> (или любой другой).<\/p>\n",
            "date_published": "2023-06-02T18:12:11+05:00",
            "date_modified": "2023-06-02T17:44:29+05:00",
            "tags": [
                "релиз",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Fri, 02 Jun 2023 18:12:11 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "119825",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "126385",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/how-to-cut-text\/",
            "title": "Как нормально обрезать текст",
            "content_html": "<p><a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/facebook-see-more\/\">На днях я рассказывал<\/a>, как хреново работает Фейсбук с длинными постами: обрезает в случайном месте, теряет место чтения при разворачивании. А как надо? Давайте сначала разберёмся с обрезанием.<\/p>\n<p>Обрезать в случайном месте — это неуважение к автору и тексту и лишнее подтверждение тому, что Фейсбуку плевать, что вы там пишете. И это пример лютой технозависимости: машине проще всего резать по определённому числу символов, вот она и режет. За этим даже нет эстетического резона вроде «вместиться в определённый элемент дизайна» (что тоже было бы неуважением к автору и тексту, но хотя бы имело бы гуманистические корни), потому что физический размер строк одинаковой длины в символах в общем случае может отличаться в разы (iii — ЮЮЮ). Даже в моём примере из Фейсбука до конца строки влезло бы ещё несколько слов:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/fb-see-more-3@2x.jpg\" width=\"640\" height=\"417\" alt=\"\" \/>\n<\/div>\n<p>Иногда при обрезании в случайном месте текст не просто ломается, а искажается или даже приобретает совсем нежелательный смысл. Конечно же, я собираю коллекцию примеров на эту тему, Лиз Трасс добавилась туда буквально на днях:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/liz-truss-anal@2x.jpg\" width=\"314\" height=\"487\" alt=\"\" \/>\n<\/div>\n<p>Почему-то анал в этом случае — главный чемпион:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/some-chat-anal@2x.jpg\" width=\"375\" height=\"156\" alt=\"\" \/>\n<\/div>\n<p>Больше примеров — <a href=\"https:\/\/t.me\/ilyabirman_channel\/8587\">у меня в телеграме<\/a>.<\/p>\n<p>Соответственно, если без обрезания не обойтись, то обрезать надо аккуратно. Как делает Эгея?<\/p>\n<p>Число символов, в которое нужно уложиться, считается примерным ориентиром, а не точным значением. Если нужно уложиться в 140 символов, а текст имеет длину 143, то Эгея просто не будет его трогать. Если текст заметно длинее предела, то Эгея разделит его на предложения и постарается взять столько полных предложений, сколько влезет. Вот, например, сниппет этой заметки:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-snippet-of-this@2x.jpg\" width=\"491\" height=\"236\" alt=\"\" \/>\n<\/div>\n<p>Но если в результате получилось слишком мало (или не влезло вообще ни одного предложения целиком), она будет искать другие признаки безопасных мест: точки с запятой, тире, запятые, скобки. Только если ничего из этого нет, то она будет ориентироваться на пробелы. И только если и пробелов нет, она обрежет по числу символов. Отсутствие пробелов — верный признак, что самому автору было плевать на смысл, так что не страшно, если Эгее будет немножко тоже.<\/p>\n<p>В общем Эгея будет стараться сделать как можно ближе к нужной длине, но так, чтобы смысл не пострадал.<\/p>\n<p>Казалось бы, если я могу такое напрограммировать, то что мешает Фейсбуку? Да то, что никому даже в голову не приходила идея, что есть хоть какой-то смысл стараться сделать хорошо, просто нет такого понятия в мире Фейсбука даже.<\/p>\n<p>Но что же делать, если у вас дизайн, и вам ну вот прям надо уложиться в определённый прямоугольник, плюс-минус слово никак нельзя?<\/p>\n<p>Тогда вместо многоточия можно прятать не влезающие штуки под градиент. Например, наложить его на последнюю строчку текста, как сделано в бюролекциях:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ilyabirman.ru\/meanwhile\/pictures\/bureau-text-gradient@2x.jpg\" width=\"640\" height=\"225\" alt=\"\" \/>\n<\/div>\n<p>Важно, чтобы градиент был достаточно длинным, чтобы не было разрыва на конкретной букве.<\/p>\n",
            "date_published": "2022-10-23T00:38:11+05:00",
            "date_modified": "2024-03-24T15:12:07+05:00",
            "tags": [
                "пользовательский интерфейс",
                "студентам",
                "текст",
                "технозависимость",
                "человечность",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Sun, 23 Oct 2022 00:38:11 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "126385",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "125159",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/ui-course-frag-14\/",
            "title": "На интерфейсном курсе: как работает автоматическая вёрстка рекомендаций в будущей Эгее 2.10",
            "content_html": "<p>Сегодня срыв покровов — показываю кое-что из-под капота Эгеи 2.10. Пришло время выложить очередной фрагмент моего онлайн-курса, а там я рассказывал ребятам, как Эгея 2.10 автоматически верстает этаж рекомендаций (это то, что последние пару месяцев вы видите тут под заметками).<\/p>\n<p>В общем, фрагмент № 14 онлайн-курса «Пользовательский интерфейс и представление информации». Записано на курсе 31 июля 2020 года. Покажите дизайнерам и разработчикам.<\/p>\n<div class=\"e2-text-video\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/tYJMrY5zWlo?enablejsapi=1\" allow=\"autoplay\" frameborder=\"0\" allowfullscreen><\/iframe>\n<p>\n00:00 Задача и примеры<br \/>\n01:35 Дизайн «раскладок» для разных случаев<br \/>\n04:29 Описание раскладок в коде<br \/>\n05:50 Автоматический выбор и оценка раскладок<br \/>\n07:47 Режим отладки<br \/>\n<\/p>\n<\/div>\n<p><a href=\"http:\/\/bureau.ru\/educenter\/ui-online\/\" class=\"button buy-button big-button\">Почитать о курсе<\/a><\/p>\n<p class=\"foot\">Программа, отзывы, запись<\/p>\n<p>Кстати, с тех пор, как я это рассказывал на курсе, Эгея стала ещё умнее. Думаю, уже скоро дам попробовать всем.<\/p>\n",
            "date_published": "2020-09-14T13:48:44+05:00",
            "date_modified": "2023-12-26T14:41:45+05:00",
            "tags": [
                "автоматизация",
                "веб-разработка",
                "вёрстка",
                "видео",
                "Курсы",
                "студентам",
                "фрагменты курса ПИ",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Mon, 14 Sep 2020 13:48:44 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "125159",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "136427",
            "url": "https:\/\/alexandertokarev.ru\/all\/glavnoe-menyu-dlya-egei\/",
            "title": "Главное меню для Эгеи",
            "content_html": "<p>Как известно, в движке Эгея, на котором работает в том числе и мой блог, напрочь отсутствует главное меню — наиполезнейший элемент навигации, с помощью которого автор блога может группировать посты в тематические разделы, а посетители — мгновенно находить информацию на интересующую их тему, не прибегая к поисковой строке и тегам.<\/p>\n<p>Как такое может быть, что в движке вообще нет главного меню? Полагаю, лучше спросить об этом разработчика, г-на Бирмана. И если вы по природе своей человек инициативный и терпеливый, вы даже можете попросить его прикрутить туда этот функционал. Я, однако, его ни о чём больше просить не буду, поскольку <a href=\"https:\/\/alexandertokarev.ru\/all\/egeya-i-html-2\/\">уже пробовал<\/a> (и не единожды), и пришёл к выводу, что это, к сожалению, непродуктивно, ибо функционал, который лично разработчику не кажется правильным и\/или нужным (к примеру, пресловутый <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/no-cut-in-aegea\/\">кат<\/a>), либо вовсе не будет реализован (видимо, из принципа), либо положен в долгий и пыльный ящик на неопределённый срок. Впрочем, это всего лишь мой опыт; уверен, вам повезёт куда больше.<\/p>\n<p>Так что огромное, искреннее спасибо ему за Эгею, и за то, что она бесплатна, но, честное слово, я бы лучше предпочёл купить её за разумные деньги и периодически обновлять на платной основе — и быть уверенным, что разработчик делает данный продукт в первую очередь для пользователей, а не для самого себя.<\/p>\n<p>Это было лирическое отступление. А теперь о главном: поскольку выяснилось, что я далеко не единственный пользователь Эгеи, кому нужно главное меню, рассказываю, как сделать простое меню — такое, как у меня на сайте.<\/p>\n<blockquote>\n<p><b>Примечания:<\/b> описание действительно для Эгеи 2.7—2.10. Для добавления меню вам понадобится доступ к файлам Эгеи на вашем сервере. Перед выполнением нижеописанных манипуляций сделайте бэкап оригинальных эгейских файлов. Если впоследствии вы обновите дистрибутив Эгеи, вам придётся повторить процедуру добавления меню заново, поскольку изменённые вами файлы будут заменены на новые в процессе обновления движка.<\/p>\n<\/blockquote>\n<h2>1. Уберите строку с описанием сайта<\/h2>\n<p>По умолчанию под названием блога Эгея отображает строку с кратким описанием, которое задаётся в настройках:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexandertokarev.ru\/pictures\/main-menu-01.png\" width=\"464\" height=\"92\" alt=\"\" \/>\n<\/div>\n<p>Если вам очень нужна эта строка, переходите к следующему пункту. Если нет, давайте её уберём.  Самое очевидное решение —  оставить строку  «Коротко о блоге» пустой — чревато тем, что главная страница сайта лишится ценного метатега description, т. е. вот этой строчки (её видно при просмотре кода страницы):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;meta name=&quot;description&quot; content=&quot;Блог о котиках и птичках&quot; \/&gt;<\/code><\/pre><p>Поскольку для поисковых систем страница, не имеющая meta description, не есть гут, данное решение нам не очень подходит. Чтобы решить задачу более выгодным способом, откройте на вашем сервере эгейский php-шаблон <span class=\"code\">\/themes\/plain\/templates\/layout.tmpl.php<\/span> и удалите строку:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;div id=&quot;e2-blog-description&quot;&gt;&lt;?= $content['blog']['description'] ?&gt;&lt;\/div&gt;<\/code><\/pre><p>Таким образом строка с описанием отображаться не будет, однако meta description для главной страницы будет сохранён и виден поисковым системам.<\/p>\n<h2>2. Вставьте HTML-код с пунктами меню<\/h2>\n<p>Если в предыдущем пункте вы удалили строку с описанием, то на её место вставьте HTML-код с меню:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;nav id=&quot;main-menu&quot;&gt;\n&lt;ul&gt;\n\t&lt;li&gt;&lt;a href=&quot;\/tags\/cats\/&quot;&gt;Котики&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;\/tags\/birds\/&quot;&gt;Птички&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;\/tags\/about\/&quot;&gt;Об авторе&lt;\/a&gt;&lt;\/li&gt;\n&lt;\/ul&gt;\n&lt;\/nav&gt;<\/code><\/pre><p>Если строку с описанием вы не удаляли, в таком случае вставьте меню сразу после неё.<\/p>\n<p>Названия пунктов меню, разумеется, условные, количество может быть произвольным. Замените названия пунктов на свои, а в качестве ссылок впишите ссылку на нужный тег или тематический раздел на вашем сайте.<\/p>\n<h2>3. Отформатируйте меню с помощью CSS<\/h2>\n<p>Чтобы пункты меню отображались нужным образом — т. е. в строку, а не в виде списка, меню нужно отформатировать с помощью CSS.<\/p>\n<p>Для этого создайте в любом текстовом редакторе новый файл и поместите туда следующий CSS-код:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#main-menu ul {\n  list-style: none;\n  line-height: 2em;\n  margin: 10px 0 0 0;\n}\n\n#main-menu li {\n\tdisplay: inline;\n\tfont-size: 17px;\t\n}\n\n#main-menu a {\n\tdisplay: inline-block;\n\tborder: none;\n\tpadding: 0 16px 0 0;\n\ttext-decoration-line: underline;\n\ttext-decoration-color: #e2e2e2;\n}<\/code><\/pre><p>Сохраните данный CSS-файл на вашем сервере — например, в корне сайта или какой-то другой папке. Чтобы Эгея смогла использовать ваш CSS-файл, путь к нему нужно прописать в шаблоне шапки страницы. Для этого откройте на сервере файл <span class=\"code\">system\/theme\/templates\/head.tmpl.php<\/span>, найдите там строку:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;link rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; href=&quot;&lt;?= $stylesheet ?&gt;&quot; \/&gt;<\/code><\/pre><p>…и сразу после неё впишите строку с указанием пути к вашему CSS-файлу. К примеру, если он называется <i>mystuff.css<\/i> и лежит в корне сайта, то путь к нему будет выглядеть следующим образом:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;link rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; href=&quot;mystuff.css&quot; \/&gt;<\/code><\/pre><p>Удачи!<\/p>\n<p>…<\/p>\n<p class=\"warning\"><b>Обновление 02\/2023.<\/b><\/span> Начиная с версии 11 (4079) главное меню в Эгее наконец-то появилось, но не для всех: теперь это одна из фич платной версии (3999 р \/ год); в бесплатной лайт-версии его по-прежнему нет. Если спросите меня, я бы не советовал разработчику так делать, ведь главное меню на любом сайте обеспечивает не дополнительную, а БАЗОВУЮ функциональность. Пользоваться сайтом, не имеющим главного меню, неудобно — примерно, как дверью без ручки или автомобилем без зеркала заднего вида. Вследствие чего, на мой взгляд, решение сделать главное меню платным не лучшим образом скажется на общей популярности Эгеи. Но если разработчик хочет, чтобы пользоваться лайт-версией было неудобно, — поздравляю, у него получилось.<\/p>\n",
            "date_published": "2020-06-22T16:15:29+05:00",
            "date_modified": "2025-06-27T22:01:39+05:00",
            "tags": [
                "Эгея"
            ],
            "author": {
                "name": "Александр Токарев",
                "url": "https:\/\/alexandertokarev.ru\/",
                "avatar": "https:\/\/alexandertokarev.ru\/pictures\/userpic\/userpic@2x.jpg?1529326800"
            },
            "_date_published_rfc2822": "Mon, 22 Jun 2020 16:15:29 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "136427",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "134137",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/instant-vyu-v-telegrame\/",
            "title": "Инстант-вью в Телеграме",
            "content_html": "<p>У меня всё время спрашивают, когда Эгея начнёт поддерживать Инстант-вью (Instant view) Телеграма. Я попытаюсь объяснить, почему этот вопрос, <i>насколько я знаю,<\/i> не имеет смысла.<\/p>\n<p>Инстант-вью в Телеграме <a href=\"https:\/\/instantview.telegram.org\">сделан через жопу<\/a>, и Эгея не может его поддерживать или не поддерживать. Там нужно для каждого сайта отдельно объяснять Телеграму, как он устроен, чтобы Телеграм смог сделать его инстант-вью. То есть у них специальный язык, на котором ты объясняешь разметку сайта Телеграму, чтобы он понял, где там заголовок, где текст статьи, где какие ещё элементы. И тот факт, что почти все сайты на Эгее устроены одинаково под капотом, для Телеграма ничего не значит — нужно для каждого сайта писать такой шаблон отдельно.<\/p>\n<p>Но это ещё полбеды. Я мог бы выложить шаблон для сайтов на Эгее где-то, чтобы вы могли рассказать Телеграму про свой сайт. Но проблема в том, что я не знаю, как ему рассказать. У них там целая страница, где суперподробно расписан сам язык; есть штука, где можно протестировать шаблон для своего сайта; убедиться, что он работает. Я когда-то добился там, что всё заработало в их проверялке.<\/p>\n<p>Но что с этим дальше делать — неизвестно. Нет кнопки «Использовать этот шаблон». Нет места, куда его вставить на своём сайте, чтобы Телеграм увидел. Нихрена понять нельзя; я когда-то на три раза прочитал всю документацию, не въехал и забил.<\/p>\n<p>При этом в моём блоге это в какой-то момент заработало по неизвестным мне причинам. То ли нашёлся кто-то, кто разобрался и сделал. То ли тот шаблон, который я писал в их проверялке, как-то «активировался» через какое-то время. Но теперь я даже не знаю, где искать этот шаблон, чтобы его вам показать.<\/p>\n<p>Поэтому если вдруг среди вас есть кто-то, кто в силах эту дичь понять, и может написать внятную инструкцию «Как поддержать Инстант-вью на своём сайте на Эгее», я с удовольствием дам ссылку или даже опубликую у себя.<\/p>\n",
            "date_published": "2018-03-17T20:24:21+05:00",
            "date_modified": "2025-02-10T23:42:51+05:00",
            "tags": [
                "телеграм",
                "Эгея"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Sat, 17 Mar 2018 20:24:21 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "134137",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079e)"
}