<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AZ-Way</title><link>https://az-way-blog.web.app/ru/</link><description>Recent content on AZ-Way</description><generator>Hugo</generator><language>ru</language><lastBuildDate>Mon, 09 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://az-way-blog.web.app/ru/index.xml" rel="self" type="application/rss+xml"/><item><title>Angular 6 → 22: путь обновления и на чём спотыкаешься</title><link>https://az-way-blog.web.app/ru/posts/angular-6-to-22/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/angular-6-to-22/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;Обновлять Angular через много версий можно только одним способом: по одной мажорной версии за раз, с зелёной сборкой и тестами после каждой. Большие ломки случаются редко, но они предсказуемы: смена движка рендеринга, смена сборщика, standalone, сигналы, zone.js. Ниже — карта пути от 6 до 22, что ломалось у нас на последних шагах (кольца импортов, оверлеи поверх всего, zone.js) и почему в монорепозитории это делается один раз, а не десять.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="правило-номер-один-по-одной-версии"&gt;Правило номер один: по одной версии&lt;/h2&gt;&#10;&lt;p&gt;Angular выпускает мажорную версию примерно раз в полгода. Команда обновления:&lt;/p&gt;</description></item><item><title>CI с нуля на Nx affected: от «пайплайна нет» до 9 минут на все staging-приложения</title><link>https://az-way-blog.web.app/ru/posts/ci-nx-affected/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/ci-nx-affected/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;В монорепозитории с десятками приложений собирать всё на каждый коммит — долго и бессмысленно: большинство приложений изменение не задело. Nx умеет посчитать, что затронуто, — &lt;code&gt;nx affected&lt;/code&gt;. Сложность не в команде, а в вопросе «затронуто относительно чего?». Ниже — путь от ручного деплоя скриптами до пайплайна, который проверяет MR и собирает только нужное, и четыре грабли, на которые я наступил по дороге.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="точка-ноль-деплой-руками"&gt;Точка ноль: деплой руками&lt;/h2&gt;&#10;&lt;p&gt;Сначала пайплайна не было. Был shell-скрипт: собрать приложение локально и скопировать файлы на сервер. Проблемы очевидные:&lt;/p&gt;</description></item><item><title>ESLint-правила, которые чинят сами: fixer, suggestions и Angular-шаблоны</title><link>https://az-way-blog.web.app/ru/posts/eslint-fixer-angular-templates/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/eslint-fixer-angular-templates/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;В прошлом посте &lt;a href="https://az-way-blog.web.app/ru/posts/custom-eslint-rules/"&gt;custom-eslint-rules&lt;/a&gt; правило только находило ошибку. Следующий шаг — чтобы оно её исправляло. Здесь главное не техника, а граница: &lt;code&gt;eslint --fix&lt;/code&gt; можно доверить только то исправление, которое &lt;strong&gt;никогда не меняет поведение кода&lt;/strong&gt;. Всё остальное — подсказка (suggestion), которую человек применяет сам. Плюс правила для Angular-шаблонов: они устроены так же, только дерево у них другое.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="три-уровня-помощи"&gt;Три уровня помощи&lt;/h2&gt;&#10;&lt;p&gt;Правило может сделать одно из трёх:&lt;/p&gt;&#10;&lt;div class="az-table-wrap"&gt;&#10; &lt;table class="az-table"&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&lt;th&gt;Уровень&lt;/th&gt;&lt;th&gt;Что делает&lt;/th&gt;&lt;th&gt;Кто решает&lt;/th&gt;&lt;th&gt;Когда применяется&lt;/th&gt;&lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&lt;td&gt;Только сообщение&lt;/td&gt;&lt;td&gt;Подсвечивает ошибку&lt;/td&gt;&lt;td&gt;Человек правит руками&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;/tr&gt;&#10; &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Suggestion&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Предлагает 1+ вариантов исправления&lt;/td&gt;&lt;td&gt;Человек выбирает в редакторе&lt;/td&gt;&lt;td&gt;По клику, &lt;code&gt;--fix&lt;/code&gt; их &lt;strong&gt;не&lt;/strong&gt; трогает&lt;/td&gt;&lt;/tr&gt;&#10; &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Исправляет сам&lt;/td&gt;&lt;td&gt;Машина&lt;/td&gt;&lt;td&gt;&lt;code&gt;eslint --fix&lt;/code&gt;, «fix on save», CI&lt;/td&gt;&lt;/tr&gt;&#10; &lt;/tbody&gt;&#10; &lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Правило выбора одно: &lt;strong&gt;fix — только если исправление безопасно в 100 % случаев.&lt;/strong&gt; Если хотя бы в одном случае оно может изменить поведение, это suggestion. &lt;code&gt;--fix&lt;/code&gt; часто запускается сам — при сохранении файла или в pre-commit-хуке. Никто не смотрит на каждую его правку, поэтому ошибка автофикса — это баг, который никто не заметил.&lt;/p&gt;</description></item><item><title>Java OCA 8 глазами frontend-разработчика</title><link>https://az-way-blog.web.app/ru/posts/java-oca-8-frontend/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/java-oca-8-frontend/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;Я frontend-разработчик на Angular и TypeScript и готовлюсь к сертификации Oracle Java SE 8 Programmer I (1Z0-808) по книге Boyarsky и Selikoff. Цель — собеседование на junior/стажёра Java (Spring) backend. В посте — прогресс в цифрах, что в каждой из шести глав, где привычки из TypeScript ведут к неправильному ответу, и по одной-две задачи LeetCode к каждой главе, чтобы закрепить её кодом. Синтаксис у Java и TypeScript похож, поэтому самые коварные места — те, где код выглядит знакомо, а работает иначе.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="почему-java-и-почему-этот-экзамен"&gt;Почему Java и почему этот экзамен&lt;/h2&gt;&#10;&lt;p&gt;Цель — уметь писать backend на Java/Spring, а не только frontend. Сертификат сам по себе работу не даёт. Но подготовка к нему заставляет выучить основу языка до мелочей, а не «на уровне Stack Overflow». Экзамен проверяет именно мелочи: скомпилируется ли этот код, что он напечатает, какое исключение бросит.&lt;/p&gt;</description></item><item><title>Sentry в Angular-монорепозитории: от «пользователи не жалуются» до 6889 событий в одной группе</title><link>https://az-way-blog.web.app/ru/posts/sentry-angular-monorepo/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/sentry-angular-monorepo/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;Пользователи почти никогда не пишут о багах: они обновляют страницу, ругаются и идут дальше. Sentry собирает ошибки из браузера каждого пользователя с понятным стеком и контекстом. Ниже — как мы подключили его сразу к 17 приложениям одного монорепозитория, почему без source maps он бесполезен, как одна неправильно отправленная ошибка набрала 6889 событий от 157 человек, и что Sentry не должен знать о пользователе.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;console.error&lt;/code&gt; в браузере пользователя не видит никто. Тестировщик проверяет один браузер и одни данные. Реальные пользователи — это сотни комбинаций: старый Chrome на рабочем компьютере, вкладка, открытая со вчерашнего дня, медленная сеть, права, которых нет ни у кого из команды.&lt;/p&gt;</description></item><item><title>Из 10+ скопированных Angular-проектов в один Nx-монорепозиторий</title><link>https://az-way-blog.web.app/ru/posts/nx-monorepo-from-copies/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/nx-monorepo-from-copies/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;У нас было больше десяти копий одного Angular-приложения — по одной на каждого регионального заказчика. Баг чинили десять раз, фичу добавляли десять раз, и каждый раз где-то забывали. Мы собрали всё в один Nx-монорепозиторий: общий код в библиотеках, а приложение региона стало тонкой оболочкой из ~25 файлов. Ниже — в каком порядке переносить, как провести границы между библиотеками и на чём мы обожглись.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="проблема-копия--это-долг-который-растёт"&gt;Проблема: копия — это долг, который растёт&lt;/h2&gt;&#10;&lt;p&gt;Схема знакомая. Есть приложение для первого заказчика. Приходит второй: «нам то же самое, но с нашим логотипом и парой отличий». Самое быстрое — скопировать папку. Через год копий десять, и:&lt;/p&gt;</description></item><item><title>Миграция Tailwind v3 → v4 в большом монорепозитории</title><link>https://az-way-blog.web.app/ru/posts/tailwind-v3-to-v4-monorepo/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/tailwind-v3-to-v4-monorepo/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;Tailwind v4 перенёс конфигурацию из JavaScript в CSS и сам ищет классы в файлах. В обычном проекте это удобно. В монорепозитории, где классы живут в десятке библиотек за пределами приложения, это первая причина, почему после обновления «пропали стили». Ниже — что меняется, четыре директивы, без которых не обойтись (&lt;code&gt;@import&lt;/code&gt;, &lt;code&gt;@config&lt;/code&gt;, &lt;code&gt;@source&lt;/code&gt;, &lt;code&gt;@reference&lt;/code&gt;), что делать с Sass и как закрепить результат проверкой в CI.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="что-поменялось-в-v4-если-по-простому"&gt;Что поменялось в v4, если по-простому&lt;/h2&gt;&#10;&lt;p&gt;Tailwind — это генератор CSS. Он читает твои файлы, находит в них классы (&lt;code&gt;flex&lt;/code&gt;, &lt;code&gt;bg-primary&lt;/code&gt;, &lt;code&gt;px-4&lt;/code&gt;) и пишет CSS только для тех, что реально используются.&lt;/p&gt;</description></item><item><title>Профиль вместо силы воли: как AZ-Way Lock держит фокус на iPhone, iPad и Mac</title><link>https://az-way-blog.web.app/ru/posts/az-way-lock/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/az-way-lock/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;Я не пытаюсь «меньше сидеть в телефоне» силой воли. Я собрал в Apple Configurator профиль конфигурации, который убирает развлечения с iPhone, iPad и Mac и делает их возвращение дорогим. Если посчитать, что внутри, видно главное: 44 % заблокированных сайтов и 31 % заблокированных приложений — это не сам контент, а обходные пути к нему. В az-log после установки профиля причина &lt;code&gt;phone&lt;/code&gt; почти исчезла: 4 случая из 5 в первый день и 1 из 24 за следующие восемь.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="почему-профиль-а-не-сила-воли"&gt;Почему профиль, а не сила воли&lt;/h2&gt;&#10;&lt;p&gt;В посте &lt;a href="https://az-way-blog.web.app/ru/posts/az-log/"&gt;az-log&lt;/a&gt; я рассказывал, как первая же строка таблицы показала: четыре намаза из пяти я пропустил или отложил из-за телефона. Вывод был не «надо стараться больше», а «надо поменять условия».&lt;/p&gt;</description></item><item><title>Свои ESLint-правила как защита от повторяющихся ошибок</title><link>https://az-way-blog.web.app/ru/posts/custom-eslint-rules/</link><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/custom-eslint-rules/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;Код-ревью ловит ошибку один раз. Правило линтера ловит её всегда: в каждом коммите, у каждого разработчика, в CI. Моё правило простое: если одна и та же ошибка дошла до ревью второй раз, это уже не ошибка человека, а дыра в инструментах. Дальше — лестница из трёх ступеней (готовое правило → ограничение с сообщением → своё правило), разбор своего правила по шагам и как понять, что оно вообще работает.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="почему-ревью-не-хватает"&gt;Почему ревью не хватает&lt;/h2&gt;&#10;&lt;p&gt;Ревью делает человек. Человек устаёт, торопится, смотрит на логику и пропускает мелочь, которую видел уже десять раз. А новый разработчик в команде эту мелочь вообще не знает: она живёт только в головах тех, кто однажды из-за неё чинил прод.&lt;/p&gt;</description></item><item><title>az-log: одна строка в день и профиль, который запер мой телефон</title><link>https://az-way-blog.web.app/ru/posts/az-log/</link><pubDate>Sat, 07 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/az-log/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;az-log — это Google-таблица, где одна строка равна одному дню, а колонки разбиты на четыре сферы: вера, здоровье, семья и заработок. В первый же день таблица показала, что я пропустил все пять намазов, и у четырёх из них причина была одна: телефон. После этого я поставил на iPhone и iPad профиль через Apple Configurator, который убирает развлекательные приложения и сайты и не даёт себя удалить.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="откуда-взялась-таблица"&gt;Откуда взялась таблица&lt;/h2&gt;&#10;&lt;p&gt;Цели на год у меня записаны в заметках по четырём сферам. Проблема в том, что к концу месяца я не мог честно ответить, выполнил я их или нет. Было ощущение «вроде нормально», а ощущение ничего не доказывает.&lt;/p&gt;</description></item><item><title>Иммунитет и закаливание: что работает по данным исследований</title><link>https://az-way-blog.web.app/ru/posts/immunity-cold-hardening/</link><pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/posts/immunity-cold-hardening/</guid><description>&lt;div class="az-alert az-alert--info" role="status"&gt;&#10; &lt;span class="az-alert__title"&gt;Коротко&lt;/span&gt;&#10; &lt;div&gt;«Поднять иммунитет» одной таблеткой нельзя. По данным исследований работают пять вещей: прививка от гриппа, сон не меньше 7 часов, регулярное кардио, мытьё рук и витамин D при его нехватке. Закаливание, полоскание горла, пробиотики и сауна дают небольшой или неуверенный эффект. Чеснок, имбирь, витамин C «для всех» и «иммуномодуляторы» для профилактики почти не работают.&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="как-читать-уровни-доказательств"&gt;Как читать уровни доказательств&lt;/h2&gt;&#10;&lt;p&gt;Каждому пункту ниже поставлен один из четырёх уровней:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Сильные данные&lt;/strong&gt; — систематический обзор или мета-анализ многих РКИ, эффект устойчивый.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Умеренные&lt;/strong&gt; — несколько РКИ или одно большое; эффект есть, но с оговорками.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Слабые&lt;/strong&gt; — одно небольшое РКИ, наблюдательные данные или эффект на грани.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Не работает&lt;/strong&gt; — проверяли, эффекта нет.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;РКИ — рандомизированное контролируемое исследование: людей случайно делят на группы, поэтому разницу между группами можно приписать самому вмешательству, а не образу жизни участников.&lt;/p&gt;</description></item><item><title>OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide</title><link>https://az-way-blog.web.app/ru/books/java-oca-8/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/books/java-oca-8/</guid><description>&lt;h2 id="почему-читаю"&gt;Почему читаю&lt;/h2&gt;&#10;&lt;p&gt;Цель — уметь писать backend на Java/Spring, а не только frontend. Сертификат сам по себе работу не даёт. Но подготовка к нему заставляет выучить основу языка до мелочей, а не «на уровне Stack Overflow».&lt;/p&gt;&#10;&lt;h2 id="заметки-по-главам"&gt;Заметки по главам&lt;/h2&gt;&#10;&lt;p&gt;Разбор каждой из шести глав — где привычки из TypeScript ведут к неправильному ответу и какие задачи LeetCode закрепляют главу — в посте &lt;a href="https://az-way-blog.web.app/ru/posts/java-oca-8-frontend/"&gt;Java OCA 8 глазами frontend-разработчика&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Техника</title><link>https://az-way-blog.web.app/ru/tech/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://az-way-blog.web.app/ru/tech/</guid><description>&lt;p&gt;Устройства, которыми пользуюсь или собираюсь купить в ближайшее время.&lt;/p&gt;&#10;&lt;h2 id="пользуюсь"&gt;Пользуюсь&lt;/h2&gt;&#10;&#10;&lt;div class="az-card az-card--icon"&gt;&#10; &lt;span class="az-card__icon az-card__icon--wealth"&gt;&lt;svg viewBox="0 0 48 48" width="48" height="48" focusable="false" aria-hidden="true"&gt;&#10; &lt;path class="az-ill__soft" d="M8 20 L24 13 L40 20 L24 27 Z"/&gt;&#10; &lt;path class="az-ill__line" d="M8 20 L24 13 L40 20 L24 27 Z M8 20 V26 L24 33 L40 26 V20 M24 27 V33"/&gt;&#10; &lt;circle class="az-ill__accent" cx="32" cy="27.6" r="1.4"/&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;div class="az-card__body"&gt;&#10; &#10; &lt;h3 class="az-card__title"&gt;Mac mini (2024)&lt;/h3&gt;&#10; &lt;div&gt;Компьютер: M4, 16 ГБ оперативной памяти&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;div class="az-card az-card--icon"&gt;&#10; &lt;span class="az-card__icon az-card__icon--wealth"&gt;&lt;svg viewBox="0 0 48 48" width="48" height="48" focusable="false" aria-hidden="true"&gt;&#10; &lt;path class="az-ill__soft" d="M7.5 14.5 Q24 17.5 40.5 14.5 V28 Q24 31 7.5 28 Z"/&gt;&#10; &lt;path class="az-ill__line" d="M4 11 Q24 15 44 11 V31 Q24 35 4 31 Z M24 34 V39 M16 40 H32"/&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;div class="az-card__body"&gt;&#10; &#10; &lt;h3 class="az-card__title"&gt;Dell P3421W&lt;/h3&gt;&#10; &lt;div&gt;Монитор&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;div class="az-card az-card--icon"&gt;&#10; &lt;span class="az-card__icon az-card__icon--wealth"&gt;&lt;svg viewBox="0 0 48 48" width="48" height="48" focusable="false" aria-hidden="true"&gt;&#10; &lt;rect class="az-ill__line" x="4" y="15" width="40" height="18" rx="3"/&gt;&#10; &lt;path class="az-ill__line az-ill__keys" d="M9 20 H39 M11 24.5 H37"/&gt;&#10; &lt;rect class="az-ill__accent" x="15" y="27.5" width="18" height="2.5" rx="1.25"/&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;div class="az-card__body"&gt;&#10; &#10; &lt;h3 class="az-card__title"&gt;Logitech MX Keys Mini&lt;/h3&gt;&#10; &lt;div&gt;Клавиатура&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;div class="az-card az-card--icon"&gt;&#10; &lt;span class="az-card__icon az-card__icon--wealth"&gt;&lt;svg viewBox="0 0 48 48" width="48" height="48" focusable="false" aria-hidden="true"&gt;&#10; &lt;path class="az-ill__line" d="M24 6 C33 6 36 14 36 24 C36 35 31 42 24 42 C17 42 12 35 12 24 C12 14 15 6 24 6 Z M24 6 V18 M12.5 19 Q24 22 35.5 19"/&gt;&#10; &lt;rect class="az-ill__accent" x="22.5" y="9.5" width="3" height="6" rx="1.5"/&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;div class="az-card__body"&gt;&#10; &#10; &lt;h3 class="az-card__title"&gt;Logitech MX Master 3S&lt;/h3&gt;&#10; &lt;div&gt;Мышь&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="планирую-купить"&gt;Планирую купить&lt;/h2&gt;&#10;&#10;&lt;div class="az-card az-card--icon"&gt;&#10; &lt;span class="az-card__icon az-card__icon--health"&gt;&lt;svg viewBox="0 0 48 48" width="48" height="48" focusable="false" aria-hidden="true"&gt;&#10; &lt;path class="az-ill__line" d="M19 14 L20 5 H28 L29 14 M19 34 L20 43 H28 L29 34 M35 22 H37 V26 H35"/&gt;&#10; &lt;circle class="az-ill__line" cx="24" cy="24" r="11"/&gt;&#10; &lt;path class="az-ill__accent-line" d="M24 17 A7 7 0 1 1 17.42 26.39"/&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;div class="az-card__body"&gt;&#10; &#10; &lt;h3 class="az-card__title"&gt;Garmin Forerunner 265&lt;/h3&gt;&#10; &lt;div&gt;Часы&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;div class="az-card az-card--icon"&gt;&#10; &lt;span class="az-card__icon az-card__icon--health"&gt;&lt;svg viewBox="0 0 48 48" width="48" height="48" focusable="false" aria-hidden="true"&gt;&#10; &lt;path class="az-ill__accent-line" d="M5 12 H14 L17 6 L21 17 L24 10 L26 12 H43"/&gt;&#10; &lt;rect class="az-ill__line" x="4" y="25" width="40" height="6" rx="3"/&gt;&#10; &lt;rect class="az-ill__bg az-ill__line" x="16" y="22" width="16" height="12" rx="6"/&gt;&#10; &lt;circle class="az-ill__accent" cx="24" cy="28" r="1.6"/&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;div class="az-card__body"&gt;&#10; &#10; &lt;h3 class="az-card__title"&gt;Garmin HRM 600&lt;/h3&gt;&#10; &lt;div&gt;Пульсометр&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;</description></item></channel></rss>