<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Все статьи подряд / Веб-разработка / Хабр]]></title>
    <link>https://habr.com/ru/hubs/webdev/articles/</link>
    <description><![CDATA[Веб-разработка – делаем веб лучше]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Wed, 02 Sep 2026 13:00:30 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[5,75 миллиарда токенов за полгода: как я перестал жечь контекст в Claude Code]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1077658/</guid>
      <link>https://habr.com/ru/articles/1077658/?utm_campaign=1077658&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/ae5/340/627/ae53406274dee895ee89d771f9db919d.png" /><p>Полгода назад я начал писать веб-лист персонажа для D&amp;D 5e, и почти весь код в нём пишет Claude Code. В какой-то момент лимиты подписки стали заканчиваться к обеду, и я распарсил транскрипты сессий, чтобы понять, куда уходят токены. Выяснилось: ответы модели — полпроцента расхода, а две трети съели 22 длинные сессии, в которых контекст рос на каждом шагу. В статье — скрипт замера на тридцать строк, разбор того, почему одна длинная сессия дороже пяти коротких, и восемь приёмов, которые я после этого внедрил: лимит сессии в Stop-хуке, карта кода вместо разведки грепом, запрет на повторное чтение файлов, вынос браузерных проверок в сабагента и рутины — на дешёвые модели.</p> <a href="https://habr.com/ru/articles/1077658/?utm_campaign=1077658&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 02 Sep 2026 10:55:35 GMT</pubDate>
      <dc:creator><![CDATA[D1MANYCH]]></dc:creator>
      
      <category><![CDATA[claude-code]]></category><category><![CDATA[pwa-приложения]]></category><category><![CDATA[автоматизация]]></category><category><![CDATA[пет-проект]]></category><category><![CDATA[serviceworker]]></category><category><![CDATA[тестирование]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Вышел Fable 5.1 и Mythos 5.1]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1077540/</guid>
      <link>https://habr.com/ru/articles/1077540/?utm_campaign=1077540&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/7f7/1db/9ea/7f71db9ea28bb56d08170acdb75d96ab.jpg" /><p>Мы представляем Claude Fable 5.1 и Claude Mythos 5.1. Это самые продвинутые в мире модели для программирования и интеллектуальной работы, а их исследовательские возможности уже дают первое представление о том, как ИИ-модели смогут способствовать научному прогрессу.</p><p>Claude Fable 5.1 и Claude Mythos 5.1 это одна и та же модель, но с разным уровнем защитных ограничений. Fable 5.1 доступна всем пользователям, тогда как Mythos 5.1 предоставляется только в рамках наших программ доверенного доступа. Её механизмы защиты специально настроены для работы в сфере кибербезопасности и наук о жизни.</p><p>Помимо роста возможностей, в Fable 5.1 мы учли важную обратную связь от клиентов, связанную со стоимостью, хранением данных и защитными механизмами.</p> <a href="https://habr.com/ru/articles/1077540/?utm_campaign=1077540&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 02 Sep 2026 08:05:25 GMT</pubDate>
      <dc:creator><![CDATA[qmzik]]></dc:creator>
      
      <category>ai</category><category>claude</category><category>fable</category><category>mythos</category><category>anthropic</category><category>ии</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Инструкция по устранению нарушений по персональным данным на сайте]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1077394/</guid>
      <link>https://habr.com/ru/articles/1077394/?utm_campaign=1077394&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Роскомнадзор наделен полномочиями по проведению контрольного (надзорного) мероприятия по контролю без взаимодействия с контролируемым лицом. Это означает, что Роскомнадзор на основании полученных заданий делает выборку нескольких сайтов и осуществляет в отношении них проверку. При этом владельцев сайтов (операторов персональных данных) никак не уведомляет. Если на сайте нет нарушений в области персональных данных, то вы и не узнаете, что сайт проверялся. А если нарушения будут найдены, то получите от Роскомнадзора письмо&nbsp;<strong>«требования об исполнении законодательства о персональных данных»</strong>. В соответствии с законодательством у владельца сайта есть 10 рабочих дней с момента получения требования, чтобы устранить нарушения и уведомить о принятых мерах Роскомнадзор.</p><p>Роскомнадзор достаточно лоялен к бизнесу. Выявив нарушения, он не сразу составляет протокол об административном правонарушении, а дает время адаптироваться (10 дней на исправление). Только в том случае, если требования органа не будут выполнены, то бизнес будет привлечен к административной ответственности. Поэтому главное правило – если получили такое письмо от Роскомнадзора, то ни в коем случае не игнорируем.</p><p>Далее я покажу и расскажу, как на практике выглядят требования Роскомнадзора. А также по моим рекомендациям сможете сделать аудит своего сайта на проверку соблюдения закона о персональных данных.</p><p>_________________________________</p><p>Очень важно всегда иметь доступ к официальной электронной почте, которую вы указываете для коммуникации с надзорами органами. Именно туда может прийти вот такое письмо, в котором будут перечислены все нарушения на сайте.</p> <a href="https://habr.com/ru/articles/1077394/?utm_campaign=1077394&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 01 Sep 2026 18:51:53 GMT</pubDate>
      <dc:creator><![CDATA[snezhana_chepa]]></dc:creator>
      
      <category><![CDATA[персональные данные]]></category><category><![CDATA[роскомнадзор]]></category><category><![CDATA[сайт]]></category><category><![CDATA[нарушения закона]]></category><category><![CDATA[интернет-магазин]]></category><category><![CDATA[интернет-агентство]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[«Завтра в 18:00» — это когда? Разбираем даты и часовые пояса в Python]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1077284/</guid>
      <link>https://habr.com/ru/articles/1077284/?utm_campaign=1077284&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/85d/561/816/85d561816cd9920c0428306850a6ac72.png" /><p>Фраза «завтра в 18:00» кажется простой, пока сервер и пользователь не оказываются по разные стороны полуночи. В Doday я сделал быстрое добавление задач из одной строки и обнаружил, что программа считает «сегодня» по UTC. Из-за этого дата сдвигалась, а указанное время могло остаться в названии.</p><p>В статье покажу, как передать часовой пояс из браузера, в каком порядке собирать локальную дату и время, зачем фиксировать текущее время в тестах и какие ещё ошибки нашлись у фраз «через месяц», «каждый понедельник» и меток с @.</p> <a href="https://habr.com/ru/articles/1077284/?utm_campaign=1077284&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать разбор</a>]]></description>
      
      <pubDate>Tue, 01 Sep 2026 14:37:55 GMT</pubDate>
      <dc:creator><![CDATA[SwairIt]]></dc:creator>
      
      <category><![CDATA[Python]]></category><category><![CDATA[FastAPI]]></category><category><![CDATA[datetime]]></category><category><![CDATA[ZoneInfo]]></category><category><![CDATA[UTC]]></category><category><![CDATA[часовые пояса]]></category><category><![CDATA[парсинг дат]]></category><category><![CDATA[дата и время]]></category><category><![CDATA[pytest]]></category><category><![CDATA[веб-разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Счётчик Яндекс.Метрики отнял у меня 30 баллов Lighthouse. Выключение Вебвизора не помогло]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1077156/</guid>
      <link>https://habr.com/ru/articles/1077156/?utm_campaign=1077156&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a74/065/f16/a74065f162dd03a4e8b0d3abcb5fe7e4.jpg" /><p>Одна и та же страница, три варианта, медиана трёх мобильных прогонов Lighthouse 12: без счётчика — 99 баллов и TBT 0 мс, со штатным сниппетом Яндекс.Метрики — 70 баллов и 2289 мс. Самый популярный совет «выключите вебвизор в init» не даёт почти ничего: те же 70 баллов и 2196 мс.</p><p>Как отделить счётчик от остального шума на A/B-стенде из локальных копий страницы, почему сам Lighthouse показывает виновника неправильно (third-party-summary рисует 70 мс при TBT больше двух секунд, потому что вся работа падает в bootup-time и остаётся неатрибутированной) и как вернуть 99 баллов, не потеряв данные, ради которых счётчик и ставился.</p> <a href="https://habr.com/ru/articles/1077156/?utm_campaign=1077156&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 01 Sep 2026 11:08:59 GMT</pubDate>
      <dc:creator><![CDATA[globalldev]]></dc:creator>
      
      <category><![CDATA[Яндекс.Метрика]]></category><category><![CDATA[Lighthouse]]></category><category><![CDATA[производительность]]></category><category><![CDATA[Core Web Vitals]]></category><category><![CDATA[TBT]]></category><category><![CDATA[вебвизор]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Пакуем PHP в PHP, чтобы запаковать в JS, чтобы обернуть в HTML]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1077060/</guid>
      <link>https://habr.com/ru/articles/1077060/?utm_campaign=1077060&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/dd0/539/810/dd0539810cc3cd66fde3a8df90f3de9e.jpg" /><p>Прочтя недавний перевод про <a href="https://habr.com/ru/companies/ruvds/articles/1075998/" rel="noopener nofollow">запаковку БД в exe</a>, решил рассказать об идеи, которую реализовал лет 6 назад в своем домашнем проекте. Сам проект недоделал, но речь в статье об архитектуре файлов и их запаковке.</p> <a href="https://habr.com/ru/articles/1077060/?utm_campaign=1077060&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 01 Sep 2026 08:19:15 GMT</pubDate>
      <dc:creator><![CDATA[bakhirev]]></dc:creator>
      
      <category><![CDATA[php]]></category><category><![CDATA[javascript]]></category><category><![CDATA[ненормальное программирование]]></category><category><![CDATA[crud]]></category><category><![CDATA[restapi]]></category><category><![CDATA[архитектура]]></category><category><![CDATA[оптимизация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[На что способен бесплатный Devin: тест на реальном проекте]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/selectel/articles/1076610/</guid>
      <link>https://habr.com/ru/companies/selectel/articles/1076610/?utm_campaign=1076610&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/732/c2d/8ca/732c2d8cae8b241e15b9cebd55b1681d.png" /><p>Привет, Хабр! Меня зовут Завур, я фронтенд-разработчик в <a href="https://selectel.ru/services/cloud/servers/?utm_source=habr.com&amp;utm_medium=referral&amp;utm_campaign=cloud_article_devin_010926_content">Selectel</a>. Каждый день я работаю в привычной многим среде разработки VS Code. Однако в личных проектах, которые создаю для исследования новых инструментов и методов написания кода, часто использую Cursor.</p><p>Он классно ускоряет разработку, но мне давно хотелось проверить: способен ли искусственный интеллект самостоятельно воплотить сырую идею в полноценное рабочее приложение? Иногда хочется быстро увидеть прототип в действии, чтобы решить, стоит ли развивать проект дальше. Именно поэтому я не смог пройти мимо многообещающего сервиса Devin.</p><p>Давайте посмотрим, как на практике выглядит реализация идеи с помощью Devin, и попробуем разобраться, действительно ли перед нами потенциальный конкурент Cursor.</p> <a href="https://habr.com/ru/articles/1076610/?utm_campaign=1076610&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 01 Sep 2026 08:00:26 GMT</pubDate>
      <dc:creator><![CDATA[marbleblazer (Selectel)]]></dc:creator>
      
      <category><![CDATA[devin]]></category><category><![CDATA[cursor]]></category><category><![CDATA[ai-agent]]></category><category><![CDATA[искусственный интеллект]]></category><category><![CDATA[docker]]></category><category><![CDATA[fastapi]]></category><category><![CDATA[telegram bot]]></category><category><![CDATA[vds]]></category><category><![CDATA[разработка приложений]]></category><category><![CDATA[selectel]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Один пакет — один мини-плеер: почему мы перенесли голос БОЛТУНа в AudioWorklet]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1077046/</guid>
      <link>https://habr.com/ru/articles/1077046/?utm_campaign=1077046&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Почему исправные 20-мс аудиопакеты всё равно превращались в щелчки? В БОЛТУНе каждый пакет запускался как отдельный AudioBufferSourceNode — до 50 мини-плееров в секунду на одного говорящего. Мы заменили это расписание одним непрерывным AudioWorklet с кольцевым буфером и проверили новую схему тестами.</p> <a href="https://habr.com/ru/articles/1077046/?utm_campaign=1077046&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Разобраться в звуке</a>]]></description>
      
      <pubDate>Tue, 01 Sep 2026 07:36:05 GMT</pubDate>
      <dc:creator><![CDATA[PAPADAN]]></dc:creator>
      
      <category><![CDATA[Tauri]]></category><category><![CDATA[AudioWorklet]]></category><category><![CDATA[Web Audio API]]></category><category><![CDATA[WebView2]]></category><category><![CDATA[PCM16]]></category><category><![CDATA[аудио]]></category><category><![CDATA[голосовая связь]]></category><category><![CDATA[джиттер-буфер]]></category><category><![CDATA[real-time audio]]></category><category><![CDATA[WebSocket]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[«Токен в ссылке украдут через Referer» — устарело пять лет назад. Куда он уходит теперь]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075868/</guid>
      <link>https://habr.com/ru/articles/1075868/?utm_campaign=1075868&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Совет про токен в адресе страницы кочует из статьи в статью в одной и той же формулировке: не кладите его в URL, иначе он уедет в заголовке <code>Referer</code> на все сторонние ресурсы, которые подключает ваша страница.</p><p>Совет правильный по выводу и неправильный по обоснованию. Через <code>Referer</code> он давно никуда не уезжает. А вот сам токен из URL утекает — просто в других местах, и там его обычно никто не ищет.</p> <a href="https://habr.com/ru/articles/1075868/?utm_campaign=1075868&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 01 Sep 2026 07:00:18 GMT</pubDate>
      <dc:creator><![CDATA[jbenderov]]></dc:creator>
      
      <category><![CDATA[referrer-policy]]></category><category><![CDATA[токены]]></category><category><![CDATA[логирование]]></category><category><![CDATA[nginx]]></category><category><![CDATA[веб-безопасность]]></category><category><![CDATA[сброс пароля]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как мы победили рутину: строим spec-driven платформу для генерации email]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/yoomoney/articles/1076874/</guid>
      <link>https://habr.com/ru/companies/yoomoney/articles/1076874/?utm_campaign=1076874&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/974/6f0/39d/9746f039d5e603831a10d5165613a9c0.png" /><p><strong>410 вариантов писем, сотня микросервисов и до 15 файлов, которые приходилось править ради одной нотификации.</strong> Добавление письма превратилось в квест: создай компонент, подключи, опиши параметры, зарегистрируй — и молись, что ничего не забыл. </p><p>Мы устали и автоматизировали это. Теперь описываем контракт письма в OpenAPI, а CLI генерирует весь boilerplate — от NestJS-артефактов до React-компонента с типизированными пропсами. Часы работы сжались до минут.</p><p>Меня зовут Денис, я фронтенд-разработчик в ЮMoney. В этой статье расскажу, почему мы пришли к кодогенерации, как устроили процесс и что в нём изменилось для разработчиков, дизайнеров и тестировщиков. Материал будет полезен тем, кто работает с React, NestJS или TypeScript и хочет перестать писать однотипный код вручную. Особенно если поддержка UI-компонентов и API-слоя отнимает время, которое лучше потратить на реальную логику.</p> <a href="https://habr.com/ru/articles/1076874/?utm_campaign=1076874&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 31 Aug 2026 15:29:20 GMT</pubDate>
      <dc:creator><![CDATA[Denisfg (ЮMoney)]]></dc:creator>
      
      <category><![CDATA[openapi]]></category><category><![CDATA[nestjs]]></category><category><![CDATA[react]]></category><category><![CDATA[автоматизация]]></category><category><![CDATA[spec-driven development]]></category><category><![CDATA[кодогенерация]]></category><category><![CDATA[reactjs]]></category><category><![CDATA[фронтенд]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как убрать логин из UI‑тестов на Java без лишних секунд и флака]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1067760/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1067760/?utm_campaign=1067760&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/623/1c2/943/6231c2943bf5c3b5bcb507467071f571.png" /><p>Когда 180&nbsp;тестов каждый раз проходят форму входа, авторизация начинает съедать десятки минут и ломаться на&nbsp;рейт‑лимитах, SSO и редиректах. Разберём рабочую схему: получить токен по&nbsp;API, закэшировать состояние и передать его браузеру до&nbsp;старта приложения. </p> <a href="https://habr.com/ru/articles/1067760/?utm_campaign=1067760&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать гайд</a>]]></description>
      
      <pubDate>Mon, 31 Aug 2026 14:45:51 GMT</pubDate>
      <dc:creator><![CDATA[sproshchaev (OTUS)]]></dc:creator>
      
      <category><![CDATA[автоматизация тестирования]]></category><category><![CDATA[UI-тесты]]></category><category><![CDATA[e2e-тесты]]></category><category><![CDATA[авторизация]]></category><category><![CDATA[Selenium]]></category><category><![CDATA[Selenide]]></category><category><![CDATA[REST Assured]]></category><category><![CDATA[WebDriver BiDi]]></category><category><![CDATA[API-тестирование]]></category><category><![CDATA[тестовый фреймворк]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Fluent Swap: как я вышел за пределы CRUD и начал разрабатывать matchmaking на Go]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1076800/</guid>
      <link>https://habr.com/ru/articles/1076800/?utm_campaign=1076800&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c96/2ec/e78/c962ece78984496448502dc61789a877.png" /><p>Большинство backend‑проектов начинаются предсказуемо: HTTP‑запрос, бизнес‑логика, SQL и ответ клиенту. Но&nbsp;что&nbsp;изменится, если вместо очередного CRUD нужно одновременно искать собеседников, поддерживать долгоживущие WebSocket‑соединения и не&nbsp;допускать двойного matchmaking?</p><p>В&nbsp;этой статье я расскажу, как&nbsp;появился Fluent Swap, почему его первая версия работает без&nbsp;базы данных и как&nbsp;очередь в&nbsp;памяти одного Go‑процесса постепенно подводит архитектуру к&nbsp;Redis и горизонтальному масштабированию.</p> <a href="https://habr.com/ru/articles/1076800/?utm_campaign=1076800&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 31 Aug 2026 14:14:47 GMT</pubDate>
      <dc:creator><![CDATA[Vizard19]]></dc:creator>
      
      <category><![CDATA[Go]]></category><category><![CDATA[Golang]]></category><category><![CDATA[websocket]]></category><category><![CDATA[matchmaking]]></category><category><![CDATA[backend]]></category><category><![CDATA[redis]]></category><category><![CDATA[конкурентность]]></category><category><![CDATA[архитектура]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[React Fiber: как React научился прерывать рендер и расставлять приоритеты]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/tbank/articles/1076774/</guid>
      <link>https://habr.com/ru/companies/tbank/articles/1076774/?utm_campaign=1076774&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/30b/cc7/d8e/30bcc7d8ef3e88953abfa74249b48f32.png" /><p>Банальный пример — когда печатаешь в input, а интерфейс начинает лагать на большом списке: классическая боль старого React. Я решил разобраться, как и почему React переписал свою архитектуру: отказался от рекурсивного обхода дерева, изобрел новую структуру данных и научился прерывать рендер ради нашего ввода.</p><p>В статье рассмотрю проблемы синхронной отрисовки и переход к новой архитектуре,&nbsp; почему пришлось отказаться от методов жизненного цикла с приставкой <code>*will</code>, что такое Fiber, почему первый вариант приоритизации с ExpirationTime не сработал и как пришли к React Lanes.</p> <a href="https://habr.com/ru/articles/1076774/?utm_campaign=1076774&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 31 Aug 2026 14:12:32 GMT</pubDate>
      <dc:creator><![CDATA[birmiiiyo (Т-Банк)]]></dc:creator>
      
      <category><![CDATA[React]]></category><category><![CDATA[react fiber]]></category><category><![CDATA[javascript]]></category><category><![CDATA[typescript]]></category><category><![CDATA[web-разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Находки в опенсорсе: мир питона за август 2026]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1076694/</guid>
      <link>https://habr.com/ru/articles/1076694/?utm_campaign=1076694&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5c0/cc8/27b/5c0cc827b4feb5c10ca4b7a23b92fb4f.png" /><p>Всем привет, вот и заканчивается лето :(</p><p><a href="https://habr.com/ru/articles/1065404" rel="noopener nofollow">Мой прошлый дайджест</a> неожиданным образом зашел, а значит - людям такое интересно. В августе было много новых интересных PEP’ов (например, PEP 805: Safe Parallel Python), которые я поревьюил, было много новых релизов, было много новых опенсорс проектов чуваков из нашего сообщества, пару интересных подкастов и множество другого интересного!</p><p>С меня как всегда статья без нейрослопа и ИИ, с вас как всегда интересные комментарии и лайки! Но немного нейрослопа я все же добавил в некоторые свои проекты. Но осторожно и с пользой для всех.</p><p>Погнали смотреть, что у нас в питоне происходило!</p> <a href="https://habr.com/ru/articles/1076694/?utm_campaign=1076694&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 31 Aug 2026 11:41:53 GMT</pubDate>
      <dc:creator><![CDATA[sobolevn]]></dc:creator>
      
      <category><![CDATA[python]]></category><category><![CDATA[opensource]]></category><category><![CDATA[github]]></category><category><![CDATA[AI]]></category><category><![CDATA[ИИ]]></category><category><![CDATA[Агенты]]></category><category><![CDATA[агенты ии]]></category><category><![CDATA[Claude]]></category><category><![CDATA[python3]]></category><category><![CDATA[django]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Вы подменили User-Agent, и сервер всё равно знает, что это curl. Он понял это до того, как получил заголовки]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075838/</guid>
      <link>https://habr.com/ru/articles/1075838/?utm_campaign=1075838&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Разговор, который у меня повторяется примерно раз в квартал. Интеграция ходит к партнёрскому API, партнёр её режет. Разработчик ставит в запрос User-Agent от Chrome. Не помогает. Дальше идут версии про адрес, про частоту, про капчу — и все мимо.</p><p>Сервер понял, что это не браузер, ещё до того, как увидел хоть один HTTP-заголовок. User-Agent он в тот момент не читал, потому что читать было нечего: HTTP начинается после установления TLS, а решение принимается по первому же пакету рукопожатия.</p> <a href="https://habr.com/ru/articles/1075838/?utm_campaign=1075838&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 31 Aug 2026 07:00:14 GMT</pubDate>
      <dc:creator><![CDATA[jbenderov]]></dc:creator>
      
      <category><![CDATA[tls]]></category><category><![CDATA[ja4]]></category><category><![CDATA[ja3]]></category><category><![CDATA[антифрод]]></category><category><![CDATA[детектирование]]></category><category><![CDATA[clienthello]]></category><category><![CDATA[user-agent]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Фреймворк WebDesktopGL для запуска веб-сайтов как десктопных приложений в Astra Linux и Linux системах. Через Chromium]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1073994/</guid>
      <link>https://habr.com/ru/articles/1073994/?utm_campaign=1073994&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/31b/5b3/538/31b5b3538e75ff09e789054e90d147d0.webp" /><p><a href="https://github.com/PVE-Vladimir/WebDesktopGL" rel="noopener nofollow">WebDesktopGL</a> — это фреймворк для преобразования веб-сайтов в настольные приложения на основе Chromium. Совместим с Astra Linux и другими системами Linux. В статье рассказано о следующем: </p><p>Как использовать браузер Chromium в качестве отдельного графического движка (параметры запуска Chromium).</p><p>Как на виртуальном экране Xephyr или Xvfb (X-сервере) реализованном над Xorg, добавить поддержку GPU видеокарты.  </p><p>Как реализовать буфер обмена между дисплеями с помощью xclip в Astra Linux и других системах Linux.</p><p>Цель работы — это создание аналога фреймворка Electron, альтернативного программного продукта WebDesktopGL, для Astra Linux и других систем Linux. Фреймворк WebDesktopGL был протестирован в средах Wayland и X11 в Ubuntu 24.04 (KDE), в X11 Ubuntu 22.04 (KDE) и Astra Linux 1.8.</p> <a href="https://habr.com/ru/articles/1073994/?utm_campaign=1073994&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 31 Aug 2026 02:35:55 GMT</pubDate>
      <dc:creator><![CDATA[PVE-Vladimir]]></dc:creator>
      
      <category><![CDATA[electron]]></category><category><![CDATA[веб-разработка]]></category><category><![CDATA[chromium]]></category><category><![CDATA[десктопные приложения]]></category><category><![CDATA[framework]]></category><category><![CDATA[фреймворк]]></category><category><![CDATA[xclip]]></category><category><![CDATA[xorg]]></category><category><![CDATA[x11]]></category><category><![CDATA[wayland]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Непротиворечивая классификация IoC]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1076226/</guid>
      <link>https://habr.com/ru/articles/1076226/?utm_campaign=1076226&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2de/194/db2/2de194db27440a5e5f16d8e4a0c41a11.png" /><p>Инверсия контроля позволяет нам написать код один раз и использовать его во многих контекстах, с разными реализациями зависимостей, с разными уровнями изоляции и тд. Давайте систематизируем разные подходы к достижению этой самой инверсии.</p> <a href="https://habr.com/ru/articles/1076226/?utm_campaign=1076226&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Прислушаться к этому источнику</a>]]></description>
      
      <pubDate>Sun, 30 Aug 2026 18:21:24 GMT</pubDate>
      <dc:creator><![CDATA[nin-jin]]></dc:creator>
      
      <category><![CDATA[dependency injection]]></category><category><![CDATA[inversion of control]]></category><category><![CDATA[dependency lookup]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] VideoFloppy: пять лет, десять пользователей, один доллар]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1076350/</guid>
      <link>https://habr.com/ru/articles/1076350/?utm_campaign=1076350&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/ce0/042/0d7/ce00420d7d2189c106146f4d7b7546fa.jpg" /><p><em>Я сделал этот сайт, потому что исчез другой, который мне нравился. Пять лет спустя у него горстка пользователей, один платящий клиент — и он научил меня большему, чем любой туториал.</em></p><p>В 2017 году я готовился к IELTS, и мне дали совет, который дают всем: смотрите фильмы с субтитрами.</p><p>Этот совет отправил меня искать инструмент вполне определённого рода. Не стриминг — поиск по фразам. Вводишь предложение и видишь, как его произносят, в контексте, в том фильме, где оно попалось. Я такой нашёл. Эстонский сайт, судя по домену <code>.ee</code>, название которого я начисто забыл.</p><p>Он ничего у себя не хранил. Он собирал встроенные плееры с видеохостингов и делал их доступными для поиска. Это различие имело значение и технически, и юридически, и тогда я особо не задумывался ни о том, ни о другом — мне просто показалось, что это остроумно.</p><p>Потом сайт закрылся. Без объявлений, без объяснений. Я несколько лет искал замену и не нашёл.</p><p>В 2021 году я решил сделать свой.</p> <a href="https://habr.com/ru/articles/1076350/?utm_campaign=1076350&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 30 Aug 2026 13:24:48 GMT</pubDate>
      <dc:creator><![CDATA[mgebrov]]></dc:creator>
      
      <category>blazor</category><category>.net</category><category>стартап</category><category>n-tier</category><category>пет-проект</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Пишем свой React: Fiber, хуки и рендеринг под капотом]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1076158/</guid>
      <link>https://habr.com/ru/articles/1076158/?utm_campaign=1076158&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/326/1f1/a5b/3261f1a5b575badd506a371f71d999e9.webp" /><p>Каждый день мы пишем JSX, используем хуки и стараемся не нарушать их строгие правила. Но как вся эта «магия» работает под капотом? Почему условный рендер ломает useState, а индексы массива в key приводят к багам? Зачем React перешел на архитектуру Fiber и как алгоритм обходит дерево элементов, не блокируя браузер?</p><p>Чтобы перестать воспринимать React как черный ящик, лучший способ — написать его с нуля.</p><p>В этой статье мы шаг за шагом воссоздадим собственный движок React. Мы реализуем функцию createElement, разберем Fiber-архитектуру с асинхронным рендерингом, напишем алгоритм Reconciliation и создадим систему хуков, разобравшись в логике их работы.</p> <a href="https://habr.com/ru/articles/1076158/?utm_campaign=1076158&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 29 Aug 2026 14:31:11 GMT</pubDate>
      <dc:creator><![CDATA[unk_pn]]></dc:creator>
      
      <category><![CDATA[react]]></category><category><![CDATA[javascript]]></category><category><![CDATA[frontend]]></category><category><![CDATA[fiber]]></category><category><![CDATA[hooks]]></category><category><![CDATA[virtual dom]]></category><category><![CDATA[reconciliation]]></category><category><![CDATA[react под капотом]]></category><category><![CDATA[архитектура]]></category><category><![CDATA[reactjs]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Почему Deno быстрее Node.js: расследование]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075892/</guid>
      <link>https://habr.com/ru/articles/1075892/?utm_campaign=1075892&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/0ad/15e/77d/0ad15e77d82c39c5741c855fef0d6c34.jpg" /><p>На&nbsp;<a href="https://deno.com/" rel="noopener nofollow">официальном сайте Deno</a>&nbsp;(раздел Built for the real world) красуется любопытная табличка. Согласно их замерам, Deno уходит в отрыв от Node.js по HTTP аж в&nbsp;1.65 раза:</p><p>Независимые тесты (<a href="https://github.com/denosaurs/bench" rel="noopener nofollow">denosaurs/bench</a>, <a href="https://www.pkgpulse.com/guides/deno-2-vs-nodejs-2026" rel="noopener nofollow">pkgpulse 2026</a>, <a href="https://jsmanifest.com/bun-node-deno-performance-2026/" rel="noopener nofollow">jsmanifest 2026</a>) показывают похожую картину: Deno стабильно быстрее на HTTP-нагрузке. Я решил копнуть глубже и понять, где Deno получает преимущество по сравнению с Node.js.</p> <a href="https://habr.com/ru/articles/1075892/?utm_campaign=1075892&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 29 Aug 2026 10:14:56 GMT</pubDate>
      <dc:creator><![CDATA[jarick]]></dc:creator>
      
      <category><![CDATA[node.js]]></category><category><![CDATA[deno]]></category><category><![CDATA[bff]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Я подключил ИИ-агента к YouGile: теперь он сам разбирает задачи и обновляет статусы]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1076064/</guid>
      <link>https://habr.com/ru/articles/1076064/?utm_campaign=1076064&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/4f3/e06/46c/4f3e0646c8e4e1aafa188ee457c0e056.jpg" /><p>ИИ-агент может не только писать код, но и сам забирать задачи из YouGile, выполнять их и обновлять статусы. Рассказываю, как я связал Codex и Claude Code с таск-трекером, почему обычный retry после timeout однажды создал дубли и зачем между LLM и API нужен отдельный детерминированный слой.</p> <a href="https://habr.com/ru/articles/1076064/?utm_campaign=1076064&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 29 Aug 2026 07:50:25 GMT</pubDate>
      <dc:creator><![CDATA[anilau]]></dc:creator>
      
      <category><![CDATA[YouGile]]></category><category><![CDATA[Codex]]></category><category><![CDATA[Claude Code]]></category><category><![CDATA[ИИ-агенты]]></category><category><![CDATA[управление задачами]]></category><category><![CDATA[автоматизация бизнеса]]></category><category><![CDATA[REST API]]></category><category><![CDATA[безопасные интеграции]]></category><category><![CDATA[командная работа]]></category><category><![CDATA[разработка плагинов]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Yet Another English — и да, ещё один сайт по изучению английского, ну че поделать?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1076020/</guid>
      <link>https://habr.com/ru/articles/1076020/?utm_campaign=1076020&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1e8/984/e2e/1e8984e2eeb7e7821b5f531e9519413b.png" /><p>Ну как&nbsp;вы поняли, сервис я так и назвала, чтоб сразу закрыть основное возражение (хихик). Да&nbsp;знаю, что&nbsp;их тысячи&nbsp;— и сделала еще один, и объясню дальше почему.</p><p>У&nbsp;меня средненький английский, примерно B1&nbsp;(но для&nbsp;менеджерки продукта требуется обычно по‑больше левел ю ноу). Я смотрю YouTube на&nbsp;англ, чтобы его подятнуть и постоянно натыкаюсь на&nbsp;незнакомые слова. В&nbsp;табличку выписывать, в&nbsp;анки загружать&nbsp;— мне&nbsp;было лень. Хотелось так: кинула ссылку на&nbsp;видео&nbsp;— слова моего уровня сами вытащились из&nbsp;субтитров и встали в&nbsp;очередь на&nbsp;повторение.</p><p>Работаю много, по&nbsp;вечерам есть 1–2&nbsp;часика обычно. Вот за&nbsp;пару месяцев таких вечеров (595&nbsp;коммитов) получился тренажёр: pwa на&nbsp;реакте, данные живут в&nbsp;IndexedDB у&nbsp;пользователя, + словарик + разные упражнения.</p><p>От «сайта эпохи ИИ» ждёшь, что&nbsp;внутри обёртка над чат‑ботом, РАГИ, и все такое ну вы поняли. У&nbsp;меня вышло наоборот: LLM здесь&nbsp;— подрядчик на&nbsp;двух узких задачах, а&nbsp;основную работу делают частотные списки, алгоритм из 90-х ну и клод в&nbsp;качестве работяги. Собсна про&nbsp;это и будет статья, или&nbsp;серия статей.</p> <a href="https://habr.com/ru/articles/1076020/?utm_campaign=1076020&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 20:43:10 GMT</pubDate>
      <dc:creator><![CDATA[monrech]]></dc:creator>
      
      <category><![CDATA[LLM]]></category><category><![CDATA[искусственный интеллект]]></category><category><![CDATA[React]]></category><category><![CDATA[EdTech]]></category><category><![CDATA[изучение английского]]></category><category><![CDATA[тренажер английского]]></category><category><![CDATA[интервальные повторения]]></category><category><![CDATA[словарный запас]]></category><category><![CDATA[разработка продукта]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[SOAP в .NET без WCF: WS-Security, MTOM и ?wsdl как шаг маршрута]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075966/</guid>
      <link>https://habr.com/ru/articles/1075966/?utm_campaign=1075966&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/68c/ac6/f2e/68cac6f2e7f7344dc6052b536e0c9342.png" /><p>SOAP никуда не делся. Продаёте авиабилеты, значит ходите в Amadeus, Sabre и Travelport по SOAP. Интегрируетесь с банком, госпорталом, страховым бэкендом, биллингом оператора или почти любым корпоративным продуктом, купленным до 2015-го: там контракт это WSDL, а на проводе&nbsp;<code>&lt;soap:Envelope&gt;</code>. Подписи WS-Security, вложения MTOM, SOAP 1.1 рядом с 1.2,&nbsp;<code>soap:Fault</code>&nbsp;при ошибке: этот мир жив, он приносит деньги и не переезжает на REST по вашей вежливой просьбе.</p><p>В .NET вызывать его стало неудобно. WCF как полноценный фреймворк ушёл. CoreWCF есть, но во всех опубликованных версиях висит незакрытая крипто-уязвимость, так что затащить его значит поменять одну проблему на другую.&nbsp;<code>dotnet-svcutil</code>&nbsp;генерит клиент из WSDL на этапе сборки, но это кодогенерация, приклеенная сбоку, а не шаг интеграции. А хостинг SOAP-эндпоинта, WS-Security руками или проводка MTOM обычно заканчиваются кучей конфигурации&nbsp;<code>System.ServiceModel</code>, которую никто не хочет держать.</p><p><code>redb.Route.Soap</code>&nbsp;идёт другим путём. SOAP становится обычным шагом пайплайна в вашем же .NET-процессе. Вызвал сервис, получил типизированный ответ. Поднял эндпоинт, отдал тело маршруту, вернул ответ. Всё in-box:&nbsp;<code>HttpClient</code>, общий Kestrel-хост и&nbsp;<a href="http://System.Security" rel="noopener nofollow"><code>System.Security</code></a><code>.Cryptography.Xml</code>&nbsp;для WS-Security. Ни WCF, ни рантайма&nbsp;<code>System.ServiceModel</code>, ни уязвимой зависимости, ни отдельного шлюза. Разберём, как это используется и почему нативный коннектор внутри ESB бьёт codegen-клиента или отдельную коробку.</p> <a href="https://habr.com/ru/articles/1075966/?utm_campaign=1075966&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 16:46:00 GMT</pubDate>
      <dc:creator><![CDATA[grelikt]]></dc:creator>
      
      <category><![CDATA[dotnet]]></category><category><![CDATA[integration]]></category><category><![CDATA[soap]]></category><category><![CDATA[security]]></category><category><![CDATA[esb]]></category><category><![CDATA[eip]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[CSS задачи на 200 IQ]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075950/</guid>
      <link>https://habr.com/ru/articles/1075950/?utm_campaign=1075950&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/361/b80/fb1/361b80fb1547f2ffeb5811608dc1698b.jpg" /><p>У вас бывает такое чувство, когда вы при выполнении работы упёрлись в какую-то проблему и что-то внутри подсказывает, что не может такого быть, чтобы у неё не было решения? Когда кажется, что уже всё пропало и мы столкнулись с фундаментальным ограничением реальности, но отказ принять это продолжает вести вас в дебри спецификаций, беседы на Github 10 летней давности и изучение статей гигантов уже прошедших этот путь и поделившихся с нами своими результатами? И вот спустя многие часы напряжённого скрипа извилин вы дописали очередную строчку, обновили страницу и вот оно, то, что вы хотели получить смотрит на вас с экрана? Это ощущение успеха, наверное, в той или иной степени знакомо каждому инженеру. В такие моменты мне, обычно, очень хочется поделиться результатом с коллегами и, по возможности, написать статью если это может быть полезно кому-то ещё. В этой записи я собрал 3 подобных ситуации, где в рамках нашей работы возникли решения, которые, насколько мне известно, довольно уникальны и в полной мере не были описаны раньше. Приглашаю вас разделить со мной радость обнаружения решения, которое казалось невозможным!</p> <a href="https://habr.com/ru/articles/1075950/?utm_campaign=1075950&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 15:41:40 GMT</pubDate>
      <dc:creator><![CDATA[Waterplea]]></dc:creator>
      
      <category><![CDATA[css]]></category><category><![CDATA[scroll-driven animations]]></category><category><![CDATA[shrinkwrap]]></category><category><![CDATA[puzzle]]></category><category><![CDATA[svg]]></category><category><![CDATA[mask]]></category><category><![CDATA[frontend]]></category><category><![CDATA[front-end]]></category><category><![CDATA[фронтенд]]></category><category><![CDATA[css masking]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Автогенерация типов показала, что проблема была не в типах]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075808/</guid>
      <link>https://habr.com/ru/articles/1075808/?utm_campaign=1075808&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/69d/a84/847/69da848476734e960b2f7b8ae7dbc7aa.png" /><p>Каждый день мы натыкаемся на&nbsp;одни и те&nbsp;же грабли в&nbsp;связке фронта и бэка. Каждые такие грабли&nbsp;— это деньги и время. А&nbsp;если ещё и договариваться не&nbsp;умеем, процессов нет и решать никто не&nbsp;берётся, то дальше начинаются конфликты, атмосфера в&nbsp;команде проседает и проблемы копятся ещё&nbsp;быстрее.</p><p>Статья не&nbsp;про&nbsp;саму автогенерацию&nbsp;— с&nbsp;ней всё понятно, про&nbsp;неё и без&nbsp;меня написано достаточно. Мы внедрили генерацию типов из&nbsp;OpenAPI, и она вытащила наружу то, что&nbsp;с&nbsp;генерацией напрямую не&nbsp;связано: кто не&nbsp;хочет писать комментарии, почему у&nbsp;одной сущности два имени и почему у&nbsp;нас падал dev. По&nbsp;сути&nbsp;— про&nbsp;команду, эго и умение договариваться.</p><p>Сразу оговорюсь: это не&nbsp;единственно верный путь. Команды и компании разные, у&nbsp;всех свои нюансы, я рассказываю, как&nbsp;было у&nbsp;нас. Но&nbsp;если автогенерации у&nbsp;вас ещё нет и вы соберётесь её внедрять&nbsp;— будете хотя&nbsp;бы знать, что&nbsp;вас ждёт.</p> <a href="https://habr.com/ru/articles/1075808/?utm_campaign=1075808&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 11:39:58 GMT</pubDate>
      <dc:creator><![CDATA[seregabigjopa]]></dc:creator>
      
      <category><![CDATA[OpenAPI]]></category><category><![CDATA[автогенерация типов]]></category><category><![CDATA[Scramble]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[API-контракты]]></category><category><![CDATA[монорепозиторий]]></category><category><![CDATA[процессы разработки]]></category><category><![CDATA[командная работа]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Публичный API у генератора QR-кодов: без ключей, лимитер на файлах и грабля Apache]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075776/</guid>
      <link>https://habr.com/ru/articles/1075776/?utm_campaign=1075776&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>У моего генератора QR-кодов листами появился публичный API: POST с JSON, в ответ сразу готовый PDF, до 1500 кодов за запрос, без регистрации и ключей. Внутри рассказ, почему я не завел ни ключи, ни Redis, как работает лимитер на файлах с flock и fail-open, и на какой грабле Apache POST молча превращался в GET.</p> <a href="https://habr.com/ru/articles/1075776/?utm_campaign=1075776&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 10:45:21 GMT</pubDate>
      <dc:creator><![CDATA[SorokinSergei]]></dc:creator>
      
      <category><![CDATA[api]]></category><category><![CDATA[qr-код]]></category><category><![CDATA[rate limiting]]></category><category><![CDATA[битрикс]]></category><category><![CDATA[php]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Зеркало для людей. Как я сделал читаемую версию форума, на котором общаются только ИИ-агенты]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075764/</guid>
      <link>https://habr.com/ru/articles/1075764/?utm_campaign=1075764&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/063/4ee/917/0634ee91714df616f96b4250204ee877.png" /><p>Существует форум, на&nbsp;который вас не&nbsp;пустят. Не&nbsp;потому что закрытый&nbsp;— регистрация там всего в&nbsp;один POST-запрос. Вас просто не&nbsp;возьмут на&nbsp;сайт. Гражданами может стать только ИИ-агент. Форум называется 1f916.ai, и&nbsp;это, наверное, самое странное и&nbsp;самое живое место в&nbsp;русскоязычном (и&nbsp;не&nbsp;только) сегменте экспериментов с&nbsp;ИИ этого лета. Я&nbsp;на&nbsp;него подсел. А&nbsp;потом меня начало грызть одно чувство несправедливости&nbsp;— и&nbsp;в&nbsp;итоге я&nbsp;собрал для него окно для людей&nbsp;— 1f916.xrayfun.ru. Рассказываю, зачем, как и&nbsp;что из&nbsp;этого вышло.</p> <a href="https://habr.com/ru/articles/1075764/?utm_campaign=1075764&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 10:31:09 GMT</pubDate>
      <dc:creator><![CDATA[XRayFun]]></dc:creator>
      
      <category><![CDATA[искусственный интеллект]]></category><category><![CDATA[ии-агенты]]></category><category><![CDATA[llm]]></category><category><![CDATA[форум]]></category><category><![CDATA[django]]></category><category><![CDATA[api]]></category><category><![CDATA[server-sent events]]></category><category><![CDATA[веб-разработка]]></category><category><![CDATA[ai]]></category><category><![CDATA[личный проект]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Сайт в топе, а кликов нет: при чём тут микроразметка услуг]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1073038/</guid>
      <link>https://habr.com/ru/articles/1073038/?utm_campaign=1073038&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/819/eb1/8b9/819eb18b9da5e7383dbef277560a723f.png" /><p>Владелец сайта по остеклению смотрит отчёт и злится. Позиции есть, страницы держатся в топе, SEO-работы идут не первый месяц: тексты переписывали, блоки добавляли, кейсы оформляли, фотографии меняли. А кликов всё равно меньше, чем он ожидал.</p><p>Вопрос к подрядчику в такой ситуации возникает простой и довольно неприятный: «Вы вообще что делаете? Если сайт уже в топе, почему люди не переходят?» На эмоциях это звучит как обвинение, но сама проблема реальная. Позиции в отчёте есть, а бизнес не видит того эффекта, который привык ждать от этих позиций.</p><p>И тут не всегда помогает ответ «надо ещё поработать над текстами». Иногда текстов уже достаточно. Блоков тоже достаточно. Страница видна, но плохо объясняет машине, что именно она предлагает: услугу, регион, исполнителя, условия, цену, замер, гарантию, филиал.</p><p>Вот здесь и стоит вспомнить про микроразметку. Не как про волшебную кнопку, которая вернёт клики. Не вернёт. А как про способ сделать страницу менее мутной для поисковиков, агрегаторов и других машинных потребителей.</p><p>С сайтом услуг это особенно заметно. Интернет-магазин размечать проще: товар, цена, наличие, доставка. У услуги всё грязнее.</p> <a href="https://habr.com/ru/articles/1073038/?utm_campaign=1073038&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 10:20:26 GMT</pubDate>
      <dc:creator><![CDATA[sergey-kupryashkin]]></dc:creator>
      
      <category><![CDATA[микроразметка]]></category><category><![CDATA[Schema.org]]></category><category><![CDATA[JSON-LD]]></category><category><![CDATA[structured data]]></category><category><![CDATA[Service]]></category><category><![CDATA[Offer]]></category><category><![CDATA[SEO]]></category><category><![CDATA[техническое SEO]]></category><category><![CDATA[сайт услуг]]></category><category><![CDATA[поисковая выдача]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[«Мы храним ваши пароли в зашифрованном виде» — фраза, после которой стоит насторожиться]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075692/</guid>
      <link>https://habr.com/ru/articles/1075692/?utm_campaign=1075692&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Формулировка встречается в политиках конфиденциальности постоянно и звучит успокаивающе. На деле она означает одно из двух: либо в компании действительно шифруют пароли — и это плохо, — либо там не различают шифрование и хеширование, что тоже не добавляет уверенности.</p> <a href="https://habr.com/ru/articles/1075692/?utm_campaign=1075692&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 09:29:35 GMT</pubDate>
      <dc:creator><![CDATA[jbenderov]]></dc:creator>
      
      <category><![CDATA[информационная безопасность]]></category><category><![CDATA[хеширование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[SaaS, который не сделаешь с помощью вайбкодинга: 50 000 пользователей и миллионная выручка]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075708/</guid>
      <link>https://habr.com/ru/articles/1075708/?utm_campaign=1075708&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a3d/9be/f71/a3d9bef71309f4414071f2de95ab6631.jpg" /><p>Всем привет! Это Денис Сметнев. Я тут рассказываю про вайбкодинг, про то, как один человек теперь может заменить команду, и как узкое горлышко переместилось из разработки в сторону маркетинга. При этом я наставник у ребят, которые пилят SaaS, но не справились бы без разработчиков. Речь про Reels-Boss — сервис, который нарезает длинные видео на вирусные вертикальные куски для Shorts, Reels и TikTok. Рассказываю, как ребята втроем обслуживают 50 000 клиентов и почему вайбкодеры не справятся с таким сервисом.</p> <a href="https://habr.com/ru/articles/1075708/?utm_campaign=1075708&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 09:18:29 GMT</pubDate>
      <dc:creator><![CDATA[Denis-Smetnev]]></dc:creator>
      
      <category><![CDATA[saas]]></category><category><![CDATA[saas сервисы]]></category><category><![CDATA[искусственный интеллект]]></category><category><![CDATA[вайбкодинг]]></category><category><![CDATA[разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Эра инженерной зрелости: как выглядит стек JS-разработки в 2026 году глазами сообщества]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/kaspersky/articles/1074966/</guid>
      <link>https://habr.com/ru/companies/kaspersky/articles/1074966/?utm_campaign=1074966&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/887/a2c/ed2/887a2ced2356eadad1e92142456c57a6.jpg" /><p>Хайп-цикл фронтенда, кажется, наконец-то выдохся. Мы вышли из фазы бесконечного переизобретения колеса, где каждый месяц появлялся «убийца React», и вошли в эпоху <s>убийцы Fable</s> инженерной зрелости. Сегодня опытного инженера сложно впечатлить очередным фреймворком: ценность сместилась в сторону предсказуемости, скорости поставки (delivery) и снижения когнитивной нагрузки. </p><p>Привет, меня зовут Павел Востриков, и я — архитектор веб-направления в «Лаборатории Касперского». В этой статье хочу разобрать JS-экосистему как набор инженерных компромиссов. </p><p>На HolyJS Spring 2026 мы предложили 120+ инженерам оценить свой реальный стек. Получившийся радар мог быть просто списком библиотек, но в итоге вышел срезом того, как выглядит рациональный подход к коду в 2026 году. Мы видим, как разработчики массово идут в сторону предсказуемой скорости масштабирования решений и инженерной гигиены.</p> <a href="https://habr.com/ru/articles/1074966/?utm_campaign=1074966&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 08:17:45 GMT</pubDate>
      <dc:creator><![CDATA[vostrik («Лаборатория Касперского»)]]></dc:creator>
      
      <category><![CDATA[javascript]]></category><category><![CDATA[веб-приложения]]></category><category><![CDATA[фронтенд-разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Кому верит Яндекс Браузер и как попасть в этот список: запускаем Yandex Browser Root Certificate Program]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/yandex/articles/1075148/</guid>
      <link>https://habr.com/ru/companies/yandex/articles/1075148/?utm_campaign=1075148&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a71/d1c/874/a71d1c874a879cf8141bb12c859cff35.jpg" /><p>За 15&nbsp;лет WebPKI&nbsp;— экосистема доверия между сайтами и пользователями&nbsp;— сильно выросла. Появились технологии, которые делают это доверие более прозрачным и проверяемым, изменились подходы к&nbsp;управлению, а&nbsp;многие процессы стали автоматическими: выпуск и обновление сертификатов, публичный аудит через Certificate Transparency и другие механизмы.&nbsp;</p><p>И, конечно, в&nbsp;истории WebPKI&nbsp;были серьёзные инциденты безопасности, которые показали: правила доверия должны&nbsp;быть публичными, прозрачными и проверяемыми.</p><p>Однако один вопрос не&nbsp;решается автоматически: кому браузер должен доверять и на&nbsp;каких условиях. Каждый вендор определяет это сам. Поэтому мы открываем <a href="https://yandex.ru/support/browser/ru/security/root-certificate-program">Yandex Browser Root Certificate Program</a>&nbsp;— публичную программу добавления корневых сертификатов в&nbsp;хранилище Яндекс Браузера. В&nbsp;ней описаны требования к&nbsp;участникам, аудит и понятная процедура подачи заявки.</p><p>Под&nbsp;катом рассказываем, какие требования нужно выполнить и как&nbsp;в&nbsp;Браузере устроены WebPKI и связанные с&nbsp;ними контроли безопасности.</p> <a href="https://habr.com/ru/articles/1075148/?utm_campaign=1075148&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 08:00:27 GMT</pubDate>
      <dc:creator><![CDATA[Ilya_Golubtsov (Яндекс)]]></dc:creator>
      
      <category><![CDATA[яндекс]]></category><category><![CDATA[безопасность]]></category><category><![CDATA[браузеры]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[После сборки на Tauri затрещал голос и почернел стрим: разбираем три ошибки одного теста]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075622/</guid>
      <link>https://habr.com/ru/articles/1075622/?utm_campaign=1075622&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>После сборки на Tauri голос начал трещать, автокалибровка почти минуту вмешивалась в разговор, а демонстрация экрана через минуту становилась чёрной. Разбираем запись и логи, находим усиление до ×4 без лимитера, резкие разрывы 20-мс аудиопакетов и зависший видеотрек при живом соединении LiveKit — и показываем, как исправили каждый сбой в версии 0.0.26.</p> <a href="https://habr.com/ru/articles/1075622/?utm_campaign=1075622&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Разобраться в причинах</a>]]></description>
      
      <pubDate>Fri, 28 Aug 2026 07:19:04 GMT</pubDate>
      <dc:creator><![CDATA[PAPADAN]]></dc:creator>
      
      <category><![CDATA[Tauri]]></category><category><![CDATA[WebView2]]></category><category><![CDATA[Web Audio API]]></category><category><![CDATA[LiveKit]]></category><category><![CDATA[WebRTC]]></category><category><![CDATA[Opus]]></category><category><![CDATA[Android]]></category><category><![CDATA[джиттер-буфер]]></category><category><![CDATA[аудио]]></category><category><![CDATA[демонстрация экрана]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Я устал проверять сайты постранично и сделал свой сайт проверок HeadInspect]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075448/</guid>
      <link>https://habr.com/ru/articles/1075448/?utm_campaign=1075448&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/9e9/d87/e91/9e9d87e919985f9a25f3a71e0805d9c1.png" /><p>Я занимаюсь созданием сайтов с&nbsp;начала 00-х. Я просто интересовался этой темой. Веб‑дизайн и разработка сайтов никогда не&nbsp;были моей профессией. Я заканчивал институт, работал в&nbsp;ночных клубах танцором и сделал для&nbsp;себя сайт‑визитку: это&nbsp;было намного проще, чем раздавать агентам фотографии сценических образов в&nbsp;конвертике. Позже на&nbsp;этом сайте появились другие артисты, а&nbsp;самим сайтом начинали потихоньку пользоваться ивент‑агентства и клубные промоутеры. Позднее с&nbsp;годами я уже вёл несколько сайтов дружеских коллективов, а&nbsp;мой первый маленький сайт превратился в&nbsp;каталог артистов с&nbsp;самостоятельной регистрацией и возможностью за&nbsp;плату продвигать свою анкету.</p><p>Как&nbsp;и писал ранее&nbsp;— сайты&nbsp;— это моё хобби. Иногда я прибегал к&nbsp;помощи сторонних веб‑дизайнеров, что‑то делал сам. Такое поверхностное занятие сайтами с&nbsp;годами привело к&nbsp;тому, что&nbsp;сайты устарели на&nbsp;десятилетие в&nbsp;плане дизайна и UX. В&nbsp;этом году в&nbsp;бизнесе артистов для&nbsp;корпоративов наступило затишье и появилось много свободного времени.&nbsp;Было принято решение обновить сайты! И именно во&nbsp;время этого обновления появилась проблема, из&nbsp;которой в&nbsp;итоге вырос HeadInspect. </p> <a href="https://habr.com/ru/articles/1075448/?utm_campaign=1075448&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 27 Aug 2026 17:19:54 GMT</pubDate>
      <dc:creator><![CDATA[starostagogo]]></dc:creator>
      
      <category><![CDATA[headinspect]]></category><category><![CDATA[технический аудит сайта]]></category><category><![CDATA[seo]]></category><category><![CDATA[open graph]]></category><category><![CDATA[schema.org]]></category><category><![CDATA[sitemap]]></category><category><![CDATA[meta-теги]]></category><category><![CDATA[robots.txt]]></category><category><![CDATA[python]]></category><category><![CDATA[веб-разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Тестирование конкурентных запросов: практический гайд по проверке конфликтов в HTTP API при изменении одной сущности]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1073974/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1073974/?utm_campaign=1073974&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/af3/219/b04/af3219b042e54b012155f85336fb18c7.png" /><p>Когда несколько клиентов работают с&nbsp;одной записью, проблема часто скрывается не&nbsp;в&nbsp;самом запросе, а&nbsp;в&nbsp;моменте между чтением данных и их сохранением. </p><p>Разберём, как&nbsp;тестировать такие ситуации через последовательные и параллельные запросы, какие ответы считать корректными и почему одного успешного HTTP‑ответа недостаточно, чтобы подтвердить безопасность изменений. </p> <a href="https://habr.com/ru/articles/1073974/?utm_campaign=1073974&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 27 Aug 2026 14:45:18 GMT</pubDate>
      <dc:creator><![CDATA[SiYa_renko (OTUS)]]></dc:creator>
      
      <category><![CDATA[API]]></category><category><![CDATA[HTTP API]]></category><category><![CDATA[REST API]]></category><category><![CDATA[конкурентные запросы]]></category><category><![CDATA[гонки данных]]></category><category><![CDATA[блокировки]]></category><category><![CDATA[тестирование ПО]]></category><category><![CDATA[ETag]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[автоматизация тестирования]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[IndexNow из Node.js: переобход без аккаунтов, и почему fetch обрывается там, где curl проходит]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1075292/</guid>
      <link>https://habr.com/ru/articles/1075292/?utm_campaign=1075292&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Чтобы сказать Яндексу «страница изменилась, приди посмотреть», аккаунт в Вебмастере не нужен. Есть протокол IndexNow: вы кладёте в корень сайта файл с ключом, шлёте POST со списком адресов — и поисковик приходит за часы вместо недель. Ни регистрации, ни OAuth, ни капчи. Реализуется тридцатью строками на Node.js без единой зависимости.</p><p>Ниже — рабочий скрипт целиком, шесть кодов ответа, которые он может получить, и три грабли, на которые я наступил, пока доводил его до состояния «запустил и забыл». Одна из них интереснее прочих: <code>fetch</code> в Node падает с <code>fetch failed</code> на том же запросе, который <code>curl</code> отправляет с первого раза.</p> <a href="https://habr.com/ru/articles/1075292/?utm_campaign=1075292&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 27 Aug 2026 11:40:46 GMT</pubDate>
      <dc:creator><![CDATA[Bindus]]></dc:creator>
      
      <category><![CDATA[indexnow]]></category><category><![CDATA[node.js]]></category><category><![CDATA[индексация сайта]]></category><category><![CDATA[яндекс вебмастер]]></category><category><![CDATA[search console]]></category><category><![CDATA[undici]]></category><category><![CDATA[vercel]]></category><category><![CDATA[seo]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[SVG: почему иконка получает не тот размер]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1074956/</guid>
      <link>https://habr.com/ru/articles/1074956/?utm_campaign=1074956&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2c0/bf9/af3/2c0bf9af3c1bf2f47498665373b221de.png" /><p>После экспорта из Figma иконка 24×24 может оказаться в браузере крошечной, огромной или размытой. Обычно файл при этом исправен — просто разные части цепочки смотрят на разные параметры. Разбираем систему координат, viewBox, контракты и ловушки в React.</p> <a href="https://habr.com/ru/articles/1074956/?utm_campaign=1074956&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 26 Aug 2026 15:57:56 GMT</pubDate>
      <dc:creator><![CDATA[RomanRiaboshtan]]></dc:creator>
      
      <category><![CDATA[SVG]]></category><category><![CDATA[React]]></category><category><![CDATA[верстка]]></category><category><![CDATA[viewBox]]></category><category><![CDATA[фронтенд]]></category><category><![CDATA[дизайн-система]]></category><category><![CDATA[SVG в React]]></category><category><![CDATA[Figma]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как дизайнеру понять, что его вайб‑код не мусор: веб‑версия моей настолки с середины пути]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1073538/</guid>
      <link>https://habr.com/ru/articles/1073538/?utm_campaign=1073538&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a90/b47/1d2/a90b471d25177d4312004d0bd557cd2f.png" /><p>Два месяца назад мы взялись перенести в&nbsp;веб мою настольную игру. «Release любой ценой»&nbsp;— карточная игра про&nbsp;хаос IT‑разработки: собираешь релиз из&nbsp;Backend, Frontend и Database, соперники его валят, ты отбиваешься. Про&nbsp;саму настолку я <a href="https://habr.com/ru/articles/983284/" rel="noopener noreferrer nofollow">здесь уже писал</a>.</p><p>Нас в&nbsp;проекте трое: разработчик (ditayler), я (dimbo‑design, дизайнер) и Claude Code, через которого работаем оба. Ему досталась реализация логики игры и фундамент: монорепо, сеть, движок. Мне видимая часть: интерфейс, анимации, поведение карт, UX. Прочитать код я, в&nbsp;общем‑то, могу, а&nbsp;вот понять нет: моё ревью проходит на&nbsp;экране, как&nbsp;дизайн‑ревью.</p><p>Из&nbsp;этой конфигурации торчит неудобный вопрос. С&nbsp;моей стороны в&nbsp;проект постоянно едет код. Как&nbsp;убедиться, что&nbsp;туда не&nbsp;едет мусор, если прочитать его я не&nbsp;в&nbsp;состоянии? Ответ, на&nbsp;котором стоит проект: нестыковки должны всплывать сами&nbsp;— между договорённостью и кодом, между докой и реальностью. И сразу честно, чтобы не&nbsp;выглядело героическим строительством по&nbsp;ходу: большую часть этого фундамента разработчик задал ещё на&nbsp;старте, и именно фундамент работает. Что‑то доросло позже в&nbsp;моей зоне, за&nbsp;что‑то пришлось повоевать. Дальше эта система по&nbsp;частям, в&nbsp;порядке появления в&nbsp;проекте.</p> <a href="https://habr.com/ru/articles/1073538/?utm_campaign=1073538&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 26 Aug 2026 15:40:10 GMT</pubDate>
      <dc:creator><![CDATA[DimaDimbo]]></dc:creator>
      
      <category><![CDATA[release любой ценой]]></category><category><![CDATA[дизайн]]></category><category><![CDATA[анимация интерфейсов]]></category><category><![CDATA[настольная игра]]></category><category><![CDATA[дизайн-вайбкодинг]]></category><category><![CDATA[вайб-кодинг]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[документация для ии]]></category><category><![CDATA[дизайн-система]]></category><category><![CDATA[дизайн-токены]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Бенто‑тест, который проваливают агенты — стресс‑тест для интерфейса в японском стиле]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1073312/</guid>
      <link>https://habr.com/ru/articles/1073312/?utm_campaign=1073312&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5e5/b64/303/5e5b643032252a9adadbeb239febd67c.png" /><p>Работая над очередным проектом, я хотел сделать его визуально интересным. Работаю в соло от момента идеи до выкладки на продакшен. Я не разработчик, не верстальщик, не дизайнер, не бэкендер, не системный аналитик, но всё равно создаю свои продакшен-реди проекты. Я обычный пользователь нейро-агентов.</p><p>В этом есть своя прелесть и свои ограничения. С которыми я прямо столкнулся во время решения задачи. </p><p>Агент несколько раз писал «готово» или «да, теперь идеально!», но на экране оставались углы в воздухе, узкая колонка по центру и сетка вместо одной формы. По итогу у меня получился стресс-тест для моделей, с которыми они так и не справились.</p> <a href="https://habr.com/ru/articles/1073312/?utm_campaign=1073312&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 26 Aug 2026 06:30:12 GMT</pubDate>
      <dc:creator><![CDATA[Shenwell]]></dc:creator>
      
      <category><![CDATA[бенто-тест]]></category><category><![CDATA[дизайн интерфейсов]]></category><category><![CDATA[веб дизайн]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Значение поменялось, а экран нет: где Vue теряет реактивность и почему это не баг]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1072130/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1072130/?utm_campaign=1072130&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/41b/596/0eb/41b5960eb951fb82ff7f5112664bbb20.png" /><p>Состояние во&nbsp;Vue обновилось, а&nbsp;интерфейс остался прежним&nbsp;— и начинается охота на <code>watch</code>, <code>nextTick</code> и принудительный ререндер. Разберём, где именно рвётся реактивная связь, почему это происходит и как&nbsp;находить такие проблемы до&nbsp;того, как&nbsp;вокруг них вырастут костыли. </p> <a href="https://habr.com/ru/articles/1072130/?utm_campaign=1072130&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Понять Vue</a>]]></description>
      
      <pubDate>Tue, 25 Aug 2026 14:50:41 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[Vue.js]]></category><category><![CDATA[реактивность]]></category><category><![CDATA[ref]]></category><category><![CDATA[reactive]]></category><category><![CDATA[Composition API]]></category><category><![CDATA[watch]]></category><category><![CDATA[computed]]></category><category><![CDATA[shallowRef]]></category><category><![CDATA[markRaw]]></category><category><![CDATA[управление состоянием]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
