{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог Михаила Озорнина",
    "_rss_description": "Главная · Блог · Работы ·",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/mikeozornin.ru\/blog\/",
    "feed_url": "https:\/\/mikeozornin.ru\/blog\/rss\/",
    "icon": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384",
    "author": {
        "name": "Михаил Озорнин",
        "url": "https:\/\/mikeozornin.ru\/blog\/",
        "avatar": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384"
    },
    "items": [
        {
            "id": "221",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/recipe-scaler-release-5\/",
            "title": "Recipe scaler: набор изменений номер 5",
            "content_html": "<p class=\"lead\">Еще новинки самого лучшего в мире менеджера рецептов<\/p>\n<p>Как вы помните (не помните, конечно), я делаю самый удобный и продвинутый менеджер рецептов — <a href=\"recipe-scaler.ru\">recipe-scaler.ru<\/a>.<\/p>\n<p>С момента <a href=\"https:\/\/mikeozornin.ru\/blog\/all\/recipe-scaler-release-4\/\">прошлого поста<\/a> прошла неделя. За это время я в фоне поделал еще пару классных штук.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/shopping-list-ru-light@2x-2.png\" width=\"2048\" height=\"1536\" alt=\"\" \/>\n<\/div>\n<h2>1. Список покупок<\/h2>\n<p>Сейчас можно и список покупок вести в общей приложухе. Синхронизация, оффлайн — все будет работать как привычно. Можно пошарить ссылкой или текстом для месенджера. Можно весь рецепт отправить в покупки.<\/p>\n<p>Ну не кайф ли? Плюс одно приложение внутри приложения.<\/p>\n<hr \/>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/chrome-extension-ru-light@2x.png\" width=\"1024\" height=\"768\" alt=\"\" \/>\n<\/div>\n<h2>2. Расширение для Хрома<\/h2>\n<p>Телеграм у некоторых не работает, чтобы можно было сохранить рецепт я сделал расширение. Жмакаете, и рецепт отправляет в приложение.<\/p>\n<p><a href=\"https:\/\/chromewebstore.google.com\/detail\/recipe-scaler-importer\/nboblelpbhjijeaglahippkocnecblfb\">Recipe Scaler Importer<\/a><\/p>\n",
            "date_published": "2026-04-14T13:38:00+03:00",
            "date_modified": "2026-04-14T13:38:26+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/shopping-list-ru-light@2x-2.png",
            "_date_published_rfc2822": "Tue, 14 Apr 2026 13:38:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "221",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/shopping-list-ru-light@2x-2.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/chrome-extension-ru-light@2x.png"
                ]
            }
        },
        {
            "id": "219",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/recipe-scaler-release-4\/",
            "title": "Recipe scaler: набор изменений номер 4",
            "content_html": "<p class=\"lead\">Рассказываю о новинках самого лучшего в мире менеджера рецептов<\/p>\n<p>Как вы помните (не помните, конечно), я делаю самый удобный и продвинутый менеджер рецептов — <a href=\"recipe-scaler.ru\">recipe-scaler.ru<\/a>.<\/p>\n<p>С момента <a href=\"https:\/\/mikeozornin.ru\/blog\/all\/recipe-scaler-release-3\/\">прошлого поста<\/a> прошло два месяца. За это время я в фоне поделал еще немного разных штук.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-1@2x.png\" width=\"1024\" height=\"768\" alt=\"\" \/>\n<\/div>\n<h2>1. Раздел Discovery<\/h2>\n<p>Можно почитать чужие рецепты. Пока рецепты людей, но потом будут еще и коллекции, ищу где можно найти рецептов так, чтобы не нарушить сразу 100 миллионов авторских прав<\/p>\n<hr \/>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-4@2x.png\" width=\"1024\" height=\"768\" alt=\"\" \/>\n<\/div>\n<h2>2. Универсальный импорт<\/h2>\n<p>Импорт сильно прокачался. Сейчас можно импортировать что угодно: много рецептов за раз, много ссылок, рецепты из произвольного текста или файла произвольного формата. Можно даже импортировать рецепты из фотографии, например, отфоткать любимые бабушкины рецепты и автоматически загрузить их к себе.<\/p>\n<p>Если хотите перенести рецепты из своего приложения, то есть описание для формата для агента: <a href=\"https:\/\/github.com\/mikeozornin\/recipe-scaler-import-guide\">гайд для вашего агента<\/a><\/p>\n<hr \/>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-2@2x.png\" width=\"1024\" height=\"768\" alt=\"\" \/>\n<\/div>\n<h2>3. Пин рецептов<\/h2>\n<p>Частые рецепты можно запинить сверху, чтобы не искать их внизу по алфавиту<\/p>\n<h2>4. Эмодзи-иконки<\/h2>\n<p>Если начать рецепт с эмодзи, то эмодзи станет его иконкой. Сортировка, понятно, будет работать нормально, без учета эмодзи<\/p>\n<h2>5. Вход по QR-коду<\/h2>\n<p>Чтобы войти на другом устройстве, например, на телефоне, можно просто отсканировать QR-код, без передачи секретной фразы.<\/p>\n<h2>6. Скачать рецепт в ПДФ<\/h2>\n<p>Можно скачать рецепт в ПДФ и одной штукой<\/p>\n<hr \/>\n<p>Кстати, зацените как клод умеет. Можно аттачить в чат рецепт, если подключить Recipe Scaler MCP.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-3@2x.png\" width=\"1033\" height=\"665\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2026-04-07T10:54:25+03:00",
            "date_modified": "2026-04-06T19:51:31+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-1@2x.png",
            "_date_published_rfc2822": "Tue, 07 Apr 2026 10:54:25 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "219",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-4@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-release-4-3@2x.png"
                ]
            }
        },
        {
            "id": "220",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/ai-native-software\/",
            "title": "ИИ-нативные продукты",
            "content_html": "<p class=\"lead\">Рассуждаю, что важно учесть при разработке сложного софтверного продукта сейчас, чтобы он остался актуальным через год или два<\/p>\n<p>Мир софта меняется и скоро поменяется совсем. Да, я про ИИ и ЛЛМ в частности. Многие компании не пережили прошлую мобильную революцию (вспомните про нокию). Я размышляю как нам пережить эту. Поэтому, я хочу поразмышлять, что значит  «ии-нативные продукты».<\/p>\n<p>Я говорю не про конкретные ии-фичи, не про пресловутого бота, который отвечает мимо и невпопад, а скорее про общее ощущение от продуктов. Я говорю про по сути набор нефункциональных требований, касающихся ИИ, которые могут быть применимы ко всем нашим продуктам. Как сделать продукт, который:<\/p>\n<ul>\n<li>будет актуальным в среде агентов, а не людей,<\/li>\n<li>сам будет таким, что в нем агент станет полноценным пользователем и субъектом наряду с человеком<\/li>\n<\/ul>\n<p>Особенно это важно тем, кто поставляет продукты в он премис, там делают продукт не на месяц вперед. Пока спроектируют, пока разработают, пока клиенты обновятся. Продукт делается сейчас, а клиенты будут пользоваться ими через год.<\/p>\n<p>Хочется сейчас угадать и сделать что-то, что за год-два не потеряет своей актуальности.<\/p>\n<p>Для контекста: почти год назад, в конце февраля, вышел Сонет 3.7. Сонетом 3.7 уже можно было пользоваться, он мог уверенно написать работающий файл. Ну может несколько файлов. Но он не был настолько автономным как Опус 4.6 или ГПТ 5.4.<\/p>\n<p>Для контекста: стоимость решения одной и той же задачи с помощью ЛЛМ падает в 10 раз каждый год.<\/p>\n<p>Вот что мне приходит в голову ↓<\/p>\n<h2>1. Не оптимизировать human-only-сценарии<\/h2>\n<p>Я бы не вкладывался в долгую разработку удобного интерфейса работы оператора и решения им тех задач, которые он в целом решать не должен. Я бы подумал перед тем как тратить сейчас не одну сотню человеко-часов только на фронте.<\/p>\n<ul>\n<li>Хорошо: сделать графический редактор сценариев в стиле н8, но быстро.<\/li>\n<li>Не стал бы: тратить 500 человеко-часов на конструктор сценариев, хотя за 100 часов можно было бы сделать написание тех же сценариев из войса в телеграме.<\/li>\n<\/ul>\n<h2>2. Удобный, ии-нативный интерфейс<\/h2>\n<p>Я бы в целом ожидал возврата к основам линукосовой концепции «всё — это файл» и концепции компонуемости из юникс-утилит — программы как атомарные небольшим программам, результаты которых можно цеплять друг к другу через пайп и с унифицируемым интерфейсом ввода (текст) и вывода (текст).<\/p>\n<p><aside class=\"aside-margin-right\">См. в тему <a href=\"https:\/\/cursor.com\/blog\/dynamic-context-discovery#1-turning-long-tool-responses-into-files\">cursor.com\/blog\/dynamic-context-discovery<\/a><\/aside><\/p>\n<p>Я не говорю именно про терминал и текст, но идея компонуемости, как мне кажется, станет более актуальной.<\/p>\n<p>Интерфейс программ должен быть стандартный и максимально дружелюбный для агентов: rest api, терминальные команды, стандартный протокол.<\/p>\n<ul>\n<li>Хорошо: консольный cdk для прогона тестов<\/li>\n<li>Не стал бы: gui-программа для прогона тестов, которая еще работает только для Виндоуза.<\/li>\n<\/ul>\n<p>Я говорю про достаточно общие протоколы, не обязательно про МПЦ. Я не удивлюсь, если через год агенты научатся работать с любыми апи по опенапи-спеке и мы забудем врапперы типа МПЦ, как тупиковую ветвь эволюции.<\/p>\n<h2>3. Агент должен уметь разобраться по доке<\/h2>\n<p>Если доки недостаточно, чтобы агент разобрался — дока не очень. Если для интеграции продукта с телеграмом недостаточно дать доку агенту и отправить делать, значит дока не очень понятная или подробная. Если агент не может запустить дев-стенд вашего продукта по доке за один промт — у вас что-то не так.<\/p>\n<p>Сама дока должна быть доступна в агент-френдли формате: сервер-сайд-рендеринг, llm.txt или agents.md, доступность из курла. Никаких реакт-сайтов, которые требуют браузера. Да, агенты уже умеют читать и такое, но зачем усложнять им жизнь.<\/p>\n<h2>4. Стандартные форматы хранения, языки и протоколы<\/h2>\n<p>Я бы до последнего откладывал придумывание своих кастомных DSL, а попытался бы найти распространенный язык для задачи. Даже если бы он подходил всего лишь на 50%. Я понимаю, что ллм выучит и чужой незнакомый DSL. Но я не специалист и кажется, что лучше бы, чтобы не учила. Наша выучит, другая не станет.<\/p>\n<h2>5. Собирать из всего, что можно собрать, датасеты<\/h2>\n<p>В каждой фиче думать, какие данные нужно собрать и сохранить. С клиентов: метрики, сценарии действий, телеметрию. С нас самих: сохранять треки работы внутренних пользователей, записи всех митингов и обсуждений, все код-ревью, тикеты в саппорте, вопросы в чатах и поисковые запросы на портале хелпа.<\/p>\n<p>Контекст менеджмент — 50% самого важного в контексте именно написания продукта (вторые 50% — харнес). И поэтому не удивительно, что Ноушен и Линеар сделали своих агентов, у них внутри столько контекста по компании, что зашатаешься.<\/p>\n<h2>6. Не замыкаться в текущих ограничениях<\/h2>\n<p>Стоит рассчитывать, что через 2-3 года контекстное окно вырастет так, что можно будет отправлять туда 5 миллионов токенов (давайте представим, что я — футурист). Т. е. в окно контекста целиком влезут те данные, для которых сейчас нужно делать сложные система РАГ.<\/p>\n<h2>7. Агенты — first class citizens<\/h2>\n<p>При реализации каждой фичи нужно начать думать: а какие тулы и апишки нужно в рамках фичи заэкспоузить наружу для будущие агентов, и тратить на это время не по остаточному принципу, а так, чтобы агенты были first class citizen.<\/p>\n<p>Если функция доступна человеку, но недоступна агенту — мы сделали что-то не так.<\/p>\n<h2>8. Безопасность всего этого<\/h2>\n<p>Придется подумать, как не сделать с агентским продуктом с невероятно широким контектом хуже, чем без него вообще. В какой-то момент в защите инфраструктуры возник zero trust (когда пропал периметр и всё стало периметром), так же и тут нужно будет делать zero trust 2.0.<\/p>\n<p>Как минимум нужны будут:<\/p>\n<ul>\n<li>границы применимости: разделение на задачи, где норм принять решение агенту и на те, где обязателен человек;<\/li>\n<li>трассировка источников: откуда агент взял вывод и как к нему пришел,<\/li>\n<li>аудит: что он сделал и почему;<\/li>\n<li>replayability: можно ли воспроизвести решение агента потом при разборе инцидента.<\/li>\n<\/ul>\n<h2>9. Как встроить ии в feedback loop работы продукта<\/h2>\n<p>Хочется как-то перенести ответственность за контекст с человека на агента. Не оператор должен думать какие данные передать агенту, а агент должен у себя иметь инструменты self discovery и data retrival, пусть сам подумает, что ему надо.<\/p>\n<p>Сейчас хорошо работает сказать агенту «задай мне вопросы, которые помогут тебе хорошо решить задачу», хочется что-то аналогичное.<\/p>\n<h2>10. Самим заставлять себя решать задачи ллмками и агентами<\/h2>\n<p>Самим пытаться становиться ии-нативными, даже если прямо сейчас так медленнее. Например, договориться, в командах, что все лоу-баги чинятся только ЛЛМкой, никакой код нельзя для этого писать руками.<\/p>\n<p>Случайно вышло 10 пунктов, ну и хорошо.<\/p>\n<p>Если вдруг у кого есть, прости господи, подкаст, можем поговорить про это.<\/p>\n",
            "date_published": "2026-04-06T10:34:36+03:00",
            "date_modified": "2026-04-06T13:45:05+03:00",
            "_date_published_rfc2822": "Mon, 06 Apr 2026 10:34:36 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "220",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "218",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/llm-i-dizayn\/",
            "title": "ЛЛМ и дизайн",
            "content_html": "<p class=\"lead\">Я шарю скилл несколько раз, самое время кинуть в пост<\/p>\n<p>Как делать дизайн с ЛЛМ, чтобы не было дефолтно и ИИшно:<\/p>\n<ul>\n<li>Не делать, делать руками<\/li>\n<li>Кидать референсы<\/li>\n<li>Дать скиллов<\/li>\n<\/ul>\n<p>Пост про опцию три.<\/p>\n<ol start=\"1\">\n<li><a href=\"https:\/\/impeccable.style\">https:\/\/impeccable.style<\/a><br \/>\nЕсть вот такой набор скиллов, в нем разные вещи, чтобы делать дизайн и верстку:<\/li>\n<\/ol>\n<ul>\n<li>Аудит того, что есть и критика<\/li>\n<li>Есть работа с текстом<\/li>\n<li>Есть работа с визуалкой<\/li>\n<\/ul>\n<p>На промостранице есть объяснения, начните с них.<\/p>\n<p>Это не серебрянная пуля, по начать, например, можно с этого.<\/p>\n<ol start=\"2\">\n<li><a href=\"https:\/\/developers.openai.com\/blog\/designing-delightful-frontends-with-gpt-5-4\/\">https:\/\/developers.openai.com\/blog\/designing-delightful-frontends-with-gpt-5-4\/<\/a><br \/>\nСкилл и объяснение от опенаи<\/li>\n<\/ol>\n",
            "date_published": "2026-03-27T10:18:59+03:00",
            "date_modified": "2026-03-24T14:24:36+03:00",
            "_date_published_rfc2822": "Fri, 27 Mar 2026 10:18:59 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "218",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "216",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/street-guesser-2\/",
            "title": "Street guesser",
            "content_html": "<p class=\"lead\">Игра, чтобы выучить свой район<\/p>\n<p>Как ведь бывает, переехал в новый район, а там все улицы незнакомые. Как вот их учить?<\/p>\n<p>Сделал игру:<\/p>\n<div class=\"e2-text-picture\">\n<a href=\"https:\/\/mikeozornin.ru\/share\/street-guess\/#lat=55.752773&lon=37.620606&radius=2335&mode=click&size=large\" class=\"e2-text-picture-link\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/street-guesser@2x.png\" width=\"1564\" height=\"1012\" alt=\"\" \/>\n<\/a><\/div>\n<p>Случайный положительный эффект: можно легко сравнить масштаб городов, понять, что Садовое в Москве — это от Фонтанки с заходом на начало Васьки и Петроградки.<\/p>\n",
            "date_published": "2026-02-21T12:32:19+03:00",
            "date_modified": "2026-02-21T02:01:18+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/street-guesser@2x.png",
            "_date_published_rfc2822": "Sat, 21 Feb 2026 12:32:19 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "216",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/street-guesser@2x.png"
                ]
            }
        },
        {
            "id": "215",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/reflection-is-more-important\/",
            "title": "Важность рефлексии растет",
            "content_html": "<p>На пост меня натолкнула рабочая ситуация: Я написал (будем честны, попросил ллм написать) один скрипт, и некоторые коллеги прореагировали «о, давно о таком мечтаю». И у меня в голове щелкнуло.<\/p>\n<p><aside class=\"aside-margin-right\">Когда я сейчас написал про один промт, я не утрировал, это был реально один промт.<\/span><\/aside><\/p>\n<p>Сейчас простые задачи решаются ллмками достаточно хорошо. Ядро линукса они все еще не напишут, но пропарсить все ресурсные файлы проекта, сгруппировать одинаковые строчки и дать к ним мгновенный поиск — это задача на один промт. И все, что удерживает людей сейчас, от того, что некоторая часть их задач начнет быть проще — рефлексия. Все что нужно — остановиться, и заметить момент «ага, я тут хочу упрощение, которое возможно реально»).<\/p>\n<p>И если раньше рефлексия не всегда помогала, например:<\/p>\n<ul>\n<li>Понял, что занимается рутиной, но невозможно понять, что рутина автоматизируема.<\/li>\n<li>Понял, что занимается рутиной, пошел узнать, автоматизируема ли она, ИТ-служба сказала «не существует технической возможности».<\/li>\n<li>Понял, что занимается рутинной автоматизированной задачей, понял, что автоматизируема, а питониста рядом нет.<\/li>\n<li>Понял, что занимается рутинной автоматизированной задачей, понял, что автоматизируема, а питонист рядом занят.<\/li>\n<li>Понял, что занимается рутинной автоматизированной задачей, понял, что автоматизируема, сходил в ИТ, питониста нашли, они задачу взяли, то на Q3 2027 года, потому что есть более важные.<\/li>\n<\/ul>\n<p>Сейчас ситуация сильно меняется.<\/p>\n<ul>\n<li>Понял, что занимается рутинной автоматизированной задачей, потратил один-два промта и, возможно, получил решение.<br \/>\nВозможно решения не получил, но и потратить 10 минут как будто не так и долго. Время на созвон со знакомым питонистом будете в календаре выбирать дольше.<\/li>\n<\/ul>\n<p>Нас всегда учили, что идея не стоит ничего. В целом идея все так же стоит ничего, но иногда — чуть больше, чем ничего, если есть ллмка.<\/p>\n",
            "date_published": "2026-01-26T10:34:56+03:00",
            "date_modified": "2026-01-26T01:00:13+03:00",
            "_date_published_rfc2822": "Mon, 26 Jan 2026 10:34:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "215",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "213",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/ai-design\/",
            "title": "ИИ-дизайн",
            "content_html": "<p class=\"lead\">Я задал один и тот же промт нескольким моделям и вот что вышло<\/p>\n<h2>Промт<\/h2>\n<pre class=\"e2-text-code\"><code class=\"\">Прочитай @\/llm\/PRD.md и сверстай статическую html-страницу about. Укажи в ней все преимущества, придумай как их проиллюстрировать, используй модный современный дизайн\r\n\r\nСохрани в файл about-page\/{model-name}.html\r\n\r\nОриентируйся только на prd, не используй about-страницу.<\/code><\/pre><p>Эксперимент проведен в декабре 2025-январе 2026. Использовался openrouter или облака ллммок. В скриншотах могут быть небольшие артефакты, скриншоты снимал плейрайт, он не умеет в стики-позиции.<\/p>\n<p>Для сравнения дизайн кожаного мешка (меня): <a href=\"https:\/\/recipe-scaler.ru\/#\/about\">https:\/\/recipe-scaler.ru\/#\/about<\/a><\/p>\n<h2>Gemini 3 pro<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/gemini-3-pro@2x.png\" width=\"1344\" height=\"3283\" alt=\"\" \/>\n<\/div>\n<h2>Grok code fast 1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/grok.code-fast-1@2x.png\" width=\"1280\" height=\"4044\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-1@2x.png\" width=\"1280\" height=\"2359\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-2@2x.png\" width=\"1280\" height=\"9523\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-3@2x.png\" width=\"1280\" height=\"11107\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<p>Тут я просил швейцарский стиль<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-4@2x.png\" width=\"1280\" height=\"3501\" alt=\"\" \/>\n<\/div>\n<h2>Minimax 2.1<\/h2>\n<p>Тут я просил брутализм<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-5@2x.png\" width=\"1280\" height=\"3169\" alt=\"\" \/>\n<\/div>\n<h2>Opus 4.5<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-1@2x.png\" width=\"1280\" height=\"7191\" alt=\"\" \/>\n<\/div>\n<h2>Opus 4.5<\/h2>\n<p>Тут я просил брутализм<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-2@2x.png\" width=\"1280\" height=\"6154\" alt=\"\" \/>\n<\/div>\n<h2>Swe 1.5<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-1@2x.png\" width=\"1280\" height=\"2923\" alt=\"\" \/>\n<\/div>\n<h2>Swe 1.5<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-2@2x.png\" width=\"1280\" height=\"4061\" alt=\"\" \/>\n<\/div>\n<h2>Yandex assistant 2026-01-20<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/yandex-assistant-2026-01-20@2x.png\" width=\"1280\" height=\"2635\" alt=\"\" \/>\n<\/div>\n<h2>Zai GLM-4.7<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/zai-4.7-3@2x.png\" width=\"1954\" height=\"3319\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2026-01-20T20:45:35+03:00",
            "date_modified": "2026-01-20T20:45:55+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/gemini-3-pro@2x.png",
            "_date_published_rfc2822": "Tue, 20 Jan 2026 20:45:35 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "213",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/gemini-3-pro@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/grok.code-fast-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-3@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-4@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/minimax-2.1-5@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/opus-4.5-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/swe-1.5-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/yandex-assistant-2026-01-20@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/zai-4.7-3@2x.png"
                ]
            }
        },
        {
            "id": "212",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/claude-code-and-stupid-questions\/",
            "title": "Псевдозабота Клод Кода",
            "content_html": "<p>Клод код (Claude Code) заботится обо мне и показывает команды на согласования, к сожалению, он делает это <s>без уважения<\/s> плохо.<\/p>\n<p>Посмотрите на этот апрув:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-1@2x.png\" width=\"741\" height=\"298\" alt=\"\" \/>\n<\/div>\n<p>Выполняет трехстрочную шелл-команду с вложенными конструкциями: циклы, условия. Если там где-то будет какая-то ошибка, я её просто не замечу.<\/p>\n<p>Я не специально выбирал, что скриншотить, они все такие:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-2@2x.png\" width=\"685\" height=\"303\" alt=\"\" \/>\n<\/div>\n<p>У меня остается два варианта:<\/p>\n<ul>\n<li>Как мартышка жать и жать на кнопку «Approve». В итоге вырабатывается привычка, которая не даст мне себя защититить в опасной ситуации. См. принцип «подтверждения не работают».<\/li>\n<li>Один раз апрувнуть тоже не выйдет, потому что эта <i>конкретная<\/i> трехэтажная команда вряд ли когда-нибудь появится.<\/li>\n<li>Согласитья на YOLO (You Only Live Once) режим и разрешить ему делать все, что угодно, даже  <i>rm -rf <\/i>\/<\/li>\n<\/ul>\n<p>Оба варианта, как вы понимаете, плохие.<\/p>\n<p><b>Как надо<\/b><\/p>\n<p>Клод код должен выдавать ЛЛМ понятные инструменты к файлам: прочитать, изменить, и т. д. ЛЛМ должна не грепать файлы, а читать их тулами. Тогда клод код с одной стороны сможет не спрашивать никаких разрешений на чтение файлов (разве что на .env), а с другой быть уверенным, что ЛЛМ ничего не сломает своей командой. Тулом чтения ничего сломать нельзя по определению.<\/p>\n<p>Да, это нужно программировать, а греп уже есть. Да, греп более атомарный и гибкий, чем любые придуманные тулы. Да, ЛЛМ точнее сгенерирует команду для грепа, поскольку она на них обучалась. Но блин, апрувить все команды — не решение вовсе.<\/p>\n<p>Понятно, что клод код не увидит мой пост, но вы, когда будете делать ИИ-фичи, не будьте как клод.<\/p>\n",
            "date_published": "2026-01-15T22:01:21+03:00",
            "date_modified": "2026-01-26T16:02:36+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-1@2x.png",
            "_date_published_rfc2822": "Thu, 15 Jan 2026 22:01:21 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "212",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/claude-code-2@2x.png"
                ]
            }
        },
        {
            "id": "211",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/recipe-scaler-release-3\/",
            "title": "Recipe scaler: релиз 3",
            "content_html": "<p>На новогодние праздники вышли два больших апдейта recipe-scaler<\/p>\n<p><b>Первый апдейт — публичный профиль и коллекции<\/b><br \/>\nСейчас можно шарить не только рецепты как одну штуку, но и всю коллекцию.<br \/>\nИли выборочно, или прибранные рецепты (с рецептом и фоткой), или вообще все-все-все<\/p>\n<p class=\"loud\"><a href=\"https:\/\/recipe-scaler.ru\/#\/public\/@\/mike.ozornin\">https:\/\/recipe-scaler.ru\/#\/public\/@\/mike.ozornin<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-3@2x.png\" width=\"1024\" height=\"768\" alt=\"\" \/>\n<\/div>\n<p><b>Интеграция с ИИ-иссистентом<\/b><br \/>\nМожно через MCP подключиться к своему ассистенту. У кого-то клод, у кого-то курсор. Пока подглючивает чуток. Но смотрите, какая красота:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/mcp-server-light@2x.png\" width=\"1024\" height=\"768\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2026-01-13T23:50:10+03:00",
            "date_modified": "2026-04-05T17:48:36+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-3@2x.png",
            "_date_published_rfc2822": "Tue, 13 Jan 2026 23:50:10 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "211",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/recipe-scaler-3@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/mcp-server-light@2x.png"
                ]
            }
        },
        {
            "id": "210",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/llm-code-review\/",
            "title": "ИИ-ревью кода",
            "content_html": "<p>Делал большую фичу, попросил ревью у ИИ. Попросил найти важные моменты во всех областях: безопасность, логика, деплой, производительность и прочее, и прочее.<\/p>\n<p>Опус 4.5 (лучшая на сейчас ЛЛМ в мире) написал:<\/p>\n<ul>\n<li>Критикал sql-инъекция. Как оказалось: пользователь сам себе после всех входов и разрешений на свой же запрос получит чуть больше своих же результатов.<\/li>\n<\/ul>\n<p>Опус не написал:<\/p>\n<ul>\n<li>Конфиг nginx забыли поправить и ничего не будет работать в целом.<\/li>\n<li>Сервис-воркер (фоновый код в браузерном приложении) блокировал работу новой вещи, перехватывая все обращения на себя.<\/li>\n<li>Кеширование oauth-запросов было настроено некорректно.<\/li>\n<li>Часовые пояса неправильные, посему токен не имел шансов подойти.<\/li>\n<li>Некоторые адреса обрабатываются неправильно и тоже работать не будет.<\/li>\n<\/ul>\n<p>Я прямо чую, что когда кто-то решит проблему нормального ревью (а не как вот такое атомарное) это будет большой шаг в разработке.<\/p>\n<p>Не говорю, что текущее бесполезно. Но пока это на уровне «к пуговицам претензии есть?»<\/p>\n",
            "date_published": "2026-01-11T16:01:45+03:00",
            "date_modified": "2026-01-11T16:04:20+03:00",
            "_date_published_rfc2822": "Sun, 11 Jan 2026 16:01:45 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "210",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "209",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/vibe-coding-as-a-slot-machine\/",
            "title": "Вайб-кодинг, дофамин и слот-машины",
            "content_html": "<p class=\"lead\">Осознал недавно, чем вайб-кодинг в его классическом виде похож на лудоманию и при чем тут дофамин<\/p>\n<h2>Что за вайб-кодинг такой<\/h2>\n<p>Давайте сначала начнем с определений. Не каждая разработка с ллмкой — вайб-кодинг, но каждый вайб-кодинг — разработка с помощью ллмки.<\/p>\n<p>Вайб-кодингом я буду называть программирование с помощью ллмки, в котором есть вот такие характеристики:<\/p>\n<ul>\n<li>Мало изначального планирования. Буквально короткое описание, вкинутое в ллмку и потом разберемся походу.<\/li>\n<li>Попытка сразу попасть в нужную конечную точку. Желательно за одну итерацию.<\/li>\n<li>Значительная часть кода написана ллмкой. Человек в целом не читает весь код, не проверяет его, только смотрит на результат. Архитектура придумана тоже ллмкой и в целом какая вышла, такая вышла.<\/li>\n<li>Быстрые итерации, горячая перезагрузка. Сообщение об ошибках в целом не читаются, копипаст в чат, обновление.<\/li>\n<li>Небольшой горизонт планирования. Ощущение щас фичу допилим, разберемся. Похоже на стрельбу трассирующими — и стреляем и одновременно целимся.<\/li>\n<li>Вайб-дебагинг — вместо попыток понять, разобраться, понять причину — промт «почини» × 5 раз. Да, и это иногда срабатывает.<\/li>\n<\/ul>\n<p>Я не говорю, что все это неправильно или плохо. Это просто то, что я бы назвал вайб-кодингом.<\/p>\n<p>Чтобы показать, что не каждая разработка с ллмкой — вайб-кодинг, давайте я попробую описать противоположный полюс. Я бы назвал это LLM assisted development.<\/p>\n<ul>\n<li>Много изначального планирования. К началу первого промта есть достаточно подробный PRD, есть какие-то макеты, схемы взаимодействия, есть выбор технологий, примерная архитектура и схемы данных. Хоть как-то продуманы краевые и хитрые сценарии. Возможно, на отдельные технологические части сделаны прототипы.<\/li>\n<li>Реализация и приемка по частям: планомерная реализация модуля за модулем, планирование именно этого модуля, разработка, приемка, тесты, фиксация. После этого переход к следующему.<\/li>\n<li>Написание части кода самостоятельно или значительное ревью написанного.<\/li>\n<li>Общее ощущение, что ведет человек, ллмка — лишь инструмент. Очень мощный, местами самостоятельный, но инструмент.<\/li>\n<\/ul>\n<p>Вайб-кодингом в силу понятных причин чаще заняты люди, кто сами не умеет программировать, а те, кто умеет, чаще склонны ко второму.<\/p>\n<p class=\"loud\">— Где уже тема поста, Лебовски! Я уже полторы страницы прочитал<\/p>\n<h2>Где здесь слот-машина<\/h2>\n<p>Вот мы подошли к главному. Я осознал, что вайб-кодинг обладает всеми теми же вещами, которые подсаживают слот-машины на дофамин. Я не биолог, проверяйте эту часть.<\/p>\n<p><b>Негарантированная награда<\/b><br \/>\nДофамин же вырабатывается не от самой награды, а от предвкушения награды. Если награда будет всегда, организму такое не нравится. Ему нравится, когда <i>иногда да<\/i>.<\/p>\n<p>Вайб-кодинг в чистом виде такой. Иногда промт сработает, иногда нет. Иногда ллмка уйдет в полную галюцинацию, но потом тем же самым промтом та же самая модель с очищенным и немного расширенным контекстом все за собой же починит.<\/p>\n<p><b>Сверхкороткий цикл<\/b><br \/>\nЦикл действие-реакция (промт-результат) очень короткий, поэтому за несколько минут можно пройти несколько таких циклов. Это очень высокая плотность событий, редко что может создать такой мощный стимул. Именно поэтому слот-машина больше затягивает, чем покер. Покерная партия длится существенно дольше.<\/p>\n<p>Вайб-дебагинг 5 промтов в минуту и копипаст ошибок из консоли — предел такого короткого цикла.<\/p>\n<p><b>Эффект почти-попадания (near-miss effect)<\/b><br \/>\nБывает, что проект совсем не заводится, сыпется на комплияции, а интерфейс взрывается. Но бывает и то, что называется near-miss effect — ну вот-вот, уже почти. Вроде работает, но как-то хитро глючит. В целом ок, но криво сверстано.<\/p>\n<p>Прямо как в слот машине — не все три слота разные, а «ну вот же, две вишенки совпали, а третья не докрутилась всего на один шажок». Конечно, после почти-попадания желание продолжить значительно выше.<\/p>\n<p><b>Всплеск нейромедиаторов при победе<\/b><br \/>\nКогда все в итоге завелось, приложение ЗА-РА-БО-ТА-ЛО вырабатывается огромное количество нейромедиаторов (как и при джекпоте). От адреналина аж пульс может подскочить.<\/p>\n<p><b>Некоторые эмоциональные качели<\/b><br \/>\nИногда ты сделаешь большую штуку за десять минут, а потом два часа будешь пытаться исправить досадный баг. В итоге качаешься между «Я молодец, ллм — лучшее, что есть в программировании» и «Я тупой, ллм ничего не может, зря я все это затеял».<\/p>\n<p><b>Сюрпризы и бонус<\/b><br \/>\nИногда ллмка доставляет и просто бонусы — хоба и отломала те части, которые раньше работали. Это тоже сильные эмоции и некоторые эмоциональные качели: ах ты сволочь ←→ о, я починил.<\/p>\n<p>Могу сказать по себе, что программирование в стиле вайб-кодинга невероятно затягивает. Особенно когда вот-вот уже почти. На это вот-вот уже почти можно сжечь огромное количество времени. Ой, может другая модель сможет. Ой, а давай переформулирую.<\/p>\n<p>Если кодить близко к полюсу максимального вайб-кодинга, то прямо физически начинает ощущаться вот это состояние ажитации — вероятно, именно его чувствуют люди перед слот-машиной.<\/p>\n<p>В целом, не этом все.<\/p>\n<h2>Как же быть<\/h2>\n<p><aside class=\"aside-margin-right\"><span class=\"related-excerpt\">Я не специалист в такой химии. Я мог бы с умным видом копипастнуть разбор Грока про норадреналин и анандамид. Но не буду. Спросите у ллмок<\/span><\/aside><\/p>\n<p>Мне кажется, что выход — программировать так близко к классическому програмированию, как можете. В программировании — состояние потока, фокус, длинные сессии, более медленный и стабильный темп. Уверен, что там совсем другая биохимия и другие нейромедиаторы.<\/p>\n<p><aside class=\"aside-margin-right\"><span class=\"related-excerpt\">«Станьте ежиками» — это из анекдота<\/span><\/aside><\/p>\n<p>Ну а как быть, если кто-то не умеет программировать. Что за «станьте ~ежиками~ программистами» такое. Я понимаю, что легко сказать «читайте написанный ллмкой код», но все умеют. Но так или иначе, у меня есть гипотеза, что если двигаться максимально близко к варианту LLM assisted development, то будет лучше.<\/p>\n<p>Что я бы попробовал:<\/p>\n<ol start=\"1\">\n<li>Начинайте с большого плана — на пару страниц даже для небольшого проекта.<br \/>\nСоберите в голове визуальный дизайн, подумайте про краевые случаи, заранее продумайте деплой. Соберите примеры кода, компонентов, референсы, ссылки на документацию. Опишите те вещи, которые обычно не описываете — адаптив или хоткеи. Вам все равно придется принимать все эти решения. <i>Вы можете принять их спокойно в начале или потом — в ажитации и перед слот-машиной.<\/i><\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Разрабатывайте по частям. Держите в голове общий план, общую картинку, но делайте по этапам, не позволяя ллмке унести вас в сторону лишь потому, что она предложила «Нужло ли адаптивровать для очков виртуальной реальности?». Не так важны сами этапы, сколько нужно ощущение, что вы контролируете ллмку, а не она вас.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>Возможно через шаблоны ответов лучше убрать вот эти «Отличный вопрос!» и другие восхваления искусственного интеллекта.<\/li>\n<\/ol>\n<p>Способ с большим предварительным планом был единственным доступным еще пару лет назад. Ллмки не умели так хорошо следовать длинному плану, не умели так успешно вызывать тулы для обогащения своего контекста и не умели выполнять действия. Мы были <i>вынуждены<\/i> проектировать сами и могли лишь просить ллмки написать отдельные модули или даже вовсе отдельные функции. А сейчас болт, реплит, лавабл и фигмамейк продвигают идею «Готовое приложение за одно предложение».<\/p>\n<p class=\"loud\">Вместо вывода. Ллмки позволяют нам делать вещи, которые мы бы не смогли без них. Но не разтеребите ими себе мозг, как это делает тикток. Уверен, ничего хорошего в этом не будет.<\/p>\n",
            "date_published": "2025-12-06T01:41:56+03:00",
            "date_modified": "2025-12-08T03:13:09+03:00",
            "_date_published_rfc2822": "Sat, 06 Dec 2025 01:41:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "209",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "208",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/side-by-side-0-2-0\/",
            "title": "Сайд-бай-сайб 0.2.0",
            "content_html": "<p>В <a href=\"https:\/\/mikeozornin.ru\/blog\/all\/hello-side-by-side\/\">сайд-бай-сайде<\/a> вышла следующая версия<\/p>\n<p>Изменения:<\/p>\n<ol start=\"1\">\n<li>Человекочитаемые URL для голосований<br \/>\nБыло: \/v\/06b95c10-7688-4106-8e75-762035290c67\/<br \/>\nСтало: \/v\/HairyParrotsPursueRudely\/<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Улучшение интеграции с Mattermost:<br \/>\nСайд-бай-сайд сгенерирует превьюшки к уведомлениям в чате.<br \/>\nПо окончании голосованию в чате будет итог голосования.<\/li>\n<\/ol>\n<p>Было:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-0.2.0-1@2x.png\" width=\"390\" height=\"112\" alt=\"\" \/>\n<\/div>\n<p>Стало:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-0.2.0-2@2x.png\" width=\"688\" height=\"472\" alt=\"\" \/>\n<\/div>\n<p>Мелочи:<\/p>\n<ul>\n<li>Кликабельные ссылки в описаниях. Ссылки в комментарии станут кликабельными.<\/li>\n<li>На странице голосования теперь тоже показывается количество проголосовавших.<\/li>\n<li>На странице голосований можно прокручивать картинки перетаскиванием мыши<\/li>\n<li>Белый список доменов эл. почты. Можно указать домены, вход с которых будет разрешен.<\/li>\n<li>Драг-н-дропать файлы можно на всю страницу, даже на главную.<\/li>\n<\/ul>\n<p class=\"loud\"><a href=\"https:\/\/github.com\/mikeozornin\/side-by-side\">https:\/\/github.com\/mikeozornin\/side-by-side<\/a><\/p>\n",
            "date_published": "2025-11-30T19:50:02+03:00",
            "date_modified": "2025-12-01T12:56:43+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-0.2.0-1@2x.png",
            "_date_published_rfc2822": "Sun, 30 Nov 2025 19:50:02 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "208",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-0.2.0-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-0.2.0-2@2x.png"
                ]
            }
        },
        {
            "id": "206",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/recipe-scaler-release-2\/",
            "title": "Recipe scaler: релиз 2",
            "content_html": "<p class=\"lead\">Вышел второй релиз Recipe scaler, про который <a href=\"https:\/\/mikeozornin.ru\/blog\/all\/hello-recipe-scaler\/\">я писал раньше<\/a>. Фичи — огонь.<\/p>\n<p>Я доделал некоторые штуки, которых не хватало мне. Может быть, они помогут кому-то еще.<\/p>\n<h2>1. Импорт рецептов<\/h2>\n<p>Импортировать рецепты с любимого сайта сейчас стало сильно проще: вставляем ссылку, приложение сделает все остальное. Сходит на сайт, заберет веб-страницу, распарсит, вытащит текст рецепта и с помощью ИИ вытащит рецепт и разметит его. Я проверял на нескольких сайтах, в целом работает, но тут ИИ, парсинг, все может пойти не так. Если что, пишите.<br \/>\n<video src=\"https:\/\/cdn-std.droplr.net\/files\/acc_383168\/de10sr\" style=\"width: 100%; height: 100%;\" preload=\"auto\" controls=\"\" controlslist=\"download loop=\"loop\"><\/video><\/p>\n<h2>2. Таймеры<\/h2>\n<p>Сейчас в рецепте можно разметить не только ингредиенты, но и таймеры: выстояться тесту, запечься овощам, свариться бульону. Кликнул на таймер в рецепте, он запустился. Как закончится — пропищит и даже кинет пуш-уведомление, даже в телефон (PWA).<\/p>\n<p>Таймеры автоматически синхронизируются, поэтому запустить можно и не бегая к телефону, который остался на кухне. При импорте и автоматическое ЛЛМ-разметке разметятся и таймеры.<br \/>\n<video src=\"https:\/\/cdn-std.droplr.net\/files\/acc_383168\/nyJX36\" style=\"width: 100%; height: 100%;\" preload=\"auto\" controls=\"\" controlslist=\"download loop=\"loop\"><\/video><\/p>\n<h2>3. Always-on-режим экрана<\/h2>\n<p>Чтобы экран телефона не тух, когда вы с него готовите, можно включить «не гасить экран», пока опция включена, телефон не потушит экран. Да, оказывается в веб-апи есть и такое.<\/p>\n<h2>4. Режим редактирования и просмотра<\/h2>\n<p>Казалось бы, режимы — вредная штука, а здесь я отмечаю режим как улучшение. Обычно редактировать рецепт   нужно редко — записал, а дальше готовишь, готовишь и готовишь. Каждый день редактирование мешает — можно случайно что-то изменить и потом не заметишь. Сейчас есть просмотр, есть редактирование, случайно ничего не поменяешь.<\/p>\n<h2>5. Новый формат синхронизации<\/h2>\n<p>Под капотом переписана формат синхронизации, он стал более корректный с точки зрения CRDT и должен меньше ошибаться. Старый никто не забирает, не хотите, не мигрируйте.<\/p>\n<p>Попробуйте, если еще нет:<\/p>\n<p class=\"loud\"><a href=\"https:\/\/recipe-scaler.ru\">recipe-scaler.ru<\/a><\/p>\n<p>Если будут мысли, пишите: <a href=\"mike.ozornin@gmail.com\">mike.ozornin@gmail.com<\/a><\/p>\n",
            "date_published": "2025-09-23T04:14:38+03:00",
            "date_modified": "2025-09-23T14:18:46+03:00",
            "_date_published_rfc2822": "Tue, 23 Sep 2025 04:14:38 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "206",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "204",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/hello-side-by-side\/",
            "title": "Анонс: Сайд-бай-сайд",
            "content_html": "<p class=\"lead\">Анонс еще одного продукта, на этот раз для работы<\/p>\n<p>Это приложение для голосовалок по картинкам (или видосам). Бывает, что нужно показать несколько вариантов и провести, так сказать, юикс ресерч. Знаю, как это решаю сам: почта, телеграм, эмодзи под сообщениями в чате. Собирать гуглдок не будешь, а без него агрегировать результаты — пытка. Я сделал сервис.<\/p>\n<p>Что можно:<\/p>\n<ul>\n<li>Закинуть несколько картинок или видео в голосовалку.<\/li>\n<li>Дать людям проголосовать и через некоторое время посмотреть результаты.<\/li>\n<li>Есть <a href=\"https:\/\/www.figma.com\/community\/plugin\/1545946464465075859\/side-by-side-voting\">плагин для фигмы<\/a>, чтобы загружать картинки прямиком из фигмы.<\/li>\n<li>Если хотите, можно не публиковать голосовалку ленту, доступ будет только по прямой ссылке.<\/li>\n<li>Можно включить уведомления в чат (пока поддерживается только маттермост, может сделаю телеграм) или пуши в браузере.<\/li>\n<\/ul>\n<p>Как выглядит:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-1@2x.png\" width=\"1310\" height=\"1007\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Главная<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-2@2x.png\" width=\"1310\" height=\"1007\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Голосовалка<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-4@2x.png\" width=\"1310\" height=\"1007\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Создание<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-5@2x.png\" width=\"1357\" height=\"1111\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Результаты<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-6@2x.png\" width=\"1310\" height=\"1007\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Профиль и подключение плагина<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-7@2x.png\" width=\"1113\" height=\"695\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Плагин для Фигмы<\/div>\n<\/div>\n<p>В плане входа есть два варианта:<\/p>\n<ul>\n<li>Все пользователи — с анонимным доступом, защиты голосовалки почти никакой нет и можно её просто инкогнито-режимом. Удалить голосование тоже не получится, сервис не знает, кто вы.<\/li>\n<li>Есть вариант с логином по магической ссылке, тогда для голосования тоже нужно будет войти. Вмест с ним появится удаление, досрочное завершение и даже браузерные пуши.<\/li>\n<\/ul>\n<p>Понятно, что есть дарк-мод, автоматическое определение ретиновости картинок, вставка в область прямо из буфера и какая-никакая работа на телефоне.<\/p>\n<p>Я рассчитываю, что вы поднимите сервис где-то у себя. Во-первых, многие не будут готовы своим НДА-макеты куда-то выложить. Во-вторых, я не хочу разбираться с недопустимыми картинками у себя в хостинге. Поэтому опенсорс, там в целом не очень сложно, написали конфиг и запустили ансибл.<\/p>\n<p class=\"loud\"><a href=\"https:\/\/github.com\/mikeozornin\/side-by-side\">github.com\/mikeozornin\/side-by-side<\/a><\/p>\n<p class=\"loud\"><a href=\"https:\/\/www.figma.com\/community\/plugin\/1545946464465075859\/side-by-side-voting\">figma.com\/community\/plugin\/1545946464465075859\/side-by-side-voting<\/a><\/p>\n<p>Будут мысли, пишите: <a href=\"mailto:mike.ozornin@gmail.com\">mike.ozornin@gmail.com<\/a><\/p>\n",
            "date_published": "2025-09-10T22:06:37+03:00",
            "date_modified": "2025-11-27T00:01:26+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-1@2x.png",
            "_date_published_rfc2822": "Wed, 10 Sep 2025 22:06:37 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "204",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-4@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-5@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-6@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/side-by-side-7@2x.png"
                ]
            }
        },
        {
            "id": "205",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/cursor-for-everybody\/",
            "title": "Курсор для … — это Курсор",
            "content_html": "<p>Я вижу много хайпа в попытках сделать более специализированное решение для дизайнеров, дата-саентистов, писателей, фронтов, бекендеров. Не ходите туда.<\/p>\n<p>На днях увидел про курсор для дизайнеров, <a href=\"https:\/\/www.onlook.com\">onlook.com<\/a>. Несколько часов оно провисело на промте и потом сломалось. Ну окей.<\/p>\n<p>На первый взгляд специлизированные тулы выглядят перспективно, они  удобнее, лучше учитывают задачи конкретно вас. Возьмем тот же Фигма Мейк, болт, лавабл, реплит. Ощущение, когда ты написал промт и получил не кусок кода, а живой сервис — магическое. Первый раз это поражает. Я на 100% с вами согласен. Но потом инструмент начнет очень-очень жать. Захотите чуть отойти в сторону — все начнет ломаться и жать.<\/p>\n<ul>\n<li>Захотите написать не на реакте, а на своей дизайн-системе (которая только на ангуляре), не выйдет. Фигма мейк умеет только в реакт и вы с ним ничего не сделаете.<\/li>\n<li>Захотите чуть быстрее бекенд и написать его на гоу, не получится, потому что инструмент умеет только в некст.жс.<\/li>\n<li>Будете делать какую-то штуку, для которой нужно иметь одинаковый рантайм в клиенте и сервере, окажется, что нельзя.<\/li>\n<li>Захотите сделать мобильное приложение или плагин фигмы, вам не дадут настроить КОРС и ничего не заработает.<\/li>\n<li>Захотите встроиться в поддомен сайта, не выйдет, потому что деплой так не умеет.<\/li>\n<li>Захотите забрать с собой код, окажется, что там все сильно завендорлочено и работать вне инфраструктуры не способно.<\/li>\n<\/ul>\n<p>Потратьте чуть больше времени, изучите более общий инструмент, он даст выгоду в будущем. То самое волшебное ощущение можно попытаться вернуть шаблонами и рулами. Развернуть сайт на верцеле не принципиально сложнее, чем в фигма-мейке. До сих пор сложнее, но не настолько, чтобы это имело смысл.<\/p>\n<p>Закончу аналогией. На озоне продается много всяких агрегатов для хитрой нарезки чего-нибудь, но если посмотреть на повара, то он в целом обходится ножами. Почему? Потому что они универсальны, надежны и стабильны. А очередная нарезалка для узбекских помидоров не сможет нарезать дагестанский.<\/p>\n<p>Курсор для … — это Курсор<\/p>\n",
            "date_published": "2025-09-07T17:38:28+03:00",
            "date_modified": "2025-09-07T17:38:11+03:00",
            "_date_published_rfc2822": "Sun, 07 Sep 2025 17:38:28 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "205",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "203",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/hello-recipe-scaler\/",
            "title": "Анонс Recipe scaler",
            "content_html": "<p class=\"lead\">Навайбкодил себе проект, вдруг кому будет полезен<\/p>\n<p><video src=\"https:\/\/cdn-std.droplr.net\/files\/acc_383168\/1nwwVt\" style=\"width: 100%; height: 100%;\" preload=\"auto\" controls=\"\" controlslist=\"download loop=\"loop\"><\/video><\/p>\n<h2>Зачем нужен<\/h2>\n<p>В рецептах обычно указывают количество ингредиентов на Х порций, а приготовить нужно на Y. В этих случаях приходится пересчитывать все ингредиенты рецепта, сохраняя пропорции.<\/p>\n<p>Для этого дизайн-директор Злых Марсиан Рома Шамин написал приложение Recipe scaler. Отлично приложение, долго им пользуюсь. Мне не хватало в нем текста описания, чтобы вставить сам рецепт, а ждать обновлений как будто не приходится. Я написал для себя свое другое.<\/p>\n<p class=\"loud\"><a href=\"https:\/\/recipe-scaler.ru\">recipe-scaler.ru<\/a><\/p>\n<p>Что я посчитал нужным добавить:<\/p>\n<ul>\n<li><i>Текст описания<\/i>. Если в нем разметить ингредиенты, то будет актуальный рецепт на нужные пропорции<\/li>\n<li><i>Десктоп-версию<\/i>. Бывает, что удобнее записать рецепт с компьютера, особенно если нужно скопировать рецепт с сайта, убрать лишнее, переписать.<\/li>\n<li><i>Синхронизацию устройств<\/i>. Можно написать рецепт на компьютере, а потом готовить по телефону.<\/li>\n<li><i>Шаринг рецептов<\/i>. Когда кто-то спросит «ой, а поделись рецептом», у вас будет ответ. В целом можно готовить прямо по пошаренному рецепту, их тоже можно пересчитать.<\/li>\n<li><i>ИИ<\/i>. Куда же сейчас без него. Начните с рецепта и нажмите волшебную палочку. ИИ попробует распознать и разметить ингредиенты за вас, придется лишь чуть-чуть его поправить.<\/li>\n<\/ul>\n<p>Мобильный:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/hello-recipe-scaler-2@2x.png\" width=\"400\" height=\"865.5\" alt=\"\" \/>\n<\/div>\n<p>Десктоп:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/hello-recipe-scaler@2x.png\" width=\"898\" height=\"653\" alt=\"\" \/>\n<\/div>\n<h2>Как работает<\/h2>\n<p>Рецепты хранятся у вас в браузере и синхронизируются на сервер. Можно писать в оффлайне, как выйдете в оффлайн, все синканется. Изменения можно делать даже в одном рецепте, конфликтов быть не должно (в теории), не каждый коммерческий продукт так умеет.<\/p>\n<p>Сервер не знает о вас ничего, кроме рецептов, — ни почты, ни телефона, ни аккаунта, даже айпи-адрес. Чтобы залогиниться на другое устройство, используются сид-фразы, как в криптокошельках, не потеряйте ее или сессию на любом из устройств.<\/p>\n<p>Приложение можно сохранить как PWA и на десктопе, и на телефоне. При добавлении сайта как PWA очищаются все локальные сторы, поэтому по умолчанию ваших рецептов там не будет. Зайдите в PWA как в новый девайс через сид-фразу.<\/p>\n<p>Неочевидные штуки:<\/p>\n<ul>\n<li>Если ввести две и более черточки, то вставится разделитель, а если ввести название и не указывать ингредиенты, добавится заголовок.<\/li>\n<li>Если мыслите категориями порций, сделайте ингредиент «порции» и введите туда количество, можно будет пересчитывать по порциям.<\/li>\n<li>На тачпаде тоже работают свайпы для удаления.<\/li>\n<\/ul>\n<h2>Что под капотом<\/h2>\n<p>Если кому интересно, что внутри, то вот ключевые слова:<br \/>\nReact, Tailwind (не берите, гадость), CRDT, YJS, Websockets, Express.js, Supabase, Openrouter, Gemini Flash.<\/p>\n<p>Предложения можно писать на <a href=\"mike.ozornin@gmail.com\">mike.ozornin@gmail.com<\/a>.<\/p>\n",
            "date_published": "2025-08-29T09:04:03+03:00",
            "date_modified": "2025-09-20T21:42:48+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/hello-recipe-scaler-2@2x.png",
            "_date_published_rfc2822": "Fri, 29 Aug 2025 09:04:03 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "203",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/hello-recipe-scaler-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/hello-recipe-scaler@2x.png"
                ]
            }
        },
        {
            "id": "201",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/strange-humor\/",
            "title": "Странный юмор",
            "content_html": "<p>Собрал заметки с тегом «странный юмор». Есть удачные, есть не очень. Можно посмотреть, что было актуальным в то время — эдакая хронология в шутках.<\/p>\n<p><i>2016.04.04<\/i><br \/>\nХмели сумели<\/p>\n<p><i>2016.04.04<\/i><br \/>\nОбщий объем информации, хранящейся на всех компьютерах Земли — 1 террабайт.<\/p>\n<p><i>2016.04.04<\/i><br \/>\nМасса обеда хипстера — 1-2 инстаграмма.<\/p>\n<p><i>2016.04.04<\/i><br \/>\nПарные и не парные копытные.<\/p>\n<p><i>2016.04.04<\/i><br \/>\nМимимикупер<\/p>\n<p><i>2016.04.26<\/i><br \/>\nСлучай в Краснодаре:<br \/>\n— Пойдем посмотрим морского котика<br \/>\n— Тю, лень<\/p>\n<p><i>2016.04.27<\/i><br \/>\nДактилескопия, ямбоскопия, хореескопия<\/p>\n<p><i>2016.05.14<\/i><br \/>\n1000 Пикачу — 1 Наночу<\/p>\n<p><i>2016.06.17<\/i><br \/>\nУ скрам-коуча вечером аджайли телефон.<\/p>\n<p><i>2016.07.07<\/i><br \/>\nПользователи, роли и трава доступа<\/p>\n<p><i>2016.07.24<\/i><br \/>\nСкоро объявления о сдаче квартиры: Светлая однушка около метро, сделан спокойный ремонт, есть вся техника. Из квартиры ловится покемон gym.<\/p>\n<p><i>2016.07.24<\/i><br \/>\nЕсли бы у меня жил дома тигр, назвал бы его «Евфрат».<\/p>\n<p><i>2016.08.12<\/i><br \/>\nАйфон 3жс для обычных людей и айфон д3.жс для @datalaboratory<\/p>\n<p><i>2016.08.15<\/i><br \/>\nКниги по выживанию: «Над пропастью не ржи» и вторая часть «Над пропастью не жри».<\/p>\n<p><i>2016.08.23<\/i><br \/>\nБегемот-автомеханик: Сижу, никого не трогаю, починяю Приус<\/p>\n<p><i>2016.08.23<\/i><br \/>\nАномалии всех стран, соединяйтесь.<\/p>\n<p><i>2016.08.23<\/i><br \/>\nВедущий инженер-погромист.<\/p>\n<p><i>2016.08.25<\/i><br \/>\nВо всем мире «Мобайл фёст», а в Питере «Мобайл нева».<\/p>\n<p><i>2016.09.08<\/i><br \/>\nВ кое-веки — ну наконец<br \/>\nВ кои-8-веке — давно<\/p>\n<p><i>2016.09.17<\/i><br \/>\nВейп-двигатель<\/p>\n<p><i>2016.10.10<\/i><br \/>\nКак на Андрюшины именины принесли мы Караваджо,<br \/>\nВот такоооооой ширины,<br \/>\nВот такоооооой вышины.<\/p>\n<p><i>2016.10.10<\/i><br \/>\nСовременный грузинский художник Ай Вайвай.<\/p>\n<p><i>2016.10.16<\/i><br \/>\nКонцепт по заявкам<\/p>\n<p><i>2016.10.29<\/i><br \/>\nAgile (террористическая организация, запрещенная на территории России)<\/p>\n<p><i>2016.10.29<\/i><br \/>\nВсе выходят вот из зоны комфорта, не боитесь, что последний, кто там останется, закроется изнутри?<\/p>\n<p><i>2016.10.29<\/i><br \/>\n— Как идет ваше внедрение эджайла?<br \/>\n— Стыд и скрам<\/p>\n<p><i>2016.11.01<\/i><br \/>\nШутка для датабазников и физиков: кажется тут какого-то поля не хватает.<\/p>\n<p><i>2016.11.17<\/i><br \/>\nАйтана, айда за аймаком.<\/p>\n<p><i>2016.11.20<\/i><br \/>\n— Интересует вакансия сис. админа<br \/>\n— Откликайтесь на вакансию в Линкедине<br \/>\n— Он заблокирован же<br \/>\n— Спасибо, вы нам не подходите<\/p>\n<p><i>2016.12.05<\/i><br \/>\nМосковский театр сатиры Мхахахат<\/p>\n<p><i>2016.12.06<\/i><br \/>\n— Выйди из зоны комфорта и войди как положено.<\/p>\n<p><i>2016.12.07<\/i><br \/>\nOS X El Capitan Obvious<\/p>\n<p><i>2016.12.08<\/i><br \/>\nВ советское время все эти фразы имели смысл:<br \/>\nКупили часы с боем<br \/>\nС боем купили часы<br \/>\nС боем купили часы с боем<\/p>\n<p><i>2016.12.13<\/i><br \/>\nПервое правила Веганского Клуба: всегда упоминать о Веганском Клубе.<\/p>\n<p><i>2016.12.15<\/i><br \/>\nФасилитировали-фасилитировали,<br \/>\nда не выфасилитировали,<br \/>\nстали перефасилитировать —<br \/>\nзафасилитировались.<\/p>\n<p><i>2017.01.13<\/i><br \/>\nОна хотела бы жить на Манхеттене<br \/>\nВедь у неё дома в Омске щас света нет.<\/p>\n<p><i>2017.01.22<\/i><br \/>\nОн был в гадлежащем состоянии.<\/p>\n<p><i>2017.01.26<\/i><br \/>\nШутка про ВИМ: выйди и зайди как положено.<\/p>\n<p><i>2017.01.27<\/i><br \/>\nДядя Федор и макбук:<br \/>\nЧтобы подключить к ноутбуку что-нибудь нужное, надо сначала отключить что-нибудь ненужное, а у меня усб-портов нет.<\/p>\n<p><i>2017.02.01<\/i><br \/>\nУзник замка Иф<br \/>\nУзник замка Фор<br \/>\nУзник замка Гоуту<\/p>\n<p><i>2017.02.07<\/i><br \/>\nФильмы для фронтендеров:<br \/>\n— Приключения Паддингтона<br \/>\n— Приключения Марджинтона<\/p>\n<p><i>2017.02.11<\/i><br \/>\nФронтендер сделал в боулинге &lt;strike>.<\/p>\n<p><i>2017.02.12<\/i><br \/>\nЛюбви все возрасты — попкорны.<\/p>\n<p><i>2017.02.19<\/i><br \/>\nСержант полиции Иванов задержал дыхание на 14 суток.<\/p>\n<p><i>2017.02.27<\/i><br \/>\nВсех учат кнутом и пряником, а программистов — кнутом и фаулером.<\/p>\n<p><i>2017.03.01<\/i><br \/>\nЛучше быть бедным и здоровым, чем поддатым и больным.<\/p>\n<p><i>2017.03.01<\/i><br \/>\nНе до джиры, быть бы живу.<\/p>\n<p><i>2017.03.24<\/i><br \/>\nCancelярия мэрии Москвы.<\/p>\n<p><i>2017.04.11<\/i><br \/>\nМосковская коллегия адекватных<\/p>\n<p><i>2017.04.20<\/i><br \/>\nАвтобомбиль<\/p>\n<p><i>2017.05.11<\/i><br \/>\nЛюди ходят в тренажёрный зал, когда переусерствовали в нажорном.<\/p>\n<p><i>2017.05.12<\/i><br \/>\nВсероссийская перекись населения<\/p>\n<p><i>2017.05.22<\/i><br \/>\nСтарательная резинка<\/p>\n<p><i>2017.05.26<\/i><br \/>\nБранденбургские болота<\/p>\n<p><i>2017.05.26<\/i><br \/>\nЗаключение под спаржу как мера пресечения правонарушений<\/p>\n<p><i>2017.06.24<\/i><br \/>\nКубок конфигураций<\/p>\n<p><i>2017.08.07<\/i><br \/>\nЖена мужу:<br \/>\n— Почему не помыл вот и кастрюлю тоже?<br \/>\n— На это есть отдельная юзерстори.<\/p>\n<p><i>2017.08.30<\/i><br \/>\nCIEO: Chief Internet Explorer Officer<\/p>\n<p><i>2017.09.09<\/i><br \/>\nПикачу — это глагол<\/p>\n<p><i>2017.09.12<\/i><br \/>\nПарк Замкадье<\/p>\n<p><i>2017.10.09<\/i><br \/>\n— Где площадь Навона?<br \/>\n— Да вон она<\/p>\n<p><i>2017.10.12<\/i><br \/>\nСосиска в тексте<\/p>\n<p><i>2017.10.23<\/i><br \/>\nКарл у коалы украл кораллы, а коала у Карла украла кларнет.<\/p>\n<p><i>2017.11.02<\/i><br \/>\nСовершить тяжкий grep<\/p>\n<p><i>2017.12.05<\/i><br \/>\nВолхв и семеро козлят<\/p>\n<p><i>2017.12.13<\/i><br \/>\nЖить в эпоху репостмодернизма<\/p>\n<p><i>2017.12.20<\/i><br \/>\nAny key Skywalker<\/p>\n<p><i>2018.01.11<\/i><br \/>\nЗападное Бирюлёво и Бирюлёво Славянофилов<\/p>\n<p><i>2018.01.26<\/i><br \/>\nПуть из френдленты во френдзону<\/p>\n<p><i>2018.02.01<\/i><br \/>\nПочему-то арт-хаус часто становится арт-хаосом<\/p>\n<p><i>2018.02.01<\/i><br \/>\nКогда падает снег все радуются и выкладывают сторис в инстаграм, а когда падает сервер — нет<\/p>\n<p><i>2018.02.09<\/i><br \/>\nА когда в объявлении написано «Строго славяням» можно откликаться если ты из древлян? А полянам и северянам?<\/p>\n<p><i>2018.02.26<\/i><br \/>\nЧто общего у физика, специалиста по базам данным и агронома?<br \/>\nИм бы лишь бы поле добавить.<\/p>\n<p><i>2018.02.27<\/i><br \/>\nBigData — это когда данные не влезают в Excel, а HighLoad — когда VPS за 10 долларов недостаточно.<\/p>\n<p><i>2018.02.28<\/i><br \/>\nЗначительная часть проблем в мире возникает от того, что «ответственные лица» безответственные.<\/p>\n<p><i>2018.03.16<\/i><br \/>\nЛюдвиг ван Биткоин<\/p>\n<p><i>2018.04.16<\/i><br \/>\nЧто-то вы на подзабилити на юзабилити<\/p>\n<p><i>2018.04.17<\/i><br \/>\nПридумал рекламную компанию инфостиля:<br \/>\nДетям в Африке не хватает воды, потому что она твоем тексте. Используй инфостиль.<\/p>\n<p><i>2018.05.03<\/i><br \/>\nЦвет настроения #0059FF<\/p>\n<p><i>2018.06.04<\/i><br \/>\nПир-ту-пир во время чумы<\/p>\n<p><i>2018.06.25<\/i><br \/>\nВеганы плакали, кололись, но продолжали есть кактус.<\/p>\n<p><i>2018.07.06<\/i><br \/>\nПартия рыбаков:<br \/>\nКаждому рыбаку — леща!<\/p>\n<p><i>2018.10.12<\/i><br \/>\nПришел, увидел, заверстал<\/p>\n<p><i>2018.10.22<\/i><br \/>\nОшалел — купил коттедж в Альпах<\/p>\n<p><i>2018.10.24<\/i><br \/>\n—Знаю людей как vim.<br \/>\n—??<br \/>\n—Умеют только пищать и все портить.<\/p>\n<p><i>2018.11.12<\/i><br \/>\n— Я учусь в Южно-Уральском государственном коллежде возведения средств физической защиты периметра.<br \/>\n— Что?<br \/>\n— В заборостроительном техникуме.<\/p>\n<p><i>2019.02.14<\/i><br \/>\nЧары эйчара<\/p>\n<p><i>2019.04.08<\/i><br \/>\nМумерованный и наркированный список<\/p>\n<p><i>2019.05.13<\/i><br \/>\nЯ не смотрю Games of thrones, но судя по тому, что слышу вокруг:<br \/>\nПоложительный герой — убивает отрицательных<br \/>\nОтрицательный герой — убивает положительных<\/p>\n<p><i>2019.05.28<\/i><br \/>\nЯндекс.флешка это такой Яндекс.диск, только меньше объемом.<\/p>\n<p><i>2019.06.19<\/i><br \/>\nЖду когда-нибудь копирайтер напишет незабвенное:<br \/>\nВсе, что вы хотели знать о фобиях, но боялись спросить.<\/p>\n<p><i>2024.02.05<\/i><br \/>\nЛибертарианцам Хавьер всех Милей<\/p>\n",
            "date_published": "2025-06-25T01:53:17+03:00",
            "date_modified": "2025-06-25T01:53:40+03:00",
            "_date_published_rfc2822": "Wed, 25 Jun 2025 01:53:17 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "201",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "200",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/ai-browser-vs-just-ok-browser\/",
            "title": "ИИ-браузер vs нормальный браузер",
            "content_html": "<p>Тут Браузер кампани, которая делала Арк, анонсировала <a href=\"http:\/\/diabrowser.com\">новый браузер Диа с ИИ<\/a>. А мне хочется не браузер с ИИ, а просто нормальный браузер. Хочу браузер, который встает на сторону пользователя. Не на сторону сайта, не на сторону рекламодателя, не на сторону государства, а на мою. В идеале в 100% случаев, но я готов потерпеть и поменьше.<\/p>\n<p>Нормальный это какой? Вот такой:<\/p>\n<ol start=\"1\">\n<li>С поддержкой расширений и из хрома, и из фф, — откуда угодно. У вас и там, и там есть WebExtensions API, браузеры уже сейчас поддерживают и Манифест V2, и V3. Дак к чему эти различия в расширениях, сделайте поддержку всех сторов и форматов.<\/li>\n<li>Разрешающий сохранить картинку, даже если она вставлена хитро: через background-image, blob или как-то еще. Сохранять картину из веб-страницы это прямо базовая штука.<\/li>\n<li>Провокационный пункт: разрешающий скачать видео. Любое видео в интернете все все равно можно через yt-dlp скачать. Только сейчас нужно запустить консольное приложение, а мог бы и сам браузер скачать, ему же даже легче.<\/li>\n<li>Разрешающий выделить текст на странице. Всегда. Без вот этих «копирайт, поэтому выделить нельзя».<\/li>\n<li>С нормальным адблоком. В сафари нормального адблока нет уже много лет, скоро нормальный пропадет из хромов. Я бы бы рад браузеру, где нормальный адблок сохранился.<br \/>\nХотите прикрутить куда-то ИИ? Встройте ИИ в адблок, чтобы мне проще было указать где реклама. Это же абсурд, что человеческий глаз выделяет её за 50 миллисекунд, а браузерный адблок «ой, тут сложные цсс-классы, не могу понять где баннер».<\/li>\n<li>Блокирующий трекинг фейсбука и гугла.<\/li>\n<li>Режим не беспокоить по умолчанию, чтобы сайтам было сложнее начать играть какой-то видос или музыку, пиликать и блюмкать.<\/li>\n<li>Восстановление вкладок при падении или перезапуске. Не как сейчас, когда в 2% случаев может все потеряться. У вас диск пишет со скоростью 2 гигабайта в секунду, а читает 5, вы можете дампить вкладки раз в секунду так, что никто не заметит.<\/li>\n<\/ol>\n<p>Под некоторые пункты тут подходит <a href=\"https:\/\/kagi.com\/orion\/\">Орион<\/a>, но у него нет синхронизации истории с телефоном.<\/p>\n<p>Понятно, что такой браузер будут банить все сервисы: ютуб, маркетплейсы, все новостные сайты. Ну вы технари, придумайте, как сделать так, чтобы не банили.<\/p>\n<p>А фичи этого ИИ браузера в виде «возьми товары из этой заметки и добавь их все в корзину» — ну не знаю...<\/p>\n",
            "date_published": "2025-05-27T14:43:36+03:00",
            "date_modified": "2026-01-12T18:32:17+03:00",
            "_date_published_rfc2822": "Tue, 27 May 2025 14:43:36 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "200",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "189",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/premium-service-is-sad\/",
            "title": "Премиальное обслуживание",
            "content_html": "<p class=\"lead\">У банков, сотовых операторов, брокеров, страховых, да почти всех вокруг есть разного уровня «премиальное обслуживание». И, честно говоря, это «премиальное обслуживание» иногда вызывает шок своей неразумностью.<\/p>\n<h2>Чего не надо делать в премиальном обслуживании<\/h2>\n<p>Понятно, что нормальных премиумов у меня нет, одни нищебродские, но какие есть. Вот, что я встречал в премиумах.<\/p>\n<p>После назначения мне персонального менеджера он звонит (sic!) познакомиться (sic!). При этом менеджеры меняются примерно раз в год и «знакомство» повторяется регулярно.<\/p>\n<p>Персональный менеджер спамит меня какими-то предложениями, о которых я его не просил.<\/p>\n<p>Персональный менеджер предупреждает меня, что пойдет в отпуск, хотя я с ним ни разу не общался.<\/p>\n<p>Для получения перевыпущенной «премиальной» карты надо ехать в отделение банка. Прислать карту курьером, как делает непремиальный желтый банк, нельзя.<\/p>\n<p>Вместе с картой положена проходка в бизнес-залы Priority pass, но её забывают сразу выдать и надо ехать в отделение второй раз.<\/p>\n<p>Отделение, где нужно получить карту Priority pass вообще работает до 20:00. Но карту забрал себе персональный менеджер (видимо, желая вручить лично). Поэтому приехать придется на час раньше, т. к. менеджер работает только до 19:00. Приехав, узнаешь, что менеджер занята с клиентом, а Priority pass у нее в кабинете, — придется еще раз премиально подождать.<\/p>\n<p>Все сотрудники внезапно начинают обращаться только по имени-отчеству. Буквально в каждом предложении.<\/p>\n<p>На Новый год менеджер напишет индивидуальную премиальную смску с поздравлениями.<\/p>\n<p>На членов семьи положена туристическая страховка (что хорошо), но для того, чтобы ей воспользоваться, надо оформить банковские карт на всех взрослых членов семьи.<\/p>\n<h2>Что вполне разумно иметь в премиальном обслуживании<\/h2>\n<p>Отвечают в тех же самых чатах, которые уже есть, но «премиально»: сразу по делу с первого раза.<\/p>\n<p>Обещают «свяжемся с вами в течение часа» и связываются в течение часа.<\/p>\n<p>Автоматически отписывают от рекламных пушей, сообщений, акций, поздравлений с Новым годом, Рождеством и днем рождения.<\/p>\n<p>Можно сообщить саппорту как обращаться, саппорт запишет и всегда будет обращаться ровно так. Важный пункт для Ник (а не Вероник), Марго (а не Маргарит), Ксюш (а не Оксан).<\/p>\n<p>Сторисы в приложении банка опять же можно разрешить отключить (простите, не удержался).<\/p>\n",
            "date_published": "2025-05-21T18:00:47+03:00",
            "date_modified": "2025-05-21T18:00:21+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/cover-premium-service-is-sad.png",
            "_date_published_rfc2822": "Wed, 21 May 2025 18:00:47 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "189",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cover-premium-service-is-sad.png"
                ]
            }
        },
        {
            "id": "185",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/wine-glasses-at-home\/",
            "title": "Какие бокалы нужно иметь дома",
            "content_html": "<p class=\"lead\">Про бокалы я рассказывал разным людям лично уже несколько раз, почему бы не дописать этот черновик<\/p>\n<h2>Почему это важно<\/h2>\n<p>Бокалы важны, все вы этом слышали. Не буду повторяться.<\/p>\n<p>Проведите простой эксперимент: налейте одно и то же вино, пиво или кофе в винный бокал и в открытый бокал или стакан. Попробуйте и почувствуйте разницу в аромате, а вместе с ней и разницу во всем напитке.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/glasses@2x.png\" width=\"648\" height=\"559\" alt=\"\" \/>\n<\/div>\n<h2>Плохие бокалы<\/h2>\n<p>Не нужно использовать для вина вот такие бокалы:<\/p>\n<p><b>Расширяются, а не сужаются кверху.<\/b><br \/>\nЕсли бокал расширяется, то ароматы будут улетучиваться и не задерживаться. А нужно, чтобы они собирались.<\/p>\n<p><b>Сделаны не бокальной компанией<\/b><br \/>\nСовременный бокал — строго рассчитанное инженерное решение, его не так просто сделать. Поэтому доверять нужно в первую очередь тем, кто делает именно бокалы.<br \/>\n✅ Шеф-сомелье, Рона, Ридель, Шпигелау, Штольцле, Цальто и др.<br \/>\n🚫 Компания, производящая бытовую технику, одежный бренд. Если бы любимый певец начал делать бокалы, я бы не особо верил. Хрусталь обычно тоже мимо — он красивый, но форма обычно совсем не винная.<\/p>\n<p><b>Бокалы с толстой полоской по краю<\/b><br \/>\nТолстый край бокала — сигнал о том, что бокал самый дешевый, обычно такие используются для гравировки «Самый лучший муж».<\/p>\n<p>Все перечисленный бокалы используйте только для коктейлей или для нелюбимых гостей.<\/p>\n<h2>Минимальный набор<\/h2>\n<p>Если не хочется превращаться в винных гиков и иметь бокалы для легкого белого, плотного белого, красного из Бордо, красного из Бургундии, сладкого (кислого, крепкого, легкого), то купите вот эти:<\/p>\n<p><a href=\"https:\/\/shop-chefsommelier.ru\/bokal-dlya-vina-revealup-400-ml-d91-mm-h232-mm-chef-and-sommelier\/\">Шеф сомелье ревил ап 400 мл (Chef&Sommelier Reveal’Up 400 ml) <\/a><br \/>\nИз них можно пить все вина. Понятно, что бокал универсальный, а значит компромиссный. Но если один — то этот. Игристое (особенно шампанским методом) тоже пейте из них, а не из «флейты».<\/p>\n<h2>Что покупать дальше<\/h2>\n<p><a href=\"https:\/\/shop-chefsommelier.ru\/bokal-dlya-vina-revil-ap-450-ml-d104-mm-h222-mm-prozrachnyy-steklo-chef-and-sommelier\">Шеф сомелье ревил ап интенс 450 мл (Chef&Sommelier Reveal’Up Intense 450 ml) <\/a><br \/>\nЕсли любите оранжи<\/p>\n<p><a href=\"https:\/\/shop-chefsommelier.ru\/bokal-dlya-vina-revealup-550-ml-d11-sm-h23.6-sm-chef-and-sommelier\/\">Шеф сомелье ревил ап интенс 550 мл (Chef&Sommelier Reveal’Up Intense 550 ml) <\/a> или <a href=\"https:\/\/www.ikea.com\/rs\/sr\/p\/dyrgrip-casa-za-crno-vino-bistro-staklo-20309300\/\">Икея Дюгрип (Ikea Dyrgrip) <\/a><br \/>\nДля красных<\/p>\n<p><a href=\"https:\/\/shop-chefsommelier.ru\/bokal-dlya-vina-revealup-300-ml-d83-mm-h217-mm-chef-and-sommelier\/\">Шеф сомелье ревил ап 300 мл (Chef&Sommelier Reveal’Up 300 ml) <\/a><br \/>\nДля сладких<\/p>\n<p><a href=\"https:\/\/stolzle-shop.ru\/kollekcii-stolzle\/power\/nabor-iz-6-ti-stakanov-seriya-power-515-ml-d95.5-mm-h110-mm-stolzle\/\">Штольцле Павер 515 мл (Stolzle Power 515 ml) <\/a><br \/>\nБокал без ножки для пикников<\/p>\n<p><a href=\"https:\/\/simplewine.ru\/catalog\/product\/nabor_iz_6_ti_bokalov_definition_shampanskoe_025_143408\/\">Шпигелау Дефинишн для игристых (Spiegelau Definition) <\/a><br \/>\nЕсли очень хочется бокал-флейту для игристого<\/p>\n<p><a href=\"https:\/\/simplewine.ru\/catalog\/steklo\/bokaly\/filter\/manufacturer-spiegelau\/series-definition\/\">Серия Шпигелау Дефинишн (Spiegelau Definition) <\/a><br \/>\nЕсли хочется ощущения бокала ручной работы, но в несколько раз дешевле<\/p>\n<p><a href=\"https:\/\/simplewine.ru\/catalog\/product\/spiegelau__spiegelau_willsberger_anniversary__0725_129658\/\">Шпигелау Виллсбергер Анниверсари для вин Бургундии (Spiegelau Willsberger Anniversary) <\/a><br \/>\nДля мерсо или аналогичного шардоне<\/p>\n<p>Перечисленное выше — личный опыт, список не закрытый, есть и другие хорошие варианты. Просто лично я их не пробовал.<\/p>\n",
            "date_published": "2025-05-13T17:29:55+03:00",
            "date_modified": "2025-12-12T20:00:41+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/glasses@2x.png",
            "_date_published_rfc2822": "Tue, 13 May 2025 17:29:55 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "185",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/glasses@2x.png"
                ]
            }
        }
    ],
    "_e2_version": 3798,
    "_e2_ua_string": "E2 (v3798; Aegea)"
}