{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блог Ильи Бирмана: заметки с тегом программирование",
    "_rss_description": "Блог Ильи Бирмана о дизайне, городах, музыке и жизни.",
    "_rss_language": "ru",
    "_itunes_email": "ilyabirman@ilyabirman.ru",
    "_itunes_categories_xml": "<itunes:category text=\"Arts\"><itunes:category text=\"Design\" \/><\/itunes:category>\r\n<itunes:category text=\"Society &amp; Culture\"><itunes:category text=\"Personal Journals\" \/><\/itunes:category>\r\n<itunes:category text=\"Technology\" \/>\r\n",
    "_itunes_image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic-square@2x.jpg?1573933764",
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/ilyabirman.ru\/meanwhile\/tags\/programming\/",
    "feed_url": "https:\/\/ilyabirman.ru\/meanwhile\/tags\/programming\/json\/",
    "icon": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764",
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
            "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
        }
    ],
    "items": [
        {
            "id": "6678",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/programmirovanie-s-kodeksom-chatagpt-git-i-levye-zametki\/",
            "title": "Программирование с Кодексом ЧатаГПТ: гит и левые заметки",
            "content_html": "<p>Пара примеров того, с чем Кодекс очень помогает.<\/p>\n<p>Во-первых, это всякие фокусы с гитом. Я знаю гит плохо, поэтому пользуюсь в основном линейно, редко завожу ветки и ощущаю всё это очень хрупким. Даже просто поискать что-то в истории, вспомнить ход мысли вызывает много сопротивления. А особенно мне трудно, когда приходится что-то сложное мёрджить: всегда мучительно долго разбираться в истории двух веток, чтобы понять, какую часть из какой нужно взять. Вот примеры того, что я спрашиваю в связи с этим у Кодекса:<\/p>\n<ul>\n  <li>Я хочу добавить такую-то фичу, но вижу, что код для неё тут есть, но он почему-то закомментирован. Видимо, я когда-то начал это делать, но столкнулся с проблемой и забил. Найди, когда это появилось, когда было закомментировано, посмотри какие ещё правки были сделаны в это время. Как ты думаешь, почему я закомментировал?<\/li>\n  <li>Кажется, я когда-то сто лет назад я удалил код, который делал то-то, потому что это стало ненужно. Но теперь мне снова нужно подобное. Найди, где это было, вытащи в отдельный файл рядом под таким-то названием.<\/li>\n  <li>Тут в комментарии написано что-то странное, вроде код делает другое. Найди, когда появился этот код и когда комментарий, объясни, почему они расходятся, или наоборот, почему тут на самом деле всё правильно.<\/li>\n  <li>Я пытаюсь смёрджить две ветки и вижу вот такой конфликт. Объясни, как корректно смёрджить вот такую функцию, когда и почему в ней возникло расхождение. Что я пытался сделать в каждой из веток после точки ветвления?<\/li>\n<\/ul>\n<p>То есть я здесь ничего не прошу программировать за меня, но я использую Кодекс как в миллион раз более удобный интерфейс гита, чем все гит-клиенты вместе взятые.<\/p>\n<p>Во-вторых, это просто попытка осмыслить какие-то багрепорты или даже собственные заметки. Иногда даже просто искать по текущему слепку кода что-то сложно, потому что у тебя нет в голове конкретной строчки кода:<\/p>\n<ul>\n  <li>Мне пришла вот такая жалоба от пользователя: (текст) Вникни и оцени, насколько это верно. В каких файлах у меня это происходит?<\/li>\n  <li>Я нашёл у себя тудушку трёхлетней давности сделать такой-то рефакторинг. Посмотри, это ещё имеет смысл?<\/li>\n  <li>Я нашёл библиотеку, которая делает то-то. Кажется, мне это может быть полезно там-то. Что думаешь?<\/li>\n<\/ul>\n<p>Вообще, если у вас запрос в духе «прочитай мои мысли», то кажется, что это просто не может сработать. Но это очень часто срабатывает. Во всяком случае, точно стоит попробовать.<\/p>\n",
            "summary": "Пара примеров того, с чем Кодекс очень помогает...",
            "date_published": "2026-03-10T09:38:18+02:00",
            "date_modified": "2026-03-10T09:45:44+02:00",
            "tags": [
                "нейросети",
                "программирование"
            ],
            "_date_published_rfc2822": "Tue, 10 Mar 2026 09:38:18 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6678",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "6608",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/listening-87\/",
            "title": "Что послушать — 87",
            "content_html": "<p>Всё, что можно слушать, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/layfhak-pro-slushanie-lekciy-i-dokladov\/\">я стараюсь слушать<\/a>, а не читать и не смотреть. Потому что когда у меня свободны глаза, я предпочитаю делать что-то более полезное.<\/p>\n<p>Вот что я слушал в последнее время, что мне понравилось:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=iPER_ur_nDU\">Что такое «дизайн из сердечка»<\/a>. Антона Бондарев рассказывает про свои продуктово-дизайнерские дела.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=_lnRil3TF0E\">Когда ИИ слышит тех, кого не слышит мир<\/a>. Лера Курмак про всякие технологии для инвалидов (которыми мы все в той или иной степени будем).<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=5E5LQgwbDd4\">Посыл во вселенную с Антоном Шнайдером под Новый год<\/a>. В подкаст Стеблины и Чатского пришёл целый Шнайдер! Антон умудряется говорить очень странно, но как-то так, что я его понимаю. Или мне нравится так думать. В выпуске звучат слова «изображение унижает божественную мечту», а также хорошая аналогия с бумажкой в лесу.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=eIoohUmYpGI\">The Infinite Software Crisis<\/a>. Программист из Нетфликса рассказывает, как быть со стремительно возрастающей сложностью кода, который генерируют нейросети. Всё это очевидно, но почему-то, похоже, не всем программистам, что ли. Рассказано хорошо, так что рекомендую послушать.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=8dRZk74OyMk\">Why You Keep Telling Yourself I’ll Do It Tomorrow<\/a>. Классный разбор того, как работает прокрастинация. Примерно первая половина интересна, дальше уже необязательно слушать.<\/li>\n<\/ol>\n",
            "summary": "Дизайнерские разговоры, возрастающая сложность кода и как работает прокрастинация",
            "date_published": "2026-02-15T22:15:26+02:00",
            "date_modified": "2026-02-15T22:15:16+02:00",
            "tags": [
                "дизайн",
                "доступность",
                "программирование",
                "что послушать"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png",
            "_date_published_rfc2822": "Sun, 15 Feb 2026 22:15:26 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6608",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png"
                ]
            }
        },
        {
            "id": "6626",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/think-on-53\/",
            "title": "Думаем дальше № 53 — «Стал программистом с большой буквы» с Женей Арутюновым",
            "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:\/\/open.spotify.com\/show\/7i4OkUq55wAC1iyZYEshmi\">Спотифай<\/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: right\">0:00<\/td>\n    <td style=\"text-align: left\">Исправление в поле нужно принимать сразу, не дожидаясь расфокуса<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">4:18<\/td>\n    <td style=\"text-align: left\">Вежливость интерфейса при работе с людьми<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">5:44<\/td>\n    <td style=\"text-align: left\">Про то, когда мешают «ты» и «вы» в одном сообщении. Не влезай, убьёт<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">8:42<\/td>\n    <td style=\"text-align: left\">Процесс согласования, который к такому приводит<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">11:29<\/td>\n    <td style=\"text-align: left\">Женя про метакодинг<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">14:19<\/td>\n    <td style=\"text-align: left\">Пример: интеграция веб-формы с Эйртейблом<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">19:51<\/td>\n    <td style=\"text-align: left\">Пример: 3Д-иллюстрация<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">24:02<\/td>\n    <td style=\"text-align: left\">Пример: Муляж аудиоплеера, который оказался не муляжом<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">26:26<\/td>\n    <td style=\"text-align: left\">Как эти эксперименты помогают прощупывать границы возможного<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">27:13<\/td>\n    <td style=\"text-align: left\">Илья про то, как дизайн вдруг оказался сложнее программирования<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">29:45<\/td>\n    <td style=\"text-align: left\">Режим планирования и agents.md<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">35:48<\/td>\n    <td style=\"text-align: left\">Чувство контроля при программировании с нейроагентами<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">40:04<\/td>\n    <td style=\"text-align: left\">Первый опыт вайб-кодинга Ильи: Колокол Тарта<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">52:26<\/td>\n    <td style=\"text-align: left\">Женины комментарии про метанавыки и как всю жизнь мы готовились к этому<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">59:11<\/td>\n    <td style=\"text-align: left\">Что Илья имеет против принципа Юма. Формальная сторона<\/td>\n  <\/tr>\n  <tr>\n    <td style=\"text-align: right\">1:05:25<\/td>\n    <td style=\"text-align: left\">Содержательная сторона<\/td>\n  <\/tr>\n<\/table>\n",
            "summary": "С Женей Арутюновым обсуждаеем программирование с нейросетями и моральную философию",
            "date_published": "2026-01-07T08:47:17+02:00",
            "date_modified": "2026-01-11T00:28:49+02:00",
            "tags": [
                "Думаем дальше",
                "нейросети",
                "пользовательский интерфейс",
                "программирование",
                "текст",
                "философия"
            ],
            "_date_published_rfc2822": "Wed, 07 Jan 2026 08:47:17 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6626",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "6584",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/dialog-s-kodeksom-chatagpt-pri-razraboke-egei\/",
            "title": "Диалог с «Кодексом» ЧатаГПТ при разрабоке Эгеи",
            "content_html": "<p>Писать код с ИИ-помощником — огромный кайф, продуктивность значительно вырастает, а главное — снимается сопротивление перед тем, как за что-то взяться. Но относиться к нему важно как коллеге со слабым пониманием продукта и плохим вкусом, который зато начинался всех книжек про лучшие практики и знает всю документацию про всё.<\/p>\n<p>Вот краткий художественный пересказ сегодняшнего нашего диалога об Эгее:<\/p>\n<p>— Изучи мой код внимательно и расскажи, что нужно, чтобы добавить на страницу новой заметки такую-то фичу.<br \/>\n— Изучил. Чтобы добавить фичу на страницу с адресом \/@\/new\/ есть два способа: первый не работает, а второй работает, это всего 30 строчек кода.<br \/>\n— Почему ты пишешь \/@\/new, ведь адрес страницы просто \/new\/. И зачем обсуждать первый способ, если он не работает?<br \/>\n— Ах да, я просто посмотрел, что когда-то раньше (коммит такой-то десять лет назад) адрес был \/@\/new\/, поэтому решил упомянуть это, если вдруг ты захочешь его вернуть.<br \/>\n— Нет, не захочу. Ладно, давай свои 30 строчек кода.<br \/>\n— Вот, написал.<br \/>\n— Окей, у меня не работает. Вот что я делаю, вот чего ожидаю, вот что получаю, а вот что вижу в консоли.<br \/>\n— Всё правильно, оно и не должно работать, это ожидаемое поведение, ведь ты не написал ещё другой кусок кода.<br \/>\n— Как понять «я не написал»? Это же ты не написал. Ну напиши.<br \/>\n— Вот, написал.<br \/>\n— Хорошо, теперь работает, но грузится немыслимые пятнадцать секунд или около того. Надо мгновенно.<br \/>\n— Исправил одну строчку, теперь должно быть мгновенно.<br \/>\n— Всё работает как надо. Давай теперь разбираться, что ты понаписал. Для чего вот это? А вот это? А почему тут не использовать вот такой уже имеющийся у меня код?<br \/>\n— Это на такой-то случай. Это в принципе можно убрать. А тут твой код подходит даже лучше, молодец, что заметил!<br \/>\n— Ну так исправь.<br \/>\n— Исправил. Но теперь не будет работать из-за того-то.<br \/>\n— Ёлки, так что ж ты сразу не сказал?<br \/>\n— Прости, я не так тебя понял. Хочешь, верну как было.<br \/>\n— Я хочу, чтобы ты убрал лишнее и переиспользовал имеющийся код, где можно, но чтобы всё работало.<br \/>\n— Хорошо, сделал.<br \/>\n— Теперь я заметил, что ты положил новый файл в такую-то папку, а у меня всё подобное лежит в другой. Давай перенесём.<br \/>\n— Перенёс. Заодно убрал комментарии и поменял стиль кода в случайных местах.<br \/>\n— А об этом-то кто просил? Верни мой нормальный стиль кода и комментарии. Ещё ты добавил в конфиг Вебпака исключение чисто ради нашей новой фичи. Мне не нравится это, потому что я никогда не вспомню, что оно там. Придумай, как локализовать всё про неё в одном месте.<br \/>\n— Готово.<br \/>\n— Я смотрю, ты заодно переписал файл .htaccess, добавил туда какую-то отсебятину, а мои правила убил. Это что такое?<br \/>\n— Чтобы фича работала, нужно отправить определённые хедеры браузеру, вот я и добавил правило в .htaccess. Твои правила случайно удалил, прости, уже вернул.<br \/>\n— Так, а эта функция вообще будет у нас работать, если пользователь установил Эгею не в корень блога, а в подпапку? Я смотрю, ты какие-то пути к файлам там пишешь от корня.<br \/>\n— Не будет, и вот тебе объяснение на три страницы, почему именно.<br \/>\n— Ну так а надо-то, чтобы работало. Напиши так, чтобы работало.<br \/>\n— Готово, я добавил по 2-3 строчки разного кода в десяток файлов, теперь всё будет работать. Файл .htaccess теперь будет генерироваться динамически во время инсталляции и содержать нужный путь, чтобы работало в любой подпапке.<br \/>\n— Боже, ты с ума сошёл? Смотри сколько всего ты нагородил. Надо придумать, как сделать, чтобы работало без этого. Зачем ты вообще этот .htaccess трогать вздумал? Во всех остальных случаях я шлю хедеры просто из кода на ПХП функцией header (). Почему вдруг именно тут ты решил это сделать через .htaccess? Давай сделаем как везде.<br \/>\n— Ты прав. Я написал ПХП-файл и положил его вместо .htaccess, чтобы он слал нужные хедеры. Всё, что нагородил до этого, удалил.<br \/>\n— А почему этот ПХП-файл ты положил туда? У меня в проекте такого нет, у меня весь ПХП-код живёт в одном месте, а не в раскиданных где попало ПХП файлах. Если надо, чтобы этот файл отдавался по определённому урлу, для этого у меня есть роутер. Разберись как он работает и положи свой ПХП-код в логичное место, как у меня принято.<br \/>\n— Сделал. Я ещё написал вспомогательную функцию, которая конкатенирует две строки, и теперь вызываю её в двух местах!<br \/>\n— Жесть. Я удалил твою функцию и просто конкатенирую две строки напрямую. Я ещё переписал твой код так, чтобы он стал вдвое короче, убрал часть проверок. Убедись, что я ничего не сломал.<br \/>\n— Твоё исправление выглядит отлично! Действительно, ничего этого проверять не нужно было! Осталось только убедиться, что значение не заканчивается слешем.<br \/>\n— Не понял. Зачем ты написал, что осталось убедиться? Я ж эту проверку как раз оставил, то есть убеждаюсь.<br \/>\n— Да, убеждаешься, это я так просто написал, разговор поддержать...<br \/>\n— Также я смотрю, ты ещё и часть логики в шаблон дизайна засунул. Где такое видано? Перенеси эту логику в ядро, а в шаблоне дизайна используй уже подготовленную переменную.<br \/>\n— Код из шаблона в ядро перенёс, заодно добавил там других ненужных проверок.<br \/>\n— Убери.<br \/>\n— Убрал.<br \/>\n— Так, а вот эта штука у тебя зачем?<br \/>\n— Это нужно для того-то.<br \/>\n— Но для того-то у меня уже есть вот такая своя штука, давай использовать её.<br \/>\n— Давай. Отличная идея. У тебя тут ещё и такой-то случай учтён, ну надо же! Какой ты молодец!<\/p>\n<p>Ну и так далее. Это всё ужасно бесит, но с другой стороны за пару часов я сделал с ним то, что без него не сделал бы примерно никогда.<\/p>\n<p>Честно говоря, я не понимаю, что получается у вайб-кодеров. Страшно представить, какая там глючная и кривая каша под капотом. ЧатГПТ как бы делает и оно даже работает, но настолько через жопу, что доверять ему нельзя. Важно проверять каждую строчку и внимательно убеждаться, что ты её понимаешь, и что весь код, который он пишет, действительно нужен, учитывает твои реалии и стоит именно в том месте, где это логично для твоего проекта.<\/p>\n",
            "summary": "Писать код с ИИ-помощником — огромный кайф, продуктивность значительно вырастает, а главное — снимается сопротивление перед тем, как за что-то взяться",
            "date_published": "2025-11-15T08:05:41+02:00",
            "date_modified": "2025-11-15T10:28:52+02:00",
            "tags": [
                "нейросети",
                "программирование",
                "Эгея"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-og-image.jpg",
            "_date_published_rfc2822": "Sat, 15 Nov 2025 08:05:41 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6584",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-og-image.jpg"
                ]
            }
        },
        {
            "id": "6569",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/kodeks-chatagpt-pishet-ochen-mnogo-lishnego\/",
            "title": "«Кодекс» ЧатаГПТ пишет очень много лишнего",
            "content_html": "<p>Что бесит в манере «Кодекса» ЧатаГПТ писать код — это безумное бесконечное нагромождение проверок всего, что нужно и не нужно.<\/p>\n<p>Вот он пишет две функции, одна вызывает другую. И в вызывающей функции он проверяет, что первая вернула не null и что там именно строка, потом оборачивает это в trim (), что-то ещё выдумывает. Я говорю: нафига ты это делаешь? Вот же первая функция возвращает один из пяти вариантов ответа, каждый из которых буквально написан тобой в коде, все они — строки, и ни в одной из них нет пробелов по краям. Что за графомания?<\/p>\n<p>А он говорит, мол, на всякий случай, вдруг ты в будущем ту первую функцию изменишь.<\/p>\n<p>В такие моменты понимаешь, почему в корпорациях работает по сто тыщ программистов и они месяцами элементарную фичу выкатить не могут. Каждый пишет свой санитайзер данных, полученных из чужого кода, потому что никто никому не доверяет. А потом ЧатГПТ обучается на этой дичи и не может написать строку кода, в которой просто написано ровно то, что имелось в виду.<\/p>\n<p>Короче, постепенно оказалось, что одна из тех двух функций просто не нужна, можно всё выразить в одной и в пять раз короче.<\/p>\n",
            "summary": "Что бесит в манере «Кодекса» ЧатаГПТ писать код — это безумное бесконечное нагромождение проверок всего, что нужно и не нужно",
            "date_published": "2025-10-27T14:33:50+02:00",
            "date_modified": "2025-10-26T20:55:00+02:00",
            "tags": [
                "нейросети",
                "программирование"
            ],
            "_date_published_rfc2822": "Mon, 27 Oct 2025 14:33:50 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6569",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "6486",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/listening-83\/",
            "title": "Что послушать — 83",
            "content_html": "<p>Всё, что можно слушать, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/layfhak-pro-slushanie-lekciy-i-dokladov\/\">я стараюсь слушать<\/a>, а не читать и не смотреть. Потому что когда у меня свободны глаза, я предпочитаю делать что-то более полезное.<\/p>\n<p>Вот что я слушал в последнее время, что мне понравилось:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=vagyIcmIGOQ\">Дэвид Хайнемайер Хенсон у Лекса Фридмана<\/a>. Всё правильно и про программирование, и про бизнес, и про отношение к жизни, а также интересно про гонки, особенно после того, как посмотришь эпловскую «Формулу 1».<\/li>\n  <li><a href=\"https:\/\/overcast.fm\/+ABD4yYAS3fM\">What To Do When The World Is Falling Apart<\/a>. Недавно открыл для себя такого классного ютюбера-психотерапевта. Тут он отлично прочищает мозги людям со взглядами типа «мир нам всё должен» вместо того, чтобы начать самостоятельно чё-то решать.<\/li>\n  <li><a href=\"https:\/\/atp.fm\/644\">ATP 644: You Have to Invert<\/a>. В этом выпуске любимого подкаста АТП обсуждают новый дизайн Макоса, и там много классного, особенно речь Сиракьюсы о том, как тупо отрывать панели от краёв экрана в районе 1:08.<\/li>\n  <li><a href=\"https:\/\/daringfireball.net\/thetalkshow\/2025\/07\/31\/ep-428\">The Talk Show 428: Michigan-Starred Fine Dining<\/a>. А это выпуск шоу Джона Грубера, где они с гостем Луи Мантией ситуацию с дизайном интерфейсов в Эпле и тот факт, что у Алана Дая, оказывается, даже нет образования на эту тему.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=5KmpT-BoVf4\">Сэм Альтман о боге, Илоне Маске и загадочной смерти своего бывшего сотрудника<\/a>. Интервью Такера Карлсона! Ребята стоят друг друга, конечно.<\/li>\n<\/ol>\n",
            "summary": "Как смотреть на жизнь, на дизайн в Эпле и на будущее с ИИ",
            "date_published": "2025-09-17T11:28:38+02:00",
            "date_modified": "2025-09-17T14:31:31+02:00",
            "tags": [
                "Айфон",
                "дизайн",
                "жизнь",
                "Мак",
                "нейросети",
                "пользовательский интерфейс",
                "программирование",
                "психология",
                "что послушать",
                "Эпл"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png",
            "_date_published_rfc2822": "Wed, 17 Sep 2025 11:28:38 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6486",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png"
                ]
            }
        },
        {
            "id": "6469",
            "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",
            "summary": "Вы наверное слышали про новый редактор кода Курсор со встроенным ИИ. Я даже слушал подкаст с его авторами несколько месяцев назад",
            "date_published": "2025-04-16T10:43:44+02:00",
            "date_modified": "2025-04-16T11:53:39+02:00",
            "tags": [
                "искусственный интеллект",
                "Курсор",
                "программирование",
                "Эгея"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-og-image.jpg",
            "_date_published_rfc2822": "Wed, 16 Apr 2025 10:43:44 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6469",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": true,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-og-image.jpg"
                ]
            }
        },
        {
            "id": "6406",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/listening-79\/",
            "title": "Что послушать — 79",
            "content_html": "<p>Всё, что можно слушать, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/layfhak-pro-slushanie-lekciy-i-dokladov\/\">я стараюсь слушать<\/a>, а не читать и не смотреть. Потому что когда у меня свободны глаза, я предпочитаю делать что-то более полезное.<\/p>\n<p>Вот что я слушал в последнее время, что мне понравилось:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/www.20k.org\/episodes\/the-sound-of-apple\">The sound of Apple<\/a> и <a href=\"https:\/\/www.20k.org\/episodes\/the-sound-of-apple-2\">The sound of Apple 2<\/a> — два выпуска подкаста про звуки в эпловских устройствах.<\/li>\n  <li><a href=\"https:\/\/www.relay.fm\/radar\/304\">Onboarding<\/a>. Хороший выпуск про онбординг в приложениях. Не буквально про экраны, которые называются «онбордингом», а вообще про первый контакт с приложением. Про то, что люди устанавливают программы, нифига не понимают, и тут же удаляют. Про то, что даже минимальное припятствие типа кнопки «Начать» (вместо того, чтобы просто сразу начать) срезает заметную часть пользователей.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=FIUka1KHIqs\">Анна Виленская впервые о муже, бунтарском периоде и фальши «русской народной» музыки<\/a>. Жёлтые заголовки бесят, но Анна клёвая.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/playlist?list=PLmmYSbUCWJ4x1GO839azG_BBw8rkh-zOj\">Clean Code<\/a>. Некий дядя Боб учит, как писать чистый, «вежливый» код. Там шесть уроков, самый крутой урок — 3-й про ожидания от программистов, которые им кажутся безумными, а всем остальным людям — само собой разумеющимися (типа чтобы программы не глючили). В уроке 5 примерно на 20-25 минутах он рассказал, как он понял, что программист — кайфовейшая история и очень близкая. В уроке 6 было про менеджмент и аджайл. «Требования и должны меняться, иначе зачем мы делаем софт, а не хард?» Единственное, что подрывает доверие — он программирует на Джаве.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=9nQUg4QeI_Y\">The Greatest God Debate In History<\/a>. Нашёлся некий Мэтт Диллаханти, который справляется с Джорданом Питерсоном и заставляет его запутаться в собственной лапше! После 47:46 классный кусок, где Питерсон умудрился не перебивать достаточно долго, чтобы Диллаханти сформулировал развёрнутую мысль.<\/li>\n<\/ol>\n",
            "summary": "Саунд-дизайн у Эпла, онбординг отпугивает людей, Виленская в Нью-Йорке, шесть уроков вежливого кода и достойный оппонент Питерсона",
            "date_published": "2025-01-21T09:17:17+02:00",
            "date_modified": "2025-01-21T09:12:38+02:00",
            "tags": [
                "дизайн продуктов",
                "общество",
                "пользовательский интерфейс",
                "программирование",
                "философия",
                "что послушать",
                "Эпл"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png",
            "_date_published_rfc2822": "Tue, 21 Jan 2025 09:17:17 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6406",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png"
                ]
            }
        },
        {
            "id": "6341",
            "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",
            "summary": "В платной Эгее есть возможность запланировать заметку на время. Понятно, что у меня нормальный интерфейс выбора даты и времени",
            "date_published": "2024-08-31T19:21:18+02:00",
            "date_modified": "2024-08-31T19:32:20+02:00",
            "tags": [
                "программирование",
                "Эгея"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-og-image.jpg",
            "_date_published_rfc2822": "Sat, 31 Aug 2024 19:21:18 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6341",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/aegea-og-image.jpg"
                ]
            }
        },
        {
            "id": "6218",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/listening-71\/",
            "title": "Что послушать — 71",
            "content_html": "<p>Всё, что можно слушать, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/layfhak-pro-slushanie-lekciy-i-dokladov\/\">я стараюсь слушать<\/a>, а не читать и не смотреть. Потому что когда у меня свободны глаза, я предпочитаю делать что-то более полезное.<\/p>\n<p>Вот что я слушал в последнее время, что мне понравилось:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=fJoxD-puXEU\">Александр Пиперски в «Основе»<\/a>. Почему хочется говорить «красиве́е». Нет никаких подлежащих и сказуемых. Что значит слово «Даже».<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=5qs8e7dDWec\">Мастер-класс Николая Товеровского о понимании задачи и плане проекта<\/a>.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=130KewQ3GKg\">Арутюнов S01E02<\/a>. Женя ближе к концу отвечает на вопрос о том, как выбрать между существующим скучным, но денежным проектом и туманными, но манящими перспективами.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=f_lRdkH_QoY\">Такер Карлсон у Лекса Фридмана<\/a>. Про интервью Путина и прекрасную Москву настоящего. Интересно было послушать, но сам Такер кажется каким-то очень отталкивающим человеком.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=pW-SOdj4Kkk\">Jonathan Blow: Preventing the Collapse of Civilization<\/a>. Классный доклад про то, что программисты разучились нормально программировать. Говорят, мол, с бизнесовой точки зрения доводить всё до ума нерационально. Может и так, но как тогда нам убедиться, что мы вообще как человечество ещё способны делать нормально в принципе?<\/li>\n<\/ol>\n",
            "summary": "Пиперски отрицает подлежащие и сказуемые, Товеровский и Арутюнов учат работать, Карлсон учит любить Россию, а Блоу констатирует, что мы разучились программировать",
            "date_published": "2024-03-22T15:37:56+02:00",
            "date_modified": "2024-03-22T15:45:36+02:00",
            "tags": [
                "политика",
                "программирование",
                "русский язык",
                "управление собой",
                "что послушать"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png",
            "_date_published_rfc2822": "Fri, 22 Mar 2024 15:37:56 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6218",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png"
                ]
            }
        },
        {
            "id": "6194",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/dollar-not-only-end\/",
            "title": "Доллар в регвыражениях не всегда означает конец строки",
            "content_html": "<p>Долго боролся сейчас с одним багом, поэтому пишу себе, чтобы не забыть.<\/p>\n<p>Есть регулярное выражение (для примера):<\/p>\n<blockquote>\n<p><tt>\/(some|any)thing$\/i<\/tt><\/p>\n<\/blockquote>\n<p>Доллар, уверен я, означает «конец строки». Выражение должно проверять, что строка заканчивается на слово something или anything в любом регистре. Но вот оно иногда срабатывает, даже если строка не заканчивается на него! Я в отчаянии уже проверяю впрямую, что строка заканчивается на g или G, и точно вижу, что она не заканчивается. А выражение срабатывает!<\/p>\n<p>Замечаю, что это происходит, если в конце выражения стоит возврат каретки. Думаю: какого хрена? У меня же написан доллар сразу после g, никаких возвратов каретки там! Модификатора \/m, который разделяет текст на отдельные строки, нет. Может, он как-то там по умолчанию включился, и надо его, наоборот, отключить?<\/p>\n<p>От безысходности <a href=\"https:\/\/www.php.net\/manual\/en\/reference.pcre.pattern.modifiers.php\">иду читать документацию<\/a>. Никакого антонима модификатору \/m не нахожу. Читаю про сам \/m:<\/p>\n<blockquote>\n<p><tt>m (PCRE_MULTILINE)<\/tt><br \/>\nBy default, PCRE treats the subject string as consisting of a single «line» of characters (even if it actually contains several newlines). The «start of line» metacharacter (^) matches only at the start of the string, while the «end of line» metacharacter ($) matches only at the end of the string, or before a terminating newline (unless D modifier is set).<\/p>\n<\/blockquote>\n<p>Что? Что ещё за нахрен \/D?<\/p>\n<blockquote>\n<p><tt> D (PCRE_DOLLAR_ENDONLY)<\/tt><br \/>\nIf this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines).<\/p>\n<\/blockquote>\n<p>Как же можно было такую дичь придумать? Исправляю регулярное выражение:<\/p>\n<blockquote>\n<p><tt>\/(some|any)thing$\/iD<\/tt><\/p>\n<\/blockquote>\n<p>А также запоминаю, что надо теперь вообще всегда использовать модификатор \/D, потому что если блин мне надо возврат каретки мэтчить, я это в состоянии впрямую сформулировать внутри регвыражения, а не полагаться на это хитрожопое исключение.<\/p>\n",
            "summary": "Долго боролся сейчас с одним багом, поэтому пишу себе, чтобы не забыть",
            "date_published": "2024-01-03T16:08:26+02:00",
            "date_modified": "2024-01-03T16:11:32+02:00",
            "tags": [
                "программирование",
                "ПХП"
            ],
            "_date_published_rfc2822": "Wed, 03 Jan 2024 16:08:26 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6194",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "6117",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/atp-kids-programming\/",
            "title": "Подкаст АТП: как дети становятся программистами",
            "content_html": "<p>Джон Сиракьюса <a href=\"https:\/\/atp.fm\/446\">в 446-м выпуске АТП<\/a> <span class=\"e2-media-seek jouele-control\" data-href=\"https:\/\/traffic.libsyn.com\/atpfm\/atp446.mp3\" data-type=\"seek\" data-range=\"40:36...41:12\">начиная с 40:36<\/span> рассказывает про то, как дети становятся программистами, и что у него с его детьми не прокатило:<\/p>\n<div class=\"e2-text-audio\">\n<div class=\"e2-jouele-wrapper\"><a class=\"jouele\" data-space-control=\"true\" href=\"https:\/\/traffic.libsyn.com\/atpfm\/atp446.mp3\">446: Dead From Fraud<\/a><\/div>\n<\/div>\n<blockquote>\n<p>With my kids, I had no success getting them to want to learn to program at any age. I didn’t really push it that hard, but I was putting it in front of them, see if they are into it, see if it would grab them. And it never got hooked. And we all — all three of us — know what it means to get hooked on programming. It’s one of those things that just happens, right? You can see when programming gets its claws into somebody. And you know, it’s not subtle. You’ll find yourself just sucked in and just constantly working on this program — we all experienced it. That’s how we became who we are. But when that doesn’t happen, it doesn’t happen.<\/p>\n<\/blockquote>\n",
            "summary": "Джон Сиракьюса в 446-м выпуске АТП начиная с 40:36 рассказывает про то, как дети становятся программистами, и что у него с его детьми не прокатило",
            "date_published": "2023-10-17T08:07:15+02:00",
            "date_modified": "2023-10-17T08:07:33+02:00",
            "tags": [
                "подкасты",
                "программирование",
                "цитаты"
            ],
            "_date_published_rfc2822": "Tue, 17 Oct 2023 08:07:15 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6117",
            "_rss_enclosures": [
                {
                    "url": "https:\/\/traffic.libsyn.com\/atpfm\/atp446.mp3",
                    "type": "audio\/mpeg",
                    "length": ""
                }
            ],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "jouele\/jouele.css",
                    "jouele\/jouele.js"
                ],
                "og_images": []
            }
        },
        {
            "id": "5774",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/weekend-reading-189\/",
            "title": "Что почитать на выходных — 189",
            "content_html": "<p>Вот:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/www.truthcoin.info\/blog\/consent-of-the-governed\/\">The Consent of the Governed<\/a>. Интересные, хотя и слишком затянутые, рассуждения о том, что такое согласие и почему (типа) принципиально невозможно добиться того, чтобы в обществе всё делалось с согласия, а не по принуждению.<\/li>\n  <li><a href=\"https:\/\/avva.livejournal.com\/3511985.html\">О великом чит-коде<\/a>. Крутая заметка про математику.<\/li>\n  <li><a href=\"https:\/\/economicsfromthetopdown.com\/2022\/04\/08\/the-dunning-kruger-effect-is-autocorrelation\/\">The Dunning-Kruger Effect is Autocorrelation<\/a>. Эффекта Даннинга — Крюгера не существует. «In their seminal paper, Dunning and Kruger are the ones broadcasting their (statistical) incompetence by conflating autocorrelation for a psychological effect. In this light, the paper’s title may still be appropriate. It’s just that it was the authors (not the test subjects) who were „unskilled and unaware of it“».<\/li>\n  <li><a href=\"https:\/\/twitter.com\/dieworkwear\/status\/1680871501824917504?s=46&t=xp6lb-s1mEQImjFTQA2JLA\">Разбор нарядов испанского короля Филиппа<\/a>. Тред в Твиттере. Вот уж на что мне было бы пофиг, но просто интересно, до какой степени можно заморачиваться в каких-то вообще других областях жизни, чем занимают меня.<\/li>\n  <li><a href=\"https:\/\/tonsky.me\/blog\/unicode\/\">The Absolute Minimum Every Software Developer Must Know About Unicode in 2023<\/a>. Никита Прокопов написал большой пост про Уникод. Я прочитал по диагонали, потому что в целом всё это и так понимаю, но решил всё равно включить сюда для коллекции.<\/li>\n<\/ol>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/jenson.org\/text\/\">The invisible problem<\/a>. О редактировании текста на мобиле. Фигасе, инвизибл! Без компьютера текст вообще писать невозможно, и всю жизнь бесит, насколько Эплу пофиг эта тема. Пока на Айфонах был 3Д-тач и можно было нормально выделять текст, было ещё туда-сюда, а потом опять стал ужас. Автор предлагает свой интерфейс, выглядит интересно, захотелось попробовать.<\/li>\n  <li><a href=\"https:\/\/world.hey.com\/dhh\/i-was-wrong-we-need-crypto-587ccb03\">I was wrong, we need crypto<\/a>. Дэвид Хайнемайер Хенсон догадался, что криптовалюты нужны, посмотрев на историю с канадскими протестами.<\/li>\n<\/ol>\n<p>Однажды в Википедии: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Reid_technique\">Reid technique<\/a><\/p>\n",
            "summary": "Вот",
            "date_published": "2023-10-06T20:27:16+02:00",
            "date_modified": "2025-09-17T14:30:34+02:00",
            "tags": [
                "биткоин",
                "математика",
                "общество",
                "пользовательский интерфейс",
                "программирование",
                "технологии",
                "философия",
                "чтиво"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/weekend-reading.png",
            "_date_published_rfc2822": "Fri, 06 Oct 2023 20:27:16 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5774",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/weekend-reading.png"
                ]
            }
        },
        {
            "id": "5997",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/stroustrup-oop\/",
            "title": "Страуструп про хороший и объектно-ориентированный код",
            "content_html": "<p>Бьорн Страуструп <a href=\"https:\/\/www.youtube.com\/watch?v=86xWVb4XIyE\">рассказывает про Си++<\/a> и такой (53:34):<\/p>\n<blockquote>\n<p>There are people who think good programming means object-oriented programming and object-oriented programming means use of enormous hierarchies. Certainly the first part of that statement is wrong. There’s lots of good code that are not object-oriented and there’s lots of lousy code that are object-oriented by that definition.<\/p>\n<\/blockquote>\n",
            "summary": "Бьорн Страуструп рассказывает про Си++ и такой (53:34)",
            "date_published": "2023-05-24T11:42:18+02:00",
            "date_modified": "2023-05-24T11:42:14+02:00",
            "tags": [
                "программирование",
                "цитаты"
            ],
            "_date_published_rfc2822": "Wed, 24 May 2023 11:42:18 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5997",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "5991",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/ui-course-frag-100\/",
            "title": "На интерфейсном курсе: программисты могли бы подумать о пользе для бизнеса",
            "content_html": "<p>О том, что программисту неплохо было бы не просто формально выполнять требования из ТЗ, но ещё и стараться понимать, откуда такие требования возникли и с какой бизнес-задачей связаны. Это может повлиять на решение. Заодно показываю, как очеловечить, упростить и переверстать форму. 8 минут:<\/p>\n<div class=\"e2-text-video\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/yTIrl1jnEHU?enablejsapi=1\" allow=\"autoplay\" frameborder=\"0\" allowfullscreen><\/iframe>\n<\/div>\n<p>Это фрагмент № 100 онлайн-курса «Пользовательский интерфейс и представление информации». Записано на курсе 9 декабря 2022 года.<\/p>\n<p>До 26 мая идёт запись на курс, который пройдёт с 27 мая по 25 июня.<\/p>\n<p><a href=\"http:\/\/bureau.ru\/educenter\/ui-online\/\" class=\"button buy-button big-button\">Почитать о курсе<\/a><\/p>\n<p class=\"foot\">Программа, отзывы, запись<\/p>\n",
            "summary": "О том, что программисту неплохо было бы не просто формально выполнять требования из ТЗ, но ещё и стараться понимать, откуда такие требования возникли и с какой бизнес-задачей связаны",
            "date_published": "2023-05-10T16:40:21+02:00",
            "date_modified": "2023-08-14T16:13:37+02:00",
            "tags": [
                "веб-формы",
                "видео",
                "программирование",
                "студентам",
                "фрагменты курса ПИ"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/remote\/youtube-yTIrl1jnEHU-cover.jpg",
            "_date_published_rfc2822": "Wed, 10 May 2023 16:40:21 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5991",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/remote\/youtube-yTIrl1jnEHU-cover.jpg"
                ]
            }
        },
        {
            "id": "5875",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/listening-59\/",
            "title": "Что послушать — 59",
            "content_html": "<p>Всё, что можно слушать, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/layfhak-pro-slushanie-lekciy-i-dokladov\/\">я стараюсь слушать<\/a>, а не читать и не смотреть. Потому что когда у меня свободны глаза, я предпочитаю делать что-то более полезное.<\/p>\n<p>Вот что я слушал в последнее время, что мне понравилось:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=LQwP5dIBgiM\">Jordan & Tammy Peterson: Couples Report<\/a>. Джордан Питерсон и его жена Тэмми рассказывают о психологических особенностях друг друга, как это сказывается на их отношениях и чему они научились за свою жизнь. А вопросы им задаёт их дочь.<\/li>\n  <li><a href=\"https:\/\/lexfridman.com\/chris-lattner-2\/\">Крис Латтнер у Лекса Фридмана<\/a>. Крис — автор языка Свифт. Очень приятно послушать его всегда.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=hjh7j6kPYFM\">Легли на дно и полёживаем<\/a>. Наталья Зубаревич вообще интересная про экономику, но тут она в более объёмном-человечном свете, так что ещё лучше.<\/li>\n  <li><a href=\"https:\/\/www.rework.fm\/illusions-of-agreement\/\">Illusions of Agreement<\/a>. Джейсон Фрид и Дэвид Хайнемайер Хенсон объясняют, что лучше один раз увидеть — в том числе, чтобы договориться.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=E9_wVImav3o\">Жизнь на Марсе теперь есть<\/a>. Астроном Дмитрий Вибе на канале «Основа».<\/li>\n<\/ol>\n",
            "summary": "Отношения Джордана Питерсона с женой, Крис Латтнер про программирование и будущее, Наталья Зубаревич про экономику и жизнь, Джейсон Фрид и Дэвид Хайнемейер Хэнсон про важность картинок и Дмитрий Вибе про жизнь на Марсе",
            "date_published": "2022-12-09T08:21:01+02:00",
            "date_modified": "2025-09-17T14:31:22+02:00",
            "tags": [
                "жизнь",
                "отношения",
                "переговоры",
                "программирование",
                "что послушать",
                "экономика"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png",
            "_date_published_rfc2822": "Fri, 09 Dec 2022 08:21:01 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5875",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png"
                ]
            }
        },
        {
            "id": "5470",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/listening-42\/",
            "title": "Что послушать — 42",
            "content_html": "<p>Всё, что можно слушать, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/layfhak-pro-slushanie-lekciy-i-dokladov\/\">я стараюсь слушать<\/a>, а не читать и не смотреть. Потому что когда у меня свободны глаза, я предпочитаю делать что-то более полезное.<\/p>\n<p>Вот что я слушал в последнее время, что мне понравилось:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=JS_u6qr1woo\">45 минут Антона Шнайдера<\/a>.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=MShbP3OpASA\">Aalto Talk with Linus Torvalds<\/a>. Это аж в 2012 году было. Линус суперинтересный, и ещё у него редкое качество для настолько продвинутого технаря: он прекрасно понимает, что большинство людей не такие продвинутые, и не считает, что должны быть. 12:24: «Я не поддерживаю сайт, я интересуюсь программированием».  36:02: Про честность и то, что люди обижаются, когда им говоришь прямо. 49:47 «Нвидия, фак ю». 1:01:15 «Когда это видео опубликуют, тысячи людей очень расстроятся, а мне нравится, когда люди обижаются, ведь те, кто обижаются, заслуживают этого».<\/li>\n  <li><a href=\"https:\/\/radioimmigrant.com\/episodes\/ep083-arturs-boating-adventure\/\">Иммигранткаст 83 — Большое Лодочное Приключение<\/a>. «Артур совершил свою самую большую покупку в жизни и теперь сплавляет ее по Темзе в сторону Лондона». Офигенно интересно следить (ну или это может мне, потому что я знаю Артура и люблю Лондон), но присоединиться желания не возникло.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=mIRkJ8rh4lU\">How To Play A 7-Hour DJ Set<\/a>. Джон Флеминг хорошо рассказывает о работе диджея.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=LPDqnrPQOxc\">Что (же) делать с нашими стереотипами?<\/a> Подписывайтесь на новый канал Сергея Гуриева и слушайте цикл передач о том, что делать с Россией, когда появится возможность что-то делать.<\/li>\n<\/ol>\n",
            "summary": "45 минут Антона Шнайдера, чуть больше Линуса Торвальдса, Большое Лодочное Приключение Артура Пайкина, Джон Флеминг о работе диджея и новый канал Сергея Гуриева",
            "date_published": "2020-11-02T07:35:43+02:00",
            "date_modified": "2020-11-02T07:35:31+02:00",
            "tags": [
                "диджейство",
                "дизайн",
                "жизнь",
                "политика",
                "программирование",
                "что послушать"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png",
            "_date_published_rfc2822": "Mon, 02 Nov 2020 07:35:43 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5470",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png"
                ]
            }
        },
        {
            "id": "5373",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/weekend-reading-185\/",
            "title": "Что почитать на выходных — 185",
            "content_html": "<p>Вот:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/josephg.com\/blog\/crdts-are-the-future\/\">I was wrong. CRDTs are the future<\/a>. Я ранее тоже показывал вам доклад Мартина Клепмана, на который тут ссылается автор.<\/li>\n  <li><a href=\"https:\/\/humantransit.org\/basics\/the-case-for-frequency-mapping\">The Case for Frequency Mapping<\/a>. Джаррет Уокер рассказывает, почему на транспортных схемах суперважно отображать частоту хождения транспорта (а этого почти никто не делает).<\/li>\n  <li><a href=\"https:\/\/meduza.io\/feature\/2020\/07\/23\/iskusstvovedy-godami-sporili-o-vremeni-sutok-na-kartine-vermeera-vid-delfta-etu-zadachku-reshili-astronomy\">Искусствоведы годами спорили о времени суток на картине Вермеера «Вид Делфта». Эту задачку решили астрономы<\/a><\/li>\n  <li><a href=\"https:\/\/habr.com\/ru\/post\/117160\/\">Принцип цикады и почему он важен для веб-дизайнеров<\/a>. Статья старая, и читал я её давно, но почему-то не выкладывал. А она рассказывает, как делать неповторяющиеся текстуры. Вот скеоморфизм вернётся, а вы как раз в курсе.<\/li>\n<\/ol>\n<p>Однажды в Википедии: <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Постоянная_Капрекара\">Постоянная Капрекара<\/a><\/p>\n",
            "summary": "Вот",
            "date_published": "2020-10-09T21:02:25+02:00",
            "date_modified": "2020-10-09T21:02:15+02:00",
            "tags": [
                "дизайн",
                "жизнь",
                "программирование",
                "транспортные схемы",
                "чтиво"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/weekend-reading.png",
            "_date_published_rfc2822": "Fri, 09 Oct 2020 21:02:25 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5373",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/weekend-reading.png"
                ]
            }
        },
        {
            "id": "5397",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/doklad-pro-kollaborativnye-prilozheniya\/",
            "title": "Доклад про коллаборативные приложения",
            "content_html": "<p>Как делать коллаборативные (они же мультиплеерные) приложения. Гугль-док, Фигма, OT, CRDT, все дела. Даёт хорошее представление о проблеме и решениях:<\/p>\n<div class=\"e2-text-video\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/x7drE24geUw?enablejsapi=1\" allow=\"autoplay\" frameborder=\"0\" allowfullscreen><\/iframe>\n<\/div>\n",
            "summary": "Как делать коллаборативные (они же мультиплеерные) приложения. Гугль-док, Фигма, OT, CRDT, все дела. Даёт хорошее представление о проблеме и решениях",
            "date_published": "2020-08-11T09:08:07+02:00",
            "date_modified": "2020-08-11T09:09:44+02:00",
            "tags": [
                "веб-разработка",
                "видео",
                "программирование"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/remote\/youtube-x7drE24geUw-cover.jpg",
            "_date_published_rfc2822": "Tue, 11 Aug 2020 09:08:07 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5397",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/remote\/youtube-x7drE24geUw-cover.jpg"
                ]
            }
        },
        {
            "id": "5284",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/listening-22\/",
            "title": "Что послушать — 22",
            "content_html": "<p>Всё, что можно слушать, <a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/layfhak-pro-slushanie-lekciy-i-dokladov\/\">я стараюсь слушать<\/a>, а не читать и не смотреть. Потому что когда у меня свободны глаза, я предпочитаю делать что-то более полезное.<\/p>\n<p>Вот что я слушал в последнее время, что мне понравилось:<\/p>\n<ol start=\"1\">\n  <li><a href=\"https:\/\/atp.fm\/episodes\/374\">ATP 374: Screwdriver Testing Harness<\/a>. В начале этого выпуска Марко Армент классно рассказывает про то, как его бесит в современном коде на ПХП то же, что бесит меня: “Huge, deep class hierarchies for no reason... complex mess of classes and getters and setters and subclasses and factories and generators and all these things that just... you know, this just needs to hash a string, what are you doing?”<\/li>\n  <li><a href=\"https:\/\/www.swiftbysundell.com\/podcast\/69\/\">Swift Playgrounds<\/a> with special guests Holly Borla and Grace Kendall. Клёвый выпуск с девушками, которые хардкорно занимаются Свифтом в Эпле (Холли — вообще компилятором). Пока в мудаки в русском твиттере пишут, что «ни разу не видели хороших девушек-программистов», девушки-программисты пилят инструменты, на которых, в том числе, этим мудакам пишут твиттер.<\/li>\n  <li><a href=\"https:\/\/www.youtube.com\/watch?v=YN_afZhD5Wo\">Секс в городе: места, эмоции, люди<\/a>. Редакция. Жизнь намного веселее и разнообразнее, чем принято обсуждать публично. Классно, что теперь об этом говорят в передачах с большой аудиторией.<\/li>\n<\/ol>\n",
            "summary": "Что бесит Марко Армента с современном коде на ПХП (то же, что меня!), как девушки Холли Борла и Грейс Келли работают над Свифтом в Эпле и «Редакция» про секс",
            "date_published": "2020-04-27T07:53:32+02:00",
            "date_modified": "2020-04-30T10:42:03+02:00",
            "tags": [
                "АТП",
                "подкасты",
                "программирование",
                "секс",
                "что послушать"
            ],
            "image": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png",
            "_date_published_rfc2822": "Mon, 27 Apr 2020 07:53:32 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5284",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/listening.png"
                ]
            }
        }
    ],
    "_e2_version": 4259,
    "_e2_ua_string": "Aegea 12.0a (v4259e)"
}