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

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

  <channel>
    <title><![CDATA[Все статьи подряд / JavaScript / Хабр]]></title>
    <link>https://habr.com/ru/hubs/javascript/articles/</link>
    <description><![CDATA[JavaScript – прототипно-ориентированный язык программирования]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Sat, 18 Jul 2026 22:48:55 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[FSD, Clean или modular? Шесть вариантов React-магазина под четырьмя изменениями]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1060256/</guid>
      <link>https://habr.com/ru/articles/1060256/?utm_campaign=1060256&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/40f/2a1/407/40f2a1407d51361d49ebe450283738e8.jpg" /><p>Мы вынесли компактную карточку банковской карты в <code>entities/card/ui</code>: маска номера, баланс и статус — решение казалось очевидным.</p><p>Через два спринта в карточке появились действия «заблокировать карту» и «изменить лимит». В итоге <code>entity</code> начала импортировать <code>features/block-card</code>, <code>features/change-card-limit</code> и проверку прав доступа мимо public API. Когда ту же карточку понадобилось показать в выборе счёта списания, вместе с ней приехали ненужные зависимости и проверки ролей.</p><p>Пользовательских инцидентов не случилось, но исправление отняло время. В <code>entity</code> оставили чистый <code>CardPreview</code>, сценарии подключили выше, композицию дашборда перенесли в <code>widgets/card-summary</code>, затем заново прогнали ролевые тесты.</p><p>После этого на ревью мы стали обсуждать имя папки ближе к концу разговора. Сначала отвечали на другой вопрос:</p><p><strong>Какие будущие изменения выбранная граница позволит оставить локальными?</strong></p><p>В <a href="https://feature-sliced.design/docs/guides/migration/from-v2-0" rel="noopener noreferrer nofollow">FSD 2.1</a> для подобных ситуаций рекомендуют начинать со страниц и извлекать код ниже по мере появления переиспользования. Это хороший вариант по умолчанию, хотя самостоятельный сценарий с близким вторым потребителем иногда оправдывает границу раньше.</p> <a href="https://habr.com/ru/articles/1060256/?utm_campaign=1060256&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 18 Jul 2026 10:23:28 GMT</pubDate>
      <dc:creator><![CDATA[Viktoriko]]></dc:creator>
      
      <category><![CDATA[React]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[архитектура фронтенда]]></category><category><![CDATA[Feature-Sliced Design]]></category><category><![CDATA[FSD]]></category><category><![CDATA[Clean Architecture]]></category><category><![CDATA[модульная архитектура]]></category><category><![CDATA[масштабирование приложений]]></category><category><![CDATA[границы модулей]]></category><category><![CDATA[рефакторинг]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[DI-контейнер на чистом JavaScript без TypeScript и reflect-metadata]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1060340/</guid>
      <link>https://habr.com/ru/articles/1060340/?utm_campaign=1060340&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/343/b91/ec7/343b91ec72df142cadc4528a675d199f.webp" /><p>В статье разберем, как собрать простой DI-контейнер на чистом JavaScript без TypeScript, декораторов и <code>reflect-metadata</code>. Заодно посмотрим, как применить его в небольшом DDD-примере с корзиной, репозиторием, скидками и разными lifetime зависимостей.  </p> <a href="https://habr.com/ru/articles/1060340/?utm_campaign=1060340&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать</a>]]></description>
      
      <pubDate>Fri, 17 Jul 2026 16:42:19 GMT</pubDate>
      <dc:creator><![CDATA[alexander_kubarski]]></dc:creator>
      
      <category><![CDATA[reflect-metadata]]></category><category><![CDATA[javascript]]></category><category><![CDATA[di]]></category><category><![CDATA[dependency injection]]></category><category><![CDATA[dependency inversion]]></category><category><![CDATA[ddd]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Установщик на Go Wails: Полный гайд. Своя self-hosted двухсерверная VPN-архитектура: ЧАСТЬ 3]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1060336/</guid>
      <link>https://habr.com/ru/articles/1060336/?utm_campaign=1060336&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/718/e53/85d/718e5385d263b039d1d7f13b325725e4.jpg" /><p>Повествование будет идти таким образом: описание архитектуры в целом, потом код по страницам с картинками как это все выглядит. В отличие от черновика, в этом материале отображен весь рабочий код без сокращений с разбором каждой из страниц.</p><p>В Wails основными файлами, с которыми проходит 90% работы это <code>index.html</code>, <code>styles.css</code>, <code>main.js</code>, <code>app.go</code>. Остальные файлы мы либо не трогаем, либо настраиваем один раз в самом начале.</p><p>Для фронтенда я использовал стандартный html, css, js без современных фреймворков (так как я в них не разбираюсь). Frontend часть подробно рассматривать в этой статье не планируется, a html будет использоваться только чтобы показать, где используются js функции.</p> <a href="https://habr.com/ru/articles/1060336/?utm_campaign=1060336&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 17 Jul 2026 16:37:47 GMT</pubDate>
      <dc:creator><![CDATA[ITsuperiorRF]]></dc:creator>
      
      <category><![CDATA[html]]></category><category><![CDATA[css]]></category><category><![CDATA[go]]></category><category><![CDATA[javascript]]></category><category><![CDATA[wails]]></category><category><![CDATA[автоматизация]]></category><category><![CDATA[системное администрирование]]></category><category><![CDATA[приложение]]></category><category><![CDATA[self-hosted]]></category><category><![CDATA[установка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Зачем учить бинарный поиск, если платят за покраску кнопок]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/domclick/articles/1055404/</guid>
      <link>https://habr.com/ru/companies/domclick/articles/1055404/?utm_campaign=1055404&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/644/0d2/839/6440d28395ef3e610c9ec1b5036ab8d8.png" /><p>Привет, Хабр!</p><p>Среди разработчиков уже давно идёт спор: действительно ли нужны алгоритмы в повседневной разработке, или это исключительно сухая теория для прохождения собеседований? Вот и я решил вступить в спор.</p><p>Когда я только начинал карьеру во фронтенд-разработке, то постоянно задавался вопросами: «Зачем на интервью просят обходить граф, если на работе я просто правлю CSS-отступы?» или «Зачем мне знать сложность O(N), если вёрстка всё равно ломается в Safari?» С развитием ИИ подобные вопросы стали звучать ещё громче: «Зачем мне вообще думать, если агент напишет этот цикл за меня?»</p><p>Однако по мере прокачки в алгоритмических задачах я стал замечать их применение в реальной разработке, где задача сводилась к чему-то более сложному, чем выравнивание <code>div</code> по вертикали. Я научился проектировать более лаконичные реализации бизнес-фич, стал быстрее находить узкие места, убивающие производительность, и, самое главное, обрёл уверенность в собственных действиях.</p> <a href="https://habr.com/ru/articles/1055404/?utm_campaign=1055404&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 16 Jul 2026 08:00:33 GMT</pubDate>
      <dc:creator><![CDATA[aatrishin (Домклик)]]></dc:creator>
      
      <category><![CDATA[frontend]]></category><category><![CDATA[производительность приложений]]></category><category><![CDATA[алгоритмы]]></category><category><![CDATA[оптимизация кода]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[pkg-cache — простой локальный кеш пакетов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1059574/</guid>
      <link>https://habr.com/ru/articles/1059574/?utm_campaign=1059574&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e10/7ba/7d6/e107ba7d65901d0b1eec0325fd8541c2.png" /><p>Пример реализации простого кэширующего прокси для пакетов npm, composer и pip на базе node.js для Windows и Linux.</p> <a href="https://habr.com/ru/articles/1059574/?utm_campaign=1059574&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 15 Jul 2026 16:08:47 GMT</pubDate>
      <dc:creator><![CDATA[agb2008]]></dc:creator>
      
      <category><![CDATA[кеширующий прокси]]></category><category><![CDATA[npm-пакеты]]></category><category><![CDATA[composer пакеты]]></category><category><![CDATA[pip]]></category><category><![CDATA[разработка программного обеспечения]]></category><category><![CDATA[offline]]></category><category><![CDATA[оптимизация рабочего времени]]></category><category><![CDATA[node.js]]></category><category><![CDATA[opencode]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Автоматизация с использованием сервисов Google или что попробовать вечером]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1059496/</guid>
      <link>https://habr.com/ru/articles/1059496/?utm_campaign=1059496&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/061/8e2/659/0618e265937d59f96fe6b0cf81eaeb02.jpg" /><p>Как&nbsp;с помощью <strong>бесплатных</strong> инструментов Google создать <strong>систему анализа</strong> данных: от&nbsp;сбора ответов в&nbsp;форме до&nbsp;визуализации на&nbsp;сайте. В&nbsp;качестве примера разберем исследование туристических предпочтений и настроим автоматическую отправку письма при&nbsp;достижении цели. </p> <a href="https://habr.com/ru/articles/1059496/?utm_campaign=1059496&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 15 Jul 2026 13:22:07 GMT</pubDate>
      <dc:creator><![CDATA[ITo_sun]]></dc:creator>
      
      <category><![CDATA[google apps script]]></category><category><![CDATA[google forms]]></category><category><![CDATA[google sheets]]></category><category><![CDATA[google sites]]></category><category><![CDATA[автоматизация]]></category><category><![CDATA[дашборд]]></category><category><![CDATA[сводные таблицы]]></category><category><![CDATA[триггеры]]></category><category><![CDATA[визуализация данных]]></category><category><![CDATA[travel]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Point0 — простой, как tRPC, полноценный фулстек-фреймворк]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1059310/</guid>
      <link>https://habr.com/ru/articles/1059310/?utm_campaign=1059310&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5cb/b1a/feb/5cbb1afeb2d59ebb4f955ab5486d13f0.png" /><p>Хочу сравнить фреймворк Point0 и библиотеку tRPC. Делаю это, потому что квери и мутации в Point0 очень похожи по DX на tRPC, но более удобны ввиду того, что всё же Point0 это фреймворк и он может обладать возможностями, которыми библиотека не может:</p><p>Объявлять квери вместе с серверным кодом прямо в клиентских файлах, или наоборот</p><p>Автоматически гидрировать и дегидрировать квери клиент при включении SSR</p><p>В мутациях отправлять файлы автоматически превращая данные в FormData и обратно</p><p>Иметь стабильные индивидуальные урлы для квери и мутаций</p><p>Не заставлять зависать редактор кода при увеличении количества эндпоинтов</p><p>Возвращать в ответах с сервера на клиент целые серверные компоненты или интерактивные острова</p><p>Управлять внешним видом состояний загрузки на страницах и в компонентах</p><p>Кроме того, что описано в этой статье, Point0 может много чего ещё, но об этом в других статьях. Сейчас фокусируемся на сравнении с tRPC. Предполагается, что вы с tRPC более менее знакомы, но ниже я всё равно буду показывать примеры реализации на tRPC, чтобы сравнения были видимыми.</p> <a href="https://habr.com/ru/articles/1059310/?utm_campaign=1059310&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 15 Jul 2026 07:50:07 GMT</pubDate>
      <dc:creator><![CDATA[1gr14]]></dc:creator>
      
      <category><![CDATA[Point0]]></category><category><![CDATA[tRPC]]></category><category><![CDATA[react]]></category><category><![CDATA[typescript]]></category><category><![CDATA[bun]]></category><category><![CDATA[framework]]></category><category><![CDATA[webdevelopment]]></category><category><![CDATA[api]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Просто дайте мне ввести цифры]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1059166/</guid>
      <link>https://habr.com/ru/articles/1059166/?utm_campaign=1059166&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a07/75f/4e5/a0775f4e5a3c7c62132fb3019edbb4ff.png" /><p>Цифровая идентификация и её значение для веба в последние годы стали темой горячих обсуждений. Они привнесли с собой множество спорных моментов: законы о проверке возраста и их <a href="https://www.eff.org/deeplinks/2025/12/age-verification-coming-internet-we-built-you-resource-hub-fight-back" rel="noopener noreferrer nofollow">влияние на онлайн-анонимность</a>; Википедия потенциально будет вынуждена <a href="https://wikimediafoundation.org/news/2025/09/12/wikimedia-foundation-challenges-uk-online-safety-act-regulations/" rel="noopener noreferrer nofollow">верифицировать в Великобритании личность пользователей</a>; привязка к официальным операционным системам iOS и Android стала обязательным форм-фактором для <a href="https://github.com/eu-digital-identity-wallet/eudi-app-android-wallet-ui/issues/287" rel="noopener noreferrer nofollow">кошельков цифровой идентификации</a>; кроме того, стоит упомянуть ситуацию, когда американские цифровые аккаунты <a href="https://www.theguardian.com/law/2026/feb/18/international-criminal-court-icc-judges-trump-sanctions" rel="noopener noreferrer nofollow">были закрыты потому, что их пользователь был судьёй Международного уголовного суда</a>.</p><p>В своей истории я расскажу о швейцарской правительственной системе идентификации <a href="https://www.agov.admin.ch/en" rel="noopener noreferrer nofollow">AGOV</a>. Этот развёрнутый в 2024 году сервис сегодня насчитывает <a href="https://www.agov.admin.ch/en/agov-statse-2026-04" rel="noopener noreferrer nofollow">1,6 миллиона аккаунтов</a>&nbsp;и становится всё более необходимым: через него можно получать пособие по безработице, предоставлять налоговую декларацию (а это обязательное действие!) и выполнять множество других операций. В кантоне Цюрих это единственная возможность <a href="https://www.zh.ch/de/migration-integration/einbuergerung/ordentliche-einbuergerung.html" rel="noopener noreferrer nofollow">подачи заявления на гражданство</a>.</p><p>В конечном итоге, я был вынужден создать аккаунт AGOV. К сожалению, его регистрация была довольно сложной задачей, пока я не нашёл причины странного бага accessibility. Вдохновившись статьёй <a href="https://aartaka.me/select-text.html" rel="noopener noreferrer nofollow">«Просто дайте мне выделить текст»</a>, хочу представить вашему вниманию «Просто дайте мне ввести цифры».</p> <a href="https://habr.com/ru/articles/1059166/?utm_campaign=1059166&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 15 Jul 2026 05:56:41 GMT</pubDate>
      <dc:creator><![CDATA[PatientZero]]></dc:creator>
      
      <category>государственные сервисы</category><category>идентификация личности</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Простой способ запускать доверенный пользовательский JavaScript в Node.js]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1059208/</guid>
      <link>https://habr.com/ru/articles/1059208/?utm_campaign=1059208&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/fbc/5f1/c11/fbc5f1c11fae117871170a8f1fcd9d89.webp" /><p>Недавно я опубликовал большую обзорную статью о том, как несколько лет развиваю свой пет-проект, который постепенно превратился в собственную Function-as-a-Service платформу. Она позволяет принимать пользовательский JavaScript, Python или Go, запускать его в изолированном окружении и управлять такими функциями почти как в небольшом облаке. </p><p>В этот раз я хочу разобрать более узкую тему и рассказать, с чего вообще начинались мои эксперименты с выполнением пользовательского JavaScript в Node.js. Мы посмотрим на самые простые встроенные инструменты, а также проверим, способен ли V8 оптимизировать код, созданный динамически во время работы приложения.</p> <a href="https://habr.com/ru/articles/1059208/?utm_campaign=1059208&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Погрузиться</a>]]></description>
      
      <pubDate>Tue, 14 Jul 2026 20:12:58 GMT</pubDate>
      <dc:creator><![CDATA[alexander_kubarski]]></dc:creator>
      
      <category><![CDATA[node.js]]></category><category><![CDATA[javascript]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[OpenIDE Pro: публичный релиз для всех! Java, Kotlin, Go, TypeScript, Python, PHP и DB-клиент в одном дистрибутиве]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/haulmont/articles/1058604/</guid>
      <link>https://habr.com/ru/companies/haulmont/articles/1058604/?utm_campaign=1058604&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/4dc/3a7/99f/4dc3a799f6a65c08a4953d377e5535bf.png" /><p>Прошло больше года с момента публичного релиза первой версии OpenIDE. Сейчас ею пользуются на постоянной основе десятки тысяч разработчиков в сотнях российских компаний.</p><p>И практически с самого первого дня к нам начали обращаться крупные компании, не с просьбой добавить фичу, а с предложением заплатить. Потому что когда организация всерьёз рассматривает IDE для команды в несколько сотен человек, ей важно знать: есть договор, есть SLA, есть кто-то, кто несёт ответственность и завтра никуда не денется. Бесплатный open-source продукт эту уверенность не даёт сам по себе, как бы качественно он ни был сделан.</p><p>И несмотря на то, что изначально запрос шёл со стороны компаний, мы не хотели делать продукт для галочки. Мы постарались закрыть большинство сценариев использования IDE разработчиками самых разных стеков.</p><p>Так появилась OpenIDE Pro.</p> <a href="https://habr.com/ru/articles/1058604/?utm_campaign=1058604&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 14 Jul 2026 12:19:49 GMT</pubDate>
      <dc:creator><![CDATA[honest_niceman (Haulmont)]]></dc:creator>
      
      <category><![CDATA[OpenIDE Pro]]></category><category><![CDATA[российская IDE]]></category><category><![CDATA[IDE для Java]]></category><category><![CDATA[IDE для Kotlin]]></category><category><![CDATA[IDE для Go]]></category><category><![CDATA[IDE для Python]]></category><category><![CDATA[IDE для TypeScript]]></category><category><![CDATA[IDE для PHP]]></category><category><![CDATA[IDE для Spring]]></category><category><![CDATA[IDE с клиентом баз данных]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Веб-портфолио с управлением жестами через камеру: полевой дневник]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058358/</guid>
      <link>https://habr.com/ru/articles/1058358/?utm_campaign=1058358&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/892/8be/a27/8928bea271889ac503611ee4919237c0.jpg" /><p>Я продуктовый дизайнер. И мне захотелось поэкспериментировать: можно ли уже сейчас сделать полноценное управление сайтом с помощью жестов. Да и ИИшки уже стали достаточно мощными. Так родился этот эксперимент. Для контента взял свое портфолио.</p><p>Получилось вот что. Страница встречает полем из частиц. Разрешаешь камеру, и частицы собираются в твоё объёмное отражение. Разделы висят вокруг силуэта и открываются рукой: наводишь палец, пункт заполняется и раскрывается. Текст листается щипком, фотографии берутся в кулак и растягиваются двумя руками. Дизайн при этом намеренно тихий: монохром, костяная типографика на чёрном, единственный цвет живёт внутри 3D-формы. Вся выразительность отдана взаимодействию.</p><p>Дальше — грабли по порядку наступания.</p> <a href="https://habr.com/ru/articles/1058358/?utm_campaign=1058358&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 14 Jul 2026 10:49:24 GMT</pubDate>
      <dc:creator><![CDATA[DimaDimbo]]></dc:creator>
      
      <category><![CDATA[жесты]]></category><category><![CDATA[mediapipe]]></category><category><![CDATA[webgpu]]></category><category><![CDATA[transformers.js]]></category><category><![CDATA[three.js]]></category><category><![CDATA[вебкамера]]></category><category><![CDATA[депт-карта]]></category><category><![CDATA[claude code]]></category><category><![CDATA[design]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[WebAssembly (WASM) — не серебряная пуля]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058984/</guid>
      <link>https://habr.com/ru/articles/1058984/?utm_campaign=1058984&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>WebAssembly появился для браузерных задач как способ исполнять тяжелый код быстрее,&nbsp;чем это делает JavaScript.&nbsp;Но за последние годы он начал выходить далеко&nbsp;(иногда&nbsp;<a href="https://t.me/prowasm/16" rel="noopener noreferrer nofollow">буквально далеко</a>)&nbsp;за пределы вкладки браузера:&nbsp;серверы,&nbsp;edge-вычисления,&nbsp;плагины,&nbsp;песочницы.&nbsp;Появились рантаймы&nbsp;Wasmtime,&nbsp;WasmEdge,&nbsp;Wasmer,&nbsp;которые исполняют WASM-модули\компоненты прямо на ОС.&nbsp;Звучит красиво -&nbsp;собрал один бинарь,&nbsp;а запускаешь где угодно,&nbsp;да еще и в максимальной изоляции.</p><p>Но есть интересное наблюдение.&nbsp;Существуют проекты,&nbsp;которые строили свои виртуальные машины на WASM,&nbsp;но&nbsp;<a href="https://wiki.polkadot.com/learn/learn-smart-contracts/#smart-contracts-on-polkadot" rel="noopener noreferrer nofollow">отказались</a>&nbsp;от&nbsp;него.&nbsp;Самый заметный пример&nbsp;-&nbsp;это&nbsp;<a href="https://polkadot.com/" rel="noopener noreferrer nofollow">Polkadot</a>.&nbsp;Они спроектировали&nbsp;собственную&nbsp;<a href="https://github.com/paritytech/polkavm" rel="noopener noreferrer nofollow">PolkaVM</a>&nbsp;на базе набора инструкций RISC-V и&nbsp;переключили исполнительный слой смарт-контрактов на нее&nbsp;(при этом сам runtime Polkadot по-прежнему&nbsp;компилируется в WASM).&nbsp;Если WASM настолько хорош,&nbsp;как заявляется,&nbsp;то почему для нового движка&nbsp;выбрали не его,&nbsp;а регистровую машину?</p><p>Недавно в одном из тематических чатов разгорелась жаркая дискуссия на этот счет,&nbsp;что,&nbsp;собственно&nbsp;говоря,&nbsp;и побудило меня на написание этой статьи.&nbsp;Если тебе интересны такие&nbsp;темы&nbsp;-&nbsp;<a href="https://t.me/prowasm" rel="noopener noreferrer nofollow">добро пожаловать</a>&nbsp;к нам)</p><p>Давайте попробуем разобраться,&nbsp;чем стековая модель отличается от регистровой и где эта разница&nbsp;реально что-то меняет.&nbsp;А также рассмотрим,&nbsp;где же в WASM скрыты компромиссы.</p> <a href="https://habr.com/ru/articles/1058984/?utm_campaign=1058984&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 14 Jul 2026 10:32:19 GMT</pubDate>
      <dc:creator><![CDATA[rudikone]]></dc:creator>
      
      <category><![CDATA[wasm]]></category><category><![CDATA[webassembly]]></category><category><![CDATA[wasi]]></category><category><![CDATA[component model]]></category><category><![CDATA[компиляция]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[регистры]]></category><category><![CDATA[lua]]></category><category><![CDATA[стек]]></category><category><![CDATA[виртуальная машина]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Redux никогда не работал в React]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058110/</guid>
      <link>https://habr.com/ru/articles/1058110/?utm_campaign=1058110&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/684/7fc/8f4/6847fc8f495946f57ded25ac3d9dc0de.jpg" /><p>потому что нельзя просто взять redux и начать использовать в React. Необходима некая «react-redux» библиотека. А в чём тогда смысл талдычить, что «Redux works with any UI layer»?</p> <a href="https://habr.com/ru/articles/1058110/?utm_campaign=1058110&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 14 Jul 2026 04:56:12 GMT</pubDate>
      <dc:creator><![CDATA[AlekseiVolkov]]></dc:creator>
      
      <category><![CDATA[eactjs]]></category><category><![CDATA[redux]]></category><category><![CDATA[react-redux]]></category><category><![CDATA[конечный автомат]]></category><category><![CDATA[state management]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Виртуальные Scroll-контейнеры]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058678/</guid>
      <link>https://habr.com/ru/articles/1058678/?utm_campaign=1058678&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/eee/bbb/257/eeebbb257d01e72cf4d3c97e1eaa3091.png" /><p>Всем привет, на этот раз хочу провести обзор инструмента <a href="https://%D0%92%D1%81%D0%B5%D0%BC%20%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82,%20%D0%BD%D0%B0%20%D1%8D%D1%82%D0%BE%D1%82%20%D1%80%D0%B0%D0%B7%20%D1%85%D0%BE%D1%87%D1%83%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%81%D1%82%D0%B8%20%D0%BE%D0%B1%D0%B7%D0%BE%D1%80%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20ng-virtual-scroll-view." rel="noopener noreferrer nofollow">ng-virtual-scroll-view</a>.</p><p>В предыдущей <a href="https://habr.com/ru/articles/1045454/" rel="noopener noreferrer nofollow">статье</a> я делал обзор на универсальные <a href="https://github.com/DjonnyX/ng-virtual-list" rel="noopener noreferrer nofollow">виртуализированнные списки</a>, которые "под капотом" использовали одноосевой виртуальный <strong>scroll-контейнер</strong>. Из проекта <a href="https://github.com/DjonnyX/ng-virtual-list" rel="noopener noreferrer nofollow">ng-virtual-list</a> решил вырастить ещё один инструмент, двухосевой виртуальный scroll-контейнер <a href="https://github.com/DjonnyX/ng-virtual-scroll-view" rel="noopener noreferrer nofollow">ng-virtual-scroll-view</a>. Инструмент также поддерживает версии Angular с 14 по 22. </p><p>С API и примерами использования можно ознакомиться в <a href="https://ng-virtual-scroll-view.eugene-grebennikov.pro/" rel="noopener noreferrer nofollow">документации</a>.</p> <a href="https://habr.com/ru/articles/1058678/?utm_campaign=1058678&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Jul 2026 14:03:07 GMT</pubDate>
      <dc:creator><![CDATA[djonnyx]]></dc:creator>
      
      <category><![CDATA[Виртуальный]]></category><category><![CDATA[scroll]]></category><category><![CDATA[контейнер]]></category><category><![CDATA[прокрутка]]></category><category><![CDATA[angular]]></category><category><![CDATA[ng-virtual-scroll-view]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Особенности альфа-распада плутония-239 в Антарктиде]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058628/</guid>
      <link>https://habr.com/ru/articles/1058628/?utm_campaign=1058628&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5b4/721/90d/5b472190dea8a41e8a4cfb492980e652.png" /><p>В начале этого века сотрудниками лаборатории С.Э.Шноля (ИТЭБ РАН) совместно с Арктическим и антарктическим НИИ РАН на станции Новолазаревская в Антарктиде была организована посекундная регистрация альфа-распада плутония-239. Получаемые с 2001 по 2010 год кремниевыми счётчиками данные записывались в файлы, суммарный объём которых составил около 1 Гб. Задачей этого продолжительного эксперимента было доказательство влияния космофизических факторов на альфа-распад, которое могло проявляться в виде суточных, месячных и годовых циклов. Подобная цикличность противоречит давно устоявшимся воззрениям на случайный характер радиоактивности, поэтому антарктические данные не помогли С.Э.Шнолю (1930 - 2021) поколебать эти воззрения. Но он искал (и находил) закономерности в повторении формы поминутных гистограмм альфа-распада, а это не самый наглядный способ их демонстрации. Намного проще просто понаблюдать за интенсивностью альфа-распада. Причём иногда изменения этой интенсивности имеют довольно странный характер, который невозможно объяснить колебаниями температуры, атмосферного давления, сетевого напряжения, грозовыми разрядами и наводками от ближайших научных приборов и бытовой техники.</p> <a href="https://habr.com/ru/articles/1058628/?utm_campaign=1058628&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Jul 2026 12:33:43 GMT</pubDate>
      <dc:creator><![CDATA[genseq]]></dc:creator>
      
      <category><![CDATA[радиоактивность]]></category><category><![CDATA[альфа-распад]]></category><category><![CDATA[астрономия и все что с ней связано.]]></category><category><![CDATA[помехи]]></category><category><![CDATA[аномалии]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[TypeScript 7 перенесли на Go. Проверяем, действительно ли он быстрее в десять раз]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1057640/</guid>
      <link>https://habr.com/ru/articles/1057640/?utm_campaign=1057640&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/f18/a06/3dd/f18a063dd19aee8254d0d93149916fe7.png" /><p>Есть одно предложение, которое за последние месяцы перепечатали, кажется, все. Вот оно, в переводе с блога TypeScript:</p><p>📣 <strong>Заявка.</strong> «Проверка типов проекта VS Code (около 1,5 млн строк) ускорилась с 77.8 с до 7.5 с». Итог, который команда вынесла в заголовок, — <strong>«примерно в 10 раз быстрее»</strong>.</p><p>Это не обзор релиза. Это попытка <strong>воспроизвести один график</strong> — не на кодовой базе Microsoft, а на монорепо, которое я собрал специально под замер, двумя компиляторами на одной машине, с показом каждой цифры и с репозиторием, где любую из них можно получить командой <code>pnpm bench</code>.</p><p>Сразу спойлер: <strong>да, TS7 быстрее, и заметно. Но „в десять раз“ живёт в одном конкретном месте, испаряется в другом, а кое-что важное в 7.0 пока не вошло — и это „кое-что“ важнее скорости.</strong></p><p>Главная мысль:</p><p><strong>«10×» — это про чекер на большом проекте, а не про весь ваш день.</strong> TS7 радикально ускоряет проверку типов и режет память, и замеры это подтверждают. Но в 7.0 отсутствует стабильный программный API — а с ним из сборки выпадают кастомные трансформеры, tsserver-плагины и типизированный линтинг. Поэтому вопрос миграции — не «стало ли быстрее», а «завязана ли <strong>ваша</strong> сборка на этот API».</p> <a href="https://habr.com/ru/articles/1057640/?utm_campaign=1057640&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Jul 2026 10:17:58 GMT</pubDate>
      <dc:creator><![CDATA[Viktoriko]]></dc:creator>
      
      <category><![CDATA[TypeScript 7]]></category><category><![CDATA[TypeScript Go]]></category><category><![CDATA[TypeScript Compiler]]></category><category><![CDATA[tsc]]></category><category><![CDATA[Compiler API]]></category><category><![CDATA[TypeScript performance]]></category><category><![CDATA[benchmark]]></category><category><![CDATA[monorepo]]></category><category><![CDATA[typecheck]]></category><category><![CDATA[frontend tooling]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Про то, как я оцифровал себя без ИИ, чтобы стать видеоблогером]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058470/</guid>
      <link>https://habr.com/ru/articles/1058470/?utm_campaign=1058470&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/fa8/4d4/1bb/fa84d41bb300ffc9d1bc3000cac2289d.jpg" /><p>История про&nbsp;то, как&nbsp;я сделал себе виртуального аватара для&nbsp;коротких видео&nbsp;— без&nbsp;генерации видео через ИИ.</p><p>Задача&nbsp;была простая: превратить свои текстовые заметки в&nbsp;вертикальные ролики, не&nbsp;садиться перед камерой и не&nbsp;тратить день на&nbsp;монтаж каждого выпуска.</p><p>В&nbsp;итоге получилась самодельная полуавтоматическая DIY‑система:</p><p>— универсальные графические ассеты персонажа<br>— ручная озвучка моим голосом<br>— разметка фраз в&nbsp;аудио через Audacity<br>— текстовый сценарий с&nbsp;управляющими тегами для&nbsp;событий в&nbsp;ролике<br>— кастомный JSX‑плагин для&nbsp;After Effects</p><p>Система берёт сценарий с&nbsp;управляющими тегами, аудиодорожку с&nbsp;голосом и файл разметки, после чего собирает заготовку ролика: аватар,&nbsp;липсинк, мимику, субтитры и слайды.</p><p>В&nbsp;статье показываю, как&nbsp;всё устроено, немного логики кода, почему первая версия попала в&nbsp;зловещую долину, что&nbsp;удалось автоматизировать, а&nbsp;что&nbsp;всё ещё приходится доводить руками.</p><p>В&nbsp;конце&nbsp;— немного статистики по&nbsp;первым трём роликам, запущенным с&nbsp;нулевых аккаунтов: YouTube, Instagram, TikTok и ВК.</p> <a href="https://habr.com/ru/articles/1058470/?utm_campaign=1058470&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Jul 2026 09:07:23 GMT</pubDate>
      <dc:creator><![CDATA[oe_2108]]></dc:creator>
      
      <category><![CDATA[after effects]]></category><category><![CDATA[photoshop]]></category><category><![CDATA[javascript]]></category><category><![CDATA[скриптинг]]></category><category><![CDATA[аватар]]></category><category><![CDATA[блогосфера]]></category><category><![CDATA[блогеры]]></category><category><![CDATA[создание приложения]]></category><category><![CDATA[создание проекта]]></category><category><![CDATA[цифровизация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[TAMA-90: тамагочи из 90-х своими руками на JavaScript]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/ruvds/articles/1057138/</guid>
      <link>https://habr.com/ru/companies/ruvds/articles/1057138/?utm_campaign=1057138&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/285/bf7/864/285bf7864e88b4c6036b9e26908d6b5a.png" /><p>До момента, когда я сел писать эту статью, я вообще не понимал, что такое тамагочи. Нет, не в смысле «никогда не слышал» — конечно, слышал и видел (не вживую, через экран). Где-то на уровне культурного шума это слово всплывало регулярно в американских фильмах или сериалах, где герой с придыханием вспоминает игрушку детства и рассказывает, как ему это нравилось. Ярче всего у меня в памяти отпечаталась сцена из знаменитого детективного сериала «Менталист»: Патрик Джейн с неизменной полуулыбкой вручает коллеге тамагочи, и тот, взрослый серьёзный мужик (не очень серьёзный на вид, но в момент моего просмотра все взрослые люди серьёзные), вдруг расплывается: «О боже, у меня в детстве такой был! Я их обожал! Как ты узнал!» и т. д.</p><p>Раньше я реагировал на такие моменты как на упоминание Game Boy или Dendy: «ну да, старая штука, скорее всего, что-то похожее на Game Boy, который мне был понятен на то время», и я думал: «кому-то дорога как воспоминание, но мне-то чего с того, игрушка есть игрушка». Но сейчас в какой-то момент мне стало понятно, что если об этой игрушке говорят до сих пор, если она пережила три десятилетия и кучу переосмыслений — значит, там внутри что-то большее, и надо посмотреть, что это и как работает.</p><p>Так я и сделал. И для начала — немного истории, потому что без неё нет смысла вспоминать и описывать старые вещи (всё, что больше 10 лет назад, уже старое, поэтому, надеюсь, без обид xd).</p> <a href="https://habr.com/ru/articles/1057138/?utm_campaign=1057138&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Jul 2026 09:01:52 GMT</pubDate>
      <dc:creator><![CDATA[Laborant_Code (RUVDS.com)]]></dc:creator>
      
      <category><![CDATA[тамагочи]]></category><category><![CDATA[Canvas]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[пиксель-арт]]></category><category><![CDATA[ретро-игры]]></category><category><![CDATA[геймдев]]></category><category><![CDATA[Web Audio API]]></category><category><![CDATA[камень-ножницы-бумага]]></category><category><![CDATA[виртуальный питомец]]></category><category><![CDATA[ruvds_статьи]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Жизненный цикл API-токенов: От генерации до компрометации]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058318/</guid>
      <link>https://habr.com/ru/articles/1058318/?utm_campaign=1058318&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/632/e59/4fc/632e594fcb8a40c667abb3985ba8c698.png" /><p>JWT не защищает от кражи. Подпись гарантирует, что токен не подделан, но не мешает злоумышленнику использовать его, если тот оказался в чужих руках. В 2026 году утечки токенов через XSS, логи и CDN-атаки входят в тройку самых частых векторов компрометации, а медианное время обнаружения такой кражи составляет 43 дня.</p><p>В этой статье разбираем полный жизненный цикл токена — от выдачи до отзыва. Сравниваем хранение в&nbsp;<code>localStorage</code>,&nbsp;<code>HttpOnly</code>-куках и BFF-прослойке. Объясняем, почему Refresh Token Rotation — это must-have, а не опция, и как детектировать кражу еще до того, как злоумышленник успеет навредить.</p> <a href="https://habr.com/ru/articles/1058318/?utm_campaign=1058318&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Jul 2026 05:00:49 GMT</pubDate>
      <dc:creator><![CDATA[Buccanier]]></dc:creator>
      
      <category><![CDATA[jwt]]></category><category><![CDATA[jwt token]]></category><category><![CDATA[jwt auth]]></category><category><![CDATA[jwt authentication]]></category><category><![CDATA[appsec]]></category><category><![CDATA[security]]></category><category><![CDATA[frontend]]></category><category><![CDATA[front-end]]></category><category><![CDATA[front-end разработка]]></category><category><![CDATA[frontend-разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Детектор копипасты для TypeScript, Vue, Svelte и Angular]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058364/</guid>
      <link>https://habr.com/ru/articles/1058364/?utm_campaign=1058364&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/938/d02/bdb/938d02bdb1f848801aab2137f8cbcc5c.jpg" /><p>Копипаста редко выглядит как копипаста. После переименования переменных, строк и чисел два одинаковых блока спокойно проходят ревью как разный код. Я написал clone-alert, чтобы находить такие совпадения в TypeScript, JavaScript и шаблонах Vue, Svelte и Angular.</p> <a href="https://habr.com/ru/articles/1058364/?utm_campaign=1058364&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 12 Jul 2026 21:47:17 GMT</pubDate>
      <dc:creator><![CDATA[BaryshevRS]]></dc:creator>
      
      <category><![CDATA[typescript]]></category><category><![CDATA[javascript]]></category><category><![CDATA[angular]]></category><category><![CDATA[vue]]></category><category><![CDATA[svelte]]></category><category><![CDATA[react]]></category><category><![CDATA[pmd]]></category><category><![CDATA[копипаста]]></category><category><![CDATA[дублирование кода]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я строю и строю и строю свой продукт. И что уже вышло]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058356/</guid>
      <link>https://habr.com/ru/articles/1058356/?utm_campaign=1058356&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/7f2/7e4/953/7f27e495319d4ce6d3d5cc04316e6dc9.webp" /><p>Если честно, то не ожидал, что просто обзорная статья выйдет такой огромной, самому было лень ее перечитывать, чтобы отредактировать. <br>Кому интересно узнать, чем я занимаюст по вечерам, можете посмотреть в самом конце статьи. Получилось "водянисто", но хотелось описать, чем я занимаюсь, поделиться с такими же людьми со "стартаперством" головного мозга, найти единомыленников.</p> <a href="https://habr.com/ru/articles/1058356/?utm_campaign=1058356&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Погрузиться</a>]]></description>
      
      <pubDate>Sun, 12 Jul 2026 19:21:44 GMT</pubDate>
      <dc:creator><![CDATA[alexander_kubarski]]></dc:creator>
      
      <category><![CDATA[старпат]]></category><category><![CDATA[saas]]></category><category><![CDATA[технологии]]></category><category><![CDATA[javascript]]></category><category><![CDATA[python]]></category><category><![CDATA[go]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Локализация уже скомпилированных React компонентов в node_modules]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058286/</guid>
      <link>https://habr.com/ru/articles/1058286/?utm_campaign=1058286&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/b98/677/230/b986772308d0debb14f95f750e5904c3.png" /><p>🇧🇷 🇨🇳 🇮🇳 <strong>Локализуем React не трогая код компонентов</strong></p><p>React-компоненты из <code>node_modules</code> уже скомпилированы, поэтому внедрить <code>react-i18next</code> в них обычно невозможно без форка библиотеки. В статье показываю, как перехватить все вызовы <code>jsx/jsxs</code> через кастомный <code>react/jsx-runtime</code> и автоматически локализовать текст даже внутри уже собранных компонентов, не меняя их исходный код. </p> <a href="https://habr.com/ru/articles/1058286/?utm_campaign=1058286&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 12 Jul 2026 13:06:39 GMT</pubDate>
      <dc:creator><![CDATA[tripolskypetr]]></dc:creator>
      
      <category><![CDATA[i18n]]></category><category><![CDATA[i18next]]></category><category><![CDATA[локализация]]></category><category><![CDATA[интернационализация]]></category><category><![CDATA[react]]></category><category><![CDATA[typescript]]></category><category><![CDATA[javascript]]></category><category><![CDATA[vite]]></category><category><![CDATA[бандлер]]></category><category><![CDATA[переводы]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Умный планировщик питания на холодильнике с drag-and-drop, автосохранением сессий и вкусным и полезным продуктовым меню]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1058020/</guid>
      <link>https://habr.com/ru/articles/1058020/?utm_campaign=1058020&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/3c5/ee5/6bb/3c5ee56bb936ead3dc31d6d7d3cff840.png" /><p>Представьте,  что Вам вообще можно не думать, что сегодня съесть. Интереснее каждый день удивляться чему-то, а не иметь готовое меню на каждый день, но для этого сначала нужно четко понимать, что ты ешь сегодня,  а что - завтра.</p><p>Я поразмыслил над тем, как сделать современную электронную книгу рецептов, и на выходе получил проект умного холодильника, где на каждый день задаешь меню, а программа сама считает пищевую ценность, содержание полезных веществ, анализирует, насколько питание полноценное и сбалансированное. Таким образом, можно быстро создавать себе меню на неделю, которое может оказаться идеальным для продуктивности в Ваших физических тренеровках. Но далее открывается вообще новый мир: автоматизация покупки продуктов, четкое понимание, что нужно взять в магазине, ясный взгляд, сколько раз стоит питаться, чтобы не было дефицита белка или витаминов, где стоит использовать БАД и так далее. Аппаратная часть – матовый сенсорный дисплей на магнитах, подключенный к старому относительно бесполезному до этого проекта ноутбуку.</p> <a href="https://habr.com/ru/articles/1058020/?utm_campaign=1058020&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 10 Jul 2026 16:28:05 GMT</pubDate>
      <dc:creator><![CDATA[technofeya]]></dc:creator>
      
      <category><![CDATA[Умный холодильник]]></category><category><![CDATA[электронная книга рецептов]]></category><category><![CDATA[меню на день]]></category><category><![CDATA[умные устройства]]></category><category><![CDATA[электроника]]></category><category><![CDATA[IT-проекты]]></category><category><![CDATA[DIY]]></category><category><![CDATA[автоматизация]]></category><category><![CDATA[программное обеспечение]]></category><category><![CDATA[веб-приложения]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Конвертируем цвета в JS со скоростью 6 миллиардов операций в секунду]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1057978/</guid>
      <link>https://habr.com/ru/articles/1057978/?utm_campaign=1057978&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/774/c7c/757/774c7c7570d67c5342bf8cf61a57df0e.png" /><p>В начале этого года я создал самую быструю JS-библиотеку для работы с цветом: парсинг различных форматов, конвертация в OKLAB/OKLCH, проверка попадания в P3-гамут и многое другое. Библиотека весит всего 7 КБ и не имеет внешних зависимостей. Высокую скорость обеспечили оптимизации под V8: мономорфизм, скрытые классы, ноль лишних аллокаций.</p> <a href="https://habr.com/ru/articles/1057978/?utm_campaign=1057978&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Глянуть, что за либа</a>]]></description>
      
      <pubDate>Fri, 10 Jul 2026 13:53:09 GMT</pubDate>
      <dc:creator><![CDATA[dmkryak]]></dc:creator>
      
      <category><![CDATA[JavaScript]]></category><category><![CDATA[WebGL]]></category><category><![CDATA[GPU]]></category><category><![CDATA[фрагментные шейдеры]]></category><category><![CDATA[GLSL]]></category><category><![CDATA[OKLCH]]></category><category><![CDATA[производительность]]></category><category><![CDATA[оптимизация]]></category><category><![CDATA[canvas]]></category><category><![CDATA[colordx]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] TypeScript 7.0 — самое радикальное обновление за 10 лет]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/haulmont/articles/1057526/</guid>
      <link>https://habr.com/ru/companies/haulmont/articles/1057526/?utm_campaign=1057526&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/21e/b4a/434/21eb4a434ec7122acb7c1c9f5ed7499e.png" /><p>С самого начала TypeScript обещал обеспечить масштабируемость JavaScript. Строгая типизация и богатый инструментарий позволили разрабатывать нетривиальные, высококачественные приложения под любые платформы.</p><p>В прошлом году <a href="https://devblogs.microsoft.com/typescript/typescript-native-port/">наша команда анонсировала следующий шаг в масштабировании TypeScript</a>: нативный порт на Go, который использует все возможности современного железа. Порт сделан максимально точно: новый код воспроизводит структуру и логику оригинальной кодовой базы, чтобы результаты двух компиляторов совпадали.</p><p>Ключевое отличие — TypeScript 7 использует скорость нативного кода, разделяемую память при многопоточности и ряд новых оптимизаций. В итоге полная сборка ускоряется в 8–12 раз.</p> <a href="https://habr.com/ru/articles/1057526/?utm_campaign=1057526&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 10 Jul 2026 09:38:26 GMT</pubDate>
      <dc:creator><![CDATA[honest_niceman (Haulmont)]]></dc:creator>
      
      <category>TypeScript 7</category><category>TypeScript Go</category><category>нативный TypeScript</category><category>ускорение TypeScript</category><category>TypeScript компилятор</category><category>tsc производительность</category><category>TypeScript 7.0 релиз</category><category>переход TypeScript 7</category><category>TypeScript LSP</category><category>TypeScript параллелизация</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Почему любой антидетект на JavaScript спалится. Полгода назад я перестал латать скрапер и полез в C++ Chromium]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1057754/</guid>
      <link>https://habr.com/ru/articles/1057754/?utm_campaign=1057754&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5c2/271/9b9/5c22719b950f946b7b5cc7e8d2e513c4.jpg" /><p>Полгода я жил в одном и том же цикле. Собираешь скрапер, вечером он проходит все страницы, а к обеду следующего дня отдаёт сплошные капчи и 403. Добавляешь puppeteer-stealth, сверху ещё десяток заплаток, гонишь трафик через резидентные прокси, и всё равно на третьи сутки прилетает бан. Я устал чинить симптомы и сел разбираться, что именно нас выдаёт.</p> <a href="https://habr.com/ru/articles/1057754/?utm_campaign=1057754&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 10 Jul 2026 07:53:22 GMT</pubDate>
      <dc:creator><![CDATA[armani-boi]]></dc:creator>
      
      <category><![CDATA[scraping]]></category><category><![CDATA[chromium]]></category><category><![CDATA[agent]]></category><category><![CDATA[stealth]]></category><category><![CDATA[javascript]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[История JavaScript: браузерные войны, ECMAScript, Node.js, TypeScript, React]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/articles/1057734/</guid>
      <link>https://habr.com/ru/companies/pvs-studio/articles/1057734/?utm_campaign=1057734&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/0b2/ef8/9a3/0b2ef89a372c72ae564981cc452499c5.png" /><p>Десять дней разработки — и язык, на котором держится веб. В этой статье — история JavaScript и инструментов, которые привели его к этому.</p> <a href="https://habr.com/ru/articles/1057734/?utm_campaign=1057734&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 10 Jul 2026 06:39:18 GMT</pubDate>
      <dc:creator><![CDATA[feeelin (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[javascript]]></category><category><![CDATA[react]]></category><category><![CDATA[vite]]></category><category><![CDATA[nodejs]]></category><category><![CDATA[браузерные войны]]></category><category><![CDATA[typescript]]></category><category><![CDATA[deno]]></category><category><![CDATA[web assembly]]></category><category><![CDATA[json]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Сравнение ИИ-моделей при создании ремейка игры Battle City (1985) — июль 2026]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1057420/</guid>
      <link>https://habr.com/ru/articles/1057420/?utm_campaign=1057420&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a2e/4af/4da/a2e4af4dafb019c0cb8f854cbf272d06.png" /><p>Прошло полгода со времени публикции <a href="https://habr.com/ru/articles/976252/" rel="noopener noreferrer nofollow">первого сравнения</a>. Мир ИИ стремительно развивается, поэтому эксперимент пора повторить.</p> <a href="https://habr.com/ru/articles/1057420/?utm_campaign=1057420&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 09 Jul 2026 11:05:33 GMT</pubDate>
      <dc:creator><![CDATA[leshkin]]></dc:creator>
      
      <category><![CDATA[сравнение ии-моделей]]></category><category><![CDATA[разработка игра]]></category><category><![CDATA[сравнение нейросетей]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я сделал идеальную карту для GTA San Andreas в браузере при помощи моего движка]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1057352/</guid>
      <link>https://habr.com/ru/articles/1057352/?utm_campaign=1057352&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2bc/5c2/4ee/2bc5c24ee6ddc68853b53b7ca2557e76.jpg" /><p>Это продолжение моей статьи о том, как я сделал движок совместимый с GTA San Andreas для запуска в браузере, рекомендую сначала прочитать:</p><p><a href="https://habr.com/ru/articles/1051828/" rel="noopener noreferrer nofollow">https://habr.com/ru/articles/1051828/</a></p><p>А здесь речь пойдёт о том, как я готовил идеальную карту и фиксил легаси-баги игры.</p> <a href="https://habr.com/ru/articles/1057352/?utm_campaign=1057352&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 09 Jul 2026 09:21:42 GMT</pubDate>
      <dc:creator><![CDATA[AlexSergey]]></dc:creator>
      
      <category><![CDATA[GTA]]></category><category><![CDATA[react]]></category><category><![CDATA[three.js]]></category><category><![CDATA[3d]]></category><category><![CDATA[san andreas]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я случайно создал голосовой чат, который невозможно прослушать]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1056888/</guid>
      <link>https://habr.com/ru/articles/1056888/?utm_campaign=1056888&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/30a/039/1d6/30a0391d6bab3bdf376ac37362b7b4e2.png" /><p>Я не пытался сделать «приватный мессенджер» и вообще не думал про слежку и прослушку. </p><p>В один день мне просто надоело, что созвониться с человеком — это настоящая проблема: блокировки, включи-выключи VPN, а любой новый аналог встречает регистрацией с десятком полей — а теперь местами ещё и просьбой показать паспорт. <br>За ночь я собрал прототип голосового чата по принципу «ничего лишнего» — и уже потом с удивлением понял, что этот же принцип случайно сделал разговор в нём таким, что подслушать его со стороны физически негде. </p><p>Ниже — как так получилось, где у этой «невозможности» честные границы, и почему всё держится на одном-единственном решении.  </p> <a href="https://habr.com/ru/articles/1056888/?utm_campaign=1056888&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Как так вышло?</a>]]></description>
      
      <pubDate>Wed, 08 Jul 2026 08:57:12 GMT</pubDate>
      <dc:creator><![CDATA[jettsba]]></dc:creator>
      
      <category><![CDATA[WebRTC]]></category><category><![CDATA[P2P]]></category><category><![CDATA[голосовой чат]]></category><category><![CDATA[голосовой чат без регистрации]]></category><category><![CDATA[альтернатива Discord]]></category><category><![CDATA[приватность]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[VoIP]]></category><category><![CDATA[perfect negotiation]]></category><category><![CDATA[mesh]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Полный гайд по JavaScript-коду отслеживания в Matomo. Часть 1]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1056702/</guid>
      <link>https://habr.com/ru/articles/1056702/?utm_campaign=1056702&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a28/310/519/a28310519310440a8564b3829571b11b.png" /><p>В прошлых статьях я уже подробно разобрал базовую инфраструктуру Matomo:&nbsp;как развернуть систему&nbsp;на собственном сервере LAMP, рассчитать нагрузку,&nbsp;выстроить правильную архитектуру сайтов, measurable и Roll-Up аналитики внутри Matomo. Но вся эта серверная часть&nbsp;— только фундамент.&nbsp; </p><p>И сегодня мы наконец переходим к самому важному слою Matomo&nbsp;— tracking-коду и архитектуре отслеживания пользовательских действий. </p> <a href="https://habr.com/ru/articles/1056702/?utm_campaign=1056702&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 08 Jul 2026 06:45:59 GMT</pubDate>
      <dc:creator><![CDATA[vladislav_lukashenko]]></dc:creator>
      
      <category><![CDATA[matomo]]></category><category><![CDATA[matomo tag manager]]></category><category><![CDATA[javascript]]></category><category><![CDATA[google tag manager]]></category><category><![CDATA[gtm]]></category><category><![CDATA[яндекс тег менеджер]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Когда может пригодиться экзотика в ООП: миксины/трейты/аспекты]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1056780/</guid>
      <link>https://habr.com/ru/articles/1056780/?utm_campaign=1056780&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e1b/f90/473/e1bf9047340f1f334897331201833e11.png" /><p>Когда может пригодиться экзотика. Я много раз обращался к использованию множественного наследования в языках программирования  и платформах. Но как правило это обращение было больше теоретическим. Я не видел в его применении значительных преимуществ, способных превзойти альтернативные подходы, с учётом рисков его применения. Но в это раз случай представился. И я покажу этот пример.</p> <a href="https://habr.com/ru/articles/1056780/?utm_campaign=1056780&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 08 Jul 2026 02:59:26 GMT</pubDate>
      <dc:creator><![CDATA[mahairod]]></dc:creator>
      
      <category><![CDATA[миксины]]></category><category><![CDATA[аспекты]]></category><category><![CDATA[трейты]]></category><category><![CDATA[ооп]]></category><category><![CDATA[адаптер]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Angular против React: зарплаты, кризис в IT и почему корпорации остаются на Angular]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1056564/</guid>
      <link>https://habr.com/ru/articles/1056564/?utm_campaign=1056564&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/43e/6a9/3b4/43e6a93b491327f74a36062e08f4041f.jpg" /><p>Angular часто воспринимают как тяжёлый корпоративный фреймворк «из прошлого»: сложный вход, много правил, меньше хайпа, чем у React. Но за последние годы фреймворк заметно изменился: появились сигналы, обновился SSR, стало проще начинать, а экосистема перестала быть закрытым «котлом» только для энтерпрайза.</p><p>Я, Александр, автор телеграм-канала «<a href="https://t.me/shulepov_codeee" rel="noopener noreferrer nofollow">Shulepov Code</a>», поговорил с Олегом Щёголевым — frontend-разработчиком, преподавателем, ментором и специалистом по Angular автором Telegram-канала «<a href="https://t.me/summon_the_coder" rel="noopener noreferrer nofollow">SUMMON_THE_CODER</a>».&nbsp;&nbsp; &nbsp;</p><p>В этом выпуске мы разбираем путь в профессию, реальные проекты, ситуацию на рынке труда, зарплаты, использование нейросетей в разработке, статус GDE, современный Angular, сигналы, SSR, CLI, директивы, модули и главный вопрос: почему React популярнее, но крупные компании всё равно продолжают выбирать Angular.</p> <a href="https://habr.com/ru/articles/1056564/?utm_campaign=1056564&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 07 Jul 2026 12:14:16 GMT</pubDate>
      <dc:creator><![CDATA[aleksandr_shulepov]]></dc:creator>
      
      <category><![CDATA[Angular]]></category><category><![CDATA[React]]></category><category><![CDATA[фронтенд разработка]]></category><category><![CDATA[Angular сигналы]]></category><category><![CDATA[SSR Angular]]></category><category><![CDATA[зарплаты разработчиков]]></category><category><![CDATA[карьера в IT]]></category><category><![CDATA[Google Developer Expert]]></category><category><![CDATA[Nx]]></category><category><![CDATA[TypeScript]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Параметризованные отчёты в CSV без таймаута]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1056402/</guid>
      <link>https://habr.com/ru/articles/1056402/?utm_campaign=1056402&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/0c5/571/7ed/0c55717ed98f7c8486ab2a75ca2e99f4.jpg" /><p>Эта идея появилась у меня давно.</p><p>Когда мы внедряли BI в крупном банке, я заметил одну вещь: больше всего внедрению радовались руководители. У них появлялись дашборды, графики, показатели, визуальная картина происходящего.</p><p>А вот люди, которые каждый день работали с данными, не всегда были в таком же восторге.</p><p>BI хорошо показывает, что что-то изменилось: появилась аномалия, просел показатель, выросло значение, изменилась динамика. Но после этого почти всегда возникает следующий вопрос: почему так произошло?</p><p>И вот тут уже приходится разбираться не с графиком, а с данными.</p><p>Причин может быть много: ошибка, поздняя загрузка, изменение записей задним числом, редкое событие, особенность расчёта. Чтобы это проверить, нужно смотреть строки, сравнивать выгрузки, пересчитывать показатели и иногда просто руками разбирать, что попало в отчёт.</p><p>У финансистов, которые занимались такими разборами, доступ к хранилищу был ограничен. Они не были техническими специалистами, и это нормально. Но при этом именно им нужно было проверять банковские показатели, сверять расчёты и понимать, что изменилось между вчерашней и сегодняшней выгрузкой.</p><p>Для таких задач пользователи всё равно часто уходили в Excel: добавляли формулы, сверяли расчёты, сравнивали текущую выгрузку с предыдущей.  </p><p>Так появилась первая версия программы: она формировала отчёты в Excel и хранила на сервере историю выгрузок.  </p> <a href="https://habr.com/ru/articles/1056402/?utm_campaign=1056402&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 07 Jul 2026 11:58:26 GMT</pubDate>
      <dc:creator><![CDATA[alex_29]]></dc:creator>
      
      <category><![CDATA[csv]]></category><category><![CDATA[bi]]></category><category><![CDATA[выгрузка данных]]></category><category><![CDATA[отчёт]]></category><category><![CDATA[excel]]></category><category><![CDATA[timeout]]></category><category><![CDATA[python]]></category><category><![CDATA[javascript]]></category><category><![CDATA[sql]]></category><category><![CDATA[бизнес-анализ]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[1038 баллов на Hacker News собрал пост про отказ от AI-кодинга. У меня была та же ночь, но другой вывод]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1056468/</guid>
      <link>https://habr.com/ru/articles/1056468/?utm_campaign=1056468&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/75b/b9b/a44/75bb9ba445a9fa16e782f563b4bd0d83.png" /><p>9 мая пост «I’m going back to writing code by hand» набрал на Hacker News 1038 баллов и 617 комментариев. Автор семь месяцев вайб-кодил Kubernetes-дашборд с Claude, дошёл до god object на 1690 строк и бросил AI-кодинг. Я узнал в этом свою историю полугодовой давности, но вывод сделал другой.</p> <a href="https://habr.com/ru/articles/1056468/?utm_campaign=1056468&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 07 Jul 2026 09:56:47 GMT</pubDate>
      <dc:creator><![CDATA[Ra2007]]></dc:creator>
      
      <category><![CDATA[claude code]]></category><category><![CDATA[ai coding]]></category><category><![CDATA[vibecoding]]></category><category><![CDATA[clean architecture]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[developer tools]]></category><category><![CDATA[claude.md]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Я портировал Carmageddon в браузер]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1056454/</guid>
      <link>https://habr.com/ru/articles/1056454/?utm_campaign=1056454&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/192/fc0/8ee/192fc08ee4176e5e1f94b81801f82932.jpg" /><p>Решил я поиграть на выходных в Carmageddon. Но вот незадача!- Заводить всё это в эмуляторе DosBox нет никакого желания (он стоит у меня для других целей, ну вы понимаете))- То что мы с Сашей Гурьяновым делали на DosZone у меня тормозит, так как не вывозит мой старенький процессор. Пора уже собрать комп для нашей ДОС Зоны))- Ремейки типа Carmageddo: Max Damage и Reincarnation полная фигня. Куплено в стиме и полно разочарования</p><p>Что же делать? Будем сами портировать в браузер! Всё как мы любим. Для эксперимента и развлечения ради! </p> <a href="https://habr.com/ru/articles/1056454/?utm_campaign=1056454&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 07 Jul 2026 09:30:38 GMT</pubDate>
      <dc:creator><![CDATA[Carter54]]></dc:creator>
      
      <category><![CDATA[портирования]]></category><category><![CDATA[wasm]]></category><category><![CDATA[web assembly]]></category><category><![CDATA[carmageddon]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Обновления GigaIDE за июнь 2026]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/sberbank/articles/1054768/</guid>
      <link>https://habr.com/ru/companies/sberbank/articles/1054768/?utm_campaign=1054768&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/0f4/35c/b71/0f435cb7136aed3e3efefaa905501000.jpg" /><p>Всем добрый день. В этой статье мы расскажем вам об июньских изменениях в Pro-функциональности GigaIDE, который можно найти на <strong><a href="https://habr.com/ru/companies/sberbank/articles/977840/">нашем маркетплейсе</a></strong>. Соответствующий обзор за май доступен по <strong><a href="https://habr.com/ru/companies/sberbank/articles/1042606/">этой ссылке</a></strong>. </p> <a href="https://habr.com/ru/articles/1054768/?utm_campaign=1054768&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 07 Jul 2026 07:43:18 GMT</pubDate>
      <dc:creator><![CDATA[GIGAIDECommunity (Сбер)]]></dc:creator>
      
      <category><![CDATA[gigaide]]></category><category><![CDATA[gigaide pro]]></category><category><![CDATA[ide]]></category><category><![CDATA[плагин]]></category><category><![CDATA[javascript]]></category><category><![CDATA[базы данных]]></category><category><![CDATA[mongodb]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как мы во фронтенд-команде ПСБ прокачали релизный цикл npm-пакетов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/psb/articles/1055888/</guid>
      <link>https://habr.com/ru/companies/psb/articles/1055888/?utm_campaign=1055888&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e5e/890/5fc/e5e8905fcb3f55eb01834d60f8103701.png" /><p>Привет, Хабр! Меня зовут Оля Борисова, я фронтенд-разработчик в ПСБ. Работала как в продуктовых, так и в платформенной команде. Сегодня хочу поделиться нашим опытом разработки внутренних пакетов, их релизным процессом, расскажу какие проблемы у нас были, а также постараюсь дать советы тем, кто еще в начале пути.</p><p>На момент написания статьи у нас около 300 репозиториев, большинство из которых представляет собой внутренние библиотеки, утилиты, конфиги и микрофронты.&nbsp;</p><p>Так было не всегда, когда-то у нас был один проект и все что с ним связано (компоненты, хелперы, конфиги и прочее) хранилось внутри него. Это работало пока не появилась надобность переиспользования наработок и лучших практик в других приложениях и направлениях. Так мы пришли к тому, что нам необходимы внутренние пакеты и механизмы их организации и менеджмента.</p> <a href="https://habr.com/ru/articles/1055888/?utm_campaign=1055888&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 07 Jul 2026 06:40:51 GMT</pubDate>
      <dc:creator><![CDATA[oleych (ПСБ)]]></dc:creator>
      
      <category><![CDATA[репозитории]]></category><category><![CDATA[монорепозиторий]]></category><category><![CDATA[cicd]]></category><category><![CDATA[инструменты]]></category><category><![CDATA[управление проектами]]></category><category><![CDATA[релизный цикл]]></category><category><![CDATA[релиз-менеджмент]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Точно ли здесь нужен `any`? 13 сценариев из TypeScript-код-ревью — от `unknown` до границы приложения]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1055944/</guid>
      <link>https://habr.com/ru/articles/1055944/?utm_campaign=1055944&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5a2/475/59b/5a247559b08568fe9c5aff9d9b5cfc53.png" /><p>Красная волнистая линия под строкой раздражает, и самый быстрый способ её убрать — дописать <code>any</code>, <code>as</code> или <code>!</code>. Компилятор замолкает, сборка зеленеет, PR уходит дальше. Вот только ошибка никуда не делась: она переехала из редактора в рантайм, поближе к пользователю.</p><p>За годы ревью — чужого кода и своего — я привык читать эти три символа как сигнальную лампочку. Они почти всегда отмечают место, где тип не описан, а выключен. Иногда это осознанный и оправданный выбор. Гораздо чаще — способ не разбираться прямо сейчас, счёт за который приходит позже и другому человеку.</p><p>Поэтому на code review я задаю не привычное «как затипизировать, чтобы TypeScript замолчал», а обратный вопрос:</p><p><strong>Что именно я здесь отключаю — и правда ли без этого нельзя?</strong></p><p>Веду frontend-команду, много времени провожу в чужих диффах, и про <code>any</code>, <code>as</code> и <code>!</code> у нас постепенно сложился небольшой свод договорённостей для review. Из него и выросла эта статья: 13 сценариев, которые складываются в один короткий фильтр. Для каждого есть пара «плохо → хорошо» и рабочий пример на TypeScript 6 — всё можно потрогать в playground (он написан на React, но сами приёмы относятся к TypeScript в целом). Разберём <code>any</code> и <code>unknown</code>, сужение и type guards, <code>satisfies</code>, <code>as const</code>, оператор <code>!</code> и валидацию данных на границе.</p><p>Главная мысль:</p><p><strong>Типы — это проверяемые обещания о данных. any, а также необоснованные as T и !, позволяют компилятору принять такое обещание без доказательства. Если тип неизвестен — это <code>unknown</code> и сужение; если известен, но невиден компилятору — это guard, валидация или контролируемый инвариант, а не слепое утверждение.</strong></p> <a href="https://habr.com/ru/articles/1055944/?utm_campaign=1055944&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 06 Jul 2026 08:44:47 GMT</pubDate>
      <dc:creator><![CDATA[Viktoriko]]></dc:creator>
      
      <category><![CDATA[TypeScript]]></category><category><![CDATA[any]]></category><category><![CDATA[unknown]]></category><category><![CDATA[type guards]]></category><category><![CDATA[type assertions]]></category><category><![CDATA[narrowing]]></category><category><![CDATA[satisfies]]></category><category><![CDATA[строгая типизация]]></category><category><![CDATA[code review]]></category><category><![CDATA[валидация данных]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Нужен ли здесь `useEffect`? 12 сценариев из React-код-ревью — от производного состояния до React 19.2]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1055486/</guid>
      <link>https://habr.com/ru/articles/1055486/?utm_campaign=1055486&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2d3/1f7/605/2d31f76058fb370e83fa46979614f5d3.webp" /><p>На code review я регулярно встречаю один и тот же вопрос, только записанный разным кодом: «Как правильно синхронизировать эти значения через <code>useEffect</code>?»</p><p>Со временем я понял, что чаще полезнее спросить иначе: <strong>а эффект здесь вообще нужен?</strong></p><p>В статье разбираю 12 типичных сценариев из React-код-ревью: производное состояние, события, цепочки эффектов, внешний store, <code>useEffectEvent</code>, загрузку данных и современные подходы React 19.2. Для каждого случая — пример «плохо → хорошо» и практический фильтр, который помогает выбрать между рендером, обработчиком события, Action, <code>useEffect</code> или query-библиотекой.</p> <a href="https://habr.com/ru/articles/1055486/?utm_campaign=1055486&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 04 Jul 2026 09:16:46 GMT</pubDate>
      <dc:creator><![CDATA[Viktoriko]]></dc:creator>
      
      <category><![CDATA[React]]></category><category><![CDATA[useEffect]]></category><category><![CDATA[React Hooks]]></category><category><![CDATA[React 19]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[frontend]]></category><category><![CDATA[code review]]></category><category><![CDATA[useEffectEvent]]></category><category><![CDATA[useSyncExternalStore]]></category><category><![CDATA[TanStack Query]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
