<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Технологии и разработка — архитектура, код и инженерия</title>
<link>https://alexeyit.ru/tags/web/</link>
<description>Техническая сторона digital-проектов: от выбора архитектуры и стека до подходов к разработке, тестированию и автоматизации. Практика без воды.</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Техническая сторона digital-проектов: от выбора архитектуры и стека до подходов к разработке, тестированию и автоматизации. Практика без воды.</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Заменит ли AI программистов в 2026: реальный опыт и ограничения AI в разработке</title>
<guid isPermaLink="false">140</guid>
<link>https://alexeyit.ru/all/zamenit-li-ai-programmistov-v-2026-realny-opyt-i-ogranicheniya-a/</link>
<pubDate>Thu, 19 Mar 2026 10:01:41 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/zamenit-li-ai-programmistov-v-2026-realny-opyt-i-ogranicheniya-a/</comments>
<description>
&lt;p&gt;&lt;strong&gt;Непопулярное мнение про AI&lt;/strong&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/djin.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Последнее время все ленты просто завалены постами про вайбкодинг, openclaw и прочие штуки, которые якобы заменят программистов, убьют заказную разработку и позволят компаниям разогнать IT-отделы. Хочется немного остудить этот хайп и зафиксировать точку зрения, которая идет немного вразрез с этим инфопотоком.&lt;/p&gt;
&lt;p&gt;Во-первых, AI действительно сильно бустанет разработку и около IT. Если раньше условно от программиста требовали писать 1000 строк кода в неделю, то теперь это может быть 10 000. То же самое с другими специализациями. Но это не про замену, это про &lt;strong&gt;изменение рынка&lt;/strong&gt;. Станет больше кода, больше проектов и больше попыток что-то запустить. При этом в какой-то момент начинаешь ловить себя на мысли, что &lt;strong&gt;иногда задачу быстрее и дешевле решить руками&lt;/strong&gt;, чем пытаться объяснить LLM, что ты от нее хочешь &amp;mdash; токены и время на диалог спокойно съедают весь эффект.&lt;/p&gt;
&lt;p&gt;Во-вторых, запуск новых продуктов действительно упростился. Напилить SaaS для тестирования гипотезы за день или даже за пару часов &amp;mdash; уже реальность. Мы сами пробовали, и да, это ощущается как магия. Но дальше начинается обратная сторона: безопасность, архитектура, поддержка. Видел кейс, где на вайбкодинг-продукте с интеграцией со Stripe взломали систему и увели платежные данные. Плюс история с BuzzFeed &amp;mdash; ставка на AI и в итоге разговоры о риске банкротства. Это хороший сигнал, что &lt;strong&gt;сам по себе AI не делает продукт жизнеспособным&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Дальше интереснее. Чем больше людей пойдут в разработку, тем больше будет кода и проектов. А значит, работы станет не меньше, а скорее больше. При этом у меня пока слабо укладывается в голове, как AI будет стабильно развивать сложный проект. По ощущениям это больше похоже на постоянное переписывание с нуля, потому что в длинных диалогах все еще есть проблемы с контекстом, галлюцинациями и артефактами. А если в проекте что-то правили руками, возникает отдельная проблема &amp;mdash; как учитывать эти изменения и не ломать все следующими итерациями.&lt;/p&gt;
&lt;p&gt;Отдельная история &amp;mdash; инфляция. Сейчас уже есть инфляция контента, и AI ее только усиливает. С продуктами будет то же самое. Мало просто что-то написать &amp;mdash; это еще нужно продать. Дистрибуция, маркетинг, позиционирование никуда не делись. Если продукт не решает реальную задачу, никакой AI его не вытянет.&lt;/p&gt;
&lt;p&gt;Еще один слой &amp;mdash; инфраструктура и доступы. Если это что-то маленькое, вроде лендинга, наверное окей дать AI доступ к серверу и базе. Но если речь про нормальный прод с каскадом серверов, балансировщиками, мастер-слейв базами и тюнингом &amp;mdash; пока слабо верится, что это можно стабильно делать через агентов. При этом мы уже сейчас отдаем в LLM огромное количество данных, и до конца не понимаем, как это будет использоваться дальше.&lt;/p&gt;
&lt;p&gt;Ну и важный момент. Разработка &amp;mdash; это не только код, это услуга. А в любой услуге есть коммуникация, погружение в бизнес, понимание задач и ограничений. Я слабо представляю, что CTO среднего бизнеса скажет: «пойду навайбкоджу себе CRM и B2B-площадку». Скорее он обратится к тем, кто уже это делал.&lt;/p&gt;
&lt;p&gt;Вайбкодинг &amp;mdash; это круто, мы сами уже что-то собирали за пару часов, и это реально работает. Но воспринимать это как панацею, которая полностью изменит рынок, &amp;mdash; выглядит как перегрев ожиданий. Рынок не исчезнет, он просто станет быстрее, шумнее и местами хаотичнее.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;А как у вас? &lt;/strong&gt;AI &amp;mdash; это уже рабочий инструмент или пока больше про «поиграться и забыть»?&lt;/p&gt;
</description>
</item>

<item>
<title>Яндекс Кит для интернет-магазина: что это, как работает и стоит ли запускать сайт</title>
<guid isPermaLink="false">136</guid>
<link>https://alexeyit.ru/all/yandeks-kit-dlya-internet-magazina-chto-eto-kak-rabotaet-i-stoit/</link>
<pubDate>Wed, 04 Feb 2026 10:26:41 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/yandeks-kit-dlya-internet-magazina-chto-eto-kak-rabotaet-i-stoit/</comments>
<description>
&lt;p&gt;&lt;h1&gt;&lt;strong&gt;Новое начало маленьких интернет-магазинов?&lt;/strong&gt;&lt;/h1&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/Kit.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Кажется, ниша небольших интернет-магазинов на WP и Тильде либо &lt;strong&gt;умирает&lt;/strong&gt;, либо уверенно движется в эту сторону. И нет, это не про вайб-кодинг &amp;mdash; он только расправляет крылья, посмотрим, куда его занесёт. Сегодня хочется поговорить про другое. Про &lt;strong&gt;Яндекс Кит&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Мы недавно участвовали в вебинаре для партнеров, кого пригласили посмотреть продукт изнутри. И вот что он из себя представляет.&lt;/p&gt;
&lt;p&gt;По сути, это классический облачный конструктор, &lt;strong&gt;очень жёстко заточенный под e-commerce&lt;/strong&gt;. Не универсальный &lt;strong&gt;«сайт обо всём»&lt;/strong&gt;, а именно магазин. И ключевая ставка здесь сделана на дизайн и на интеграции &amp;mdash; то, на чём обычно всё и ломается.&lt;/p&gt;
&lt;p&gt;С этим у &lt;strong&gt;Кита &lt;/strong&gt;как раз всё неплохо. Базовый набор &amp;mdash; ровно то, что нужно: обмен с 1С, «МойСклад», Яндекс Маркет, интеграция с Ozon и WB, retailCRM, amoCRM, Bitrix24. Можно подключить свой домен, фирменный стиль по мелочи, всё как положено.&lt;br /&gt;По оплатам &amp;mdash; Яндекс Pay и CloudPayments.&lt;br /&gt;По логистике &amp;mdash; Яндекс, СДЭК, Ozon Логистика.&lt;/p&gt;
&lt;p&gt;В итоге со старта получается &lt;strong&gt;очень приятный и взрослый набор&lt;/strong&gt;, без ощущения «песочницы».&lt;/p&gt;
&lt;p&gt;Отдельно стоит сказать про одну из ключевых фишек &amp;mdash; &lt;strong&gt;бесшовную интеграцию с Yandex ID&lt;/strong&gt;. Что это даёт на практике? Более высокую конверсию за счёт того, что данные пользователя уже заполнены. А если карта привязана &amp;mdash; покупка превращается буквально в пару кликов. Для небольшого интернет-магазина это огромная разница.&lt;/p&gt;
&lt;p&gt;Про дизайн. Его можно кастомить, но без фанатизма &amp;mdash; и это, кажется, осознанный выбор. Изначально Кит отлично ложится на fashion-сегмент, под который он, по ощущениям, и делался. Если хочется «вау-уникальность» или каких то супер кастомных интеграций &amp;mdash; это не сюда. &lt;strong&gt;Если хочется быстрее начать продавать &amp;mdash; вполне.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Создаётся ощущение, что Яндекс &lt;strong&gt;что-то знал&lt;/strong&gt; про рынок маркетплейсов и волну селлеров, которые оттуда пойдут. Вопрос который был в воздухе: зачем свой интернет-магазин, если можно выложить карточки на маркетплейс и сразу получать продажи? Со своим интернет-магазином нужно думать про маркетинг, трафик, аналитику, повторные продажи. Это сложно и долго.&lt;/p&gt;
&lt;p&gt;Но реальность сейчас такая: если ты продал на маркетплейсах на 5 млн рублей, &lt;strong&gt;2&amp;ndash;2,5 млн из них ты спокойно отдал&lt;/strong&gt; в виде комиссии, логистики и маркетинговых сборов. И тут возникает вполне логичный вопрос &amp;mdash; а неужели на своём интернет-магазине нельзя привлечь клиентов хотя бы на эти же 2 млн? При этом &lt;strong&gt;данные пользователей остаются у тебя&lt;/strong&gt;, их можно догревать, возвращать, продавать повторно. А это уже совсем другая экономика.&lt;/p&gt;
&lt;p&gt;Так что рынок разработки интернет-магазинов умер? И да, и нет.&lt;/p&gt;
&lt;p&gt;Этот вопрос поднимался ещё в тот момент, когда маркетплейсы начали активно захватывать рынок. Зачем свой магазин, если это затраты, куча проблем, ресурсы и неочевидная отдача? Ответ пришёл со временем. &lt;strong&gt;Свой интернет-магазин &amp;mdash; это бренд и прямой доступ к клиенту.&lt;/strong&gt; А значит, меньше зависимости от правил площадки и чуть более спокойный сон.&lt;/p&gt;
&lt;p&gt;В итоге что получается. Рынок разработки интернет-магазинов не умрёт. &lt;strong&gt;Яндекс Кит просто займёт свою нишу&lt;/strong&gt;, отжав у Тильды, WP и части типовых решений на Битриксе проекты небольших e-commerce. Если нужно что-то сложное, нетривиальное или B2B &amp;mdash; вариантов по-прежнему немного, и кастом никуда не денется.&lt;/p&gt;
&lt;p&gt;Со своей стороны мы планируем активно пробовать Яндекс Кит как ещё один инструмент &lt;strong&gt;быстрого запуска&lt;/strong&gt; для небольших e-commerce-проектов, где городить что-то большое и сложное просто нецелесообразно.&lt;/p&gt;
&lt;p&gt;Инструменты меняются. Смысл &amp;mdash; нет.&lt;/p&gt;
</description>
</item>

<item>
<title>Синхронное, асинхронное, конкурентное и параллельное выполнение — в чём разница простыми словами</title>
<guid isPermaLink="false">135</guid>
<link>https://alexeyit.ru/all/sinhronnoe-asinhronnoe-konkurentnoe-i-parallelnoe-vypolnenie-v-c/</link>
<pubDate>Wed, 28 Jan 2026 12:26:45 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/sinhronnoe-asinhronnoe-konkurentnoe-i-parallelnoe-vypolnenie-v-c/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/sled.png" width="1536" height="1024" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;h2&gt;&lt;strong&gt;В чём разница и почему это важно&lt;/strong&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Разработчики любят использовать термины из названия, которые для них звучат естественно, но  для большинства людей не связанных с разработкой эти термины могут пониматься совсем иначе. Этот текст &amp;mdash; для всех, кому приходится взаимодействовать с разработкой и тех плохо понимает разницу между терминами. &lt;/p&gt;
&lt;p&gt;После прочтения вы будете чётко понимать разницу между синхронным, асинхронным, конкурентным и параллельным выполнением &amp;mdash; и почему эти различия имеют практическое значение.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Как ускорить выполнение&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Если хочется, чтобы программа или сайт работали быстрее, вариантов на самом деле не так много.&lt;/p&gt;
&lt;p&gt;Можно купить более мощное железо.&lt;br /&gt;Можно делать меньше &amp;mdash; сократить функциональность или упростить бизнес-логику.&lt;br /&gt;Можно использовать более эффективные алгоритмы.&lt;br /&gt;Можно выполнять задачи параллельно, задействуя несколько ядер процессора.&lt;br /&gt;И можно сокращать время ожидания/отклика.&lt;/p&gt;
&lt;p&gt;Последний пункт часто недооценивают, хотя именно он даёт наибольший эффект во многих системах.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Асинхронность и ожидание&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Рассмотрим простой бытовой пример &amp;mdash; стирку.&lt;/p&gt;
&lt;p&gt;Сортировка вещей перед стиркой занимает 15 минут.&lt;br /&gt;Сама стирка длится 40 минут.&lt;br /&gt;Развесить и разложить чистое &amp;mdash; ещё около 10 минут.&lt;/p&gt;
&lt;p&gt;Если делать всё строго последовательно, процесс выглядит так: сначала сортируем вещи, затем запускаем стирку и просто ждём, после чего разбираем чистое. В сумме получается 65 минут.&lt;/p&gt;
&lt;p&gt;Но ключевой момент в том, что &lt;strong&gt;стирка не требует вашего участия&lt;/strong&gt;. Вы можете запустить машину и заняться другими делами &amp;mdash; разобрать почту, приготовить ужин, навести порядок. Машина работает, а вы не тратите время на ожидание.&lt;/p&gt;
&lt;p&gt;Именно так асинхронность сокращает общее время. Работа не становится быстрее сама по себе, но исчезают паузы, в которые ничего не происходит.&lt;/p&gt;
&lt;p&gt;Если часть действий выполняется параллельно &amp;mdash; например, вдвоем &amp;mdash; реальное время сокращается ещё сильнее. При этом суммарное количество затраченных человеко-минут может даже увеличиться, но результат будет получен раньше.&lt;/p&gt;
&lt;p&gt;Здесь важно различать два понятия: есть &lt;strong&gt;время выполнения&lt;/strong&gt; (сколько усилий было потрачено в сумме), и есть &lt;strong&gt;реальное время&lt;/strong&gt; &amp;mdash; сколько прошло от начала до конца.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Последовательное, конкурентное и параллельное выполнение&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Последовательная модель выполняет задачи строго шаг за шагом.&lt;br /&gt;Параллельная &amp;mdash; действительно выполняет их одновременно.&lt;br /&gt;Между ними есть ещё одна модель &amp;mdash; конкурентная, или чередующаяся.&lt;/p&gt;
&lt;p&gt;Представим задачу, сильно нагружающую процессор, например распаковку большого архива. Если бы система работала строго последовательно, на время распаковки она бы полностью «зависла»: нельзя было бы открыть браузер или даже передвинуть курсор.&lt;/p&gt;
&lt;p&gt;На практике этого не происходит. Система периодически приостанавливает распаковку, чтобы дать процессорное время другим задачам &amp;mdash; обработке ввода, интерфейсу, фоновым процессам. Затем возвращается к распаковке.&lt;/p&gt;
&lt;p&gt;Задачи не выполняются одновременно, но они &lt;strong&gt;чередуются&lt;/strong&gt;. Их выполнение перекрывается по времени, и система остаётся отзывчивой.&lt;/p&gt;
&lt;p&gt;Такое выполнение обеспечивается конкурентными потоками. В повседневной речи термины «конкурентное» и «чередующееся» часто используют как синонимы.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Исходящие запросы: синхронно и асинхронно&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Представим веб-краулер &amp;mdash; программу, которая обходит сайт целиком. Она загружает страницу, извлекает контент и ссылки, затем повторяет этот процесс для каждой найденной ссылки.&lt;/p&gt;
&lt;p&gt;Основная проблема здесь не в вычислениях, а в ожидании сети. Каждая страница может загружаться доли секунды, но при большом количестве страниц эти задержки накапливаются в минуты и часы.&lt;/p&gt;
&lt;p&gt;Пока данные не получены, выполнение просто «стоит». Процессор при этом простаивает.&lt;/p&gt;
&lt;p&gt;Асинхронный вариант выглядит иначе. Здесь, пока идёт ожидание ответа от сети, система может выполнять другие задачи. Это требует дополнительных усилий при разработке, но даёт серьёзный прирост производительности, если узкое место &amp;mdash; ввод-вывод.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Входящие запросы: синхронно и асинхронно&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Теперь посмотрим на ситуацию со стороны сервера.&lt;/p&gt;
&lt;p&gt;Пользователь отправляет запрос, сервер собирает данные &amp;mdash; из базы, из внешних сервисов &amp;mdash; и возвращает ответ. Каждый такой шаг занимает время, и пользователей обычно много.&lt;/p&gt;
&lt;p&gt;Самая &lt;strong&gt;простая модель&lt;/strong&gt; &amp;mdash; обрабатывать запросы строго по очереди. Но если первый запрос выполняется несколько секунд, остальные будут просто &lt;strong&gt;ждать&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Обычно проблему пытаются решить запуском &lt;strong&gt;нескольких&lt;/strong&gt; потоков или процессов. Но их количество ограничено, и при большом числе &lt;strong&gt;одновременных&lt;/strong&gt; запросов перестаёт масштабироваться.&lt;/p&gt;
&lt;p&gt;Ключевое наблюдение в том, что сервер чаще всего не упирается в процессор. Он ждёт данные &amp;mdash; от базы данных или других сервисов &amp;mdash; и в это время ничего полезного не делает.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Асинхронная&lt;/strong&gt; &lt;strong&gt;модель&lt;/strong&gt; позволяет задаче, которая ждёт ответа, временно уступить выполнение другим задачам. В итоге сервер может обрабатывать значительно больше одновременных запросов, сокращая общее время ожидания для пользователей. Эффект особенно заметен при высокой нагрузке.&lt;/p&gt;
</description>
</item>

<item>
<title>Почему классический репрайсер для Ozon и Wildberries уже не работает — и что мы строим вместо него</title>
<guid isPermaLink="false">127</guid>
<link>https://alexeyit.ru/all/pochemu-klassicheskiy-reprayser-dlya-ozon-i-wildberries-uzhe-ne/</link>
<pubDate>Wed, 19 Nov 2025 14:39:32 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/pochemu-klassicheskiy-reprayser-dlya-ozon-i-wildberries-uzhe-ne/</comments>
<description>
&lt;p&gt;&lt;h1&gt;&lt;strong&gt;SaaS был ошибкой? Возможно. Часть 4&lt;/strong&gt;&lt;/h1&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/price2.png" width="1195" height="743" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Продолжаю делиться нашим приключением в продуктовой вселенной.&lt;br /&gt;Прошлые главы &amp;mdash; &lt;a href="https://t.me/alexeyitru/116"&gt;раз&lt;/a&gt;, &lt;a href="https://t.me/alexeyitru/138"&gt;два &lt;/a&gt;и &lt;a href="https://t.me/alexeyitru/172"&gt;три &lt;/a&gt;&amp;mdash; задавали контекст. С тех пор прошёл месяц, и изменений накопилось больше, чем я ожидал.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Месяц кастдевов&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;За это время провёл около двадцати интервью с бизнесом и людьми, которые так или иначе связаны с маркетплейсами: от продуктовых специалистов до руководителей направлений МП. Хотел понять простую вещь &amp;mdash; кто и как управляет ценами, где автоматизация действительно работает, а где все по-старинке.&lt;/p&gt;
&lt;p&gt;И выводы получились неоднозначные. В SaaS-сегменте проблема, ради которой всё затевали, почти отсутствует, вроде. Возможно, идти туда &amp;mdash; ошибка. Но мы всё равно проверим &amp;mdash; иногда истинная боль прячется глубже.&lt;/p&gt;
&lt;p&gt;А вот в enterprise-историях проблема подтверждается. Каждый решает её по-своему, костылями и полуавтоматом. У селлеров с небольшим ассортиментом всё проще &amp;mdash; там хватает существующих сервисов. Я насчитал больше двадцати живых решений, и у каждого свои особенности: ограничение на количество товаров, странные тарифы и отсутствие нормальных интеграций. Всё руками, о связке с 1С или динамическими ценами часто даже не мечтают.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Сменить позиционирование&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;На фоне всех этих находок стало понятно, что классическое слово «репрайсер» давно умерло. Актуальность была пару лет назад, сегодня это звучит как термин из музейной витрины. Поэтому решили честно обновить концепцию. Теперь это &lt;strong&gt;омниканальная платформа мониторинга, анализа и управления ценами&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Так получается точнее и честнее отражать то, что мы реально делаем &amp;mdash; и то, чего нет у конкурентов.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Что сделали по разработке&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Перезапустили сайт решения. Хотелось собрать всё на Тильде, но пошли другим путём &amp;mdash; сделали максимально примитивно, чтобы проверить конверсию самого подхода. Личного кабинета пока нет, но рассчитываем довести его до ума за ближайшие одну&amp;ndash;три недели.&lt;/p&gt;
&lt;p&gt;Параллельно запустили новые стратегии. Пришлось собрать новую схему работы с ценой: учитывать маржу, доставку, бонусы, акции &amp;mdash; всё, что влияет на финальный результат.&lt;/p&gt;
&lt;p&gt;Личный кабинет стал чуть красивее обычного орчида, но ещё не тот результат, от которого отваливается челюсть, но в целом окей. Зато сделали авторизацию через email и OTP &amp;mdash; СМС подключим позже.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Интересные находоки&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Нашли хак на Ozon. Если товар стоит в акции, менять цену нельзя &amp;mdash; она пишется, но берётся медианная. Однако если сначала вынуть товар из акции, обновить цену и вернуть обратно &amp;mdash; всё работает. Абсолютно легально, пока.&lt;/p&gt;
&lt;p&gt;Построили внутреннюю систему ротации прокси, чтобы они не выгорали пачками. Она следит за состоянием, и если какой-то прокси сгорает, летит алерт, что нужно пополнить запас.&lt;/p&gt;
&lt;p&gt;Добавили альтернативный источник данных &amp;mdash; из личного кабинета маркетплейсов. Точность ниже, но скорость выше. Правда, не для всех товаров.&lt;/p&gt;
&lt;p&gt;По мелочам &amp;mdash; навели порядок в настройках, закрыли баги, подтянули инфраструктурные детали.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Что дальше&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;В ближайшее время запускаем рекламу. Начнём с Директа &amp;mdash; понятно, что это не самый эффективный канал для нашего типа продукта, но нам нужно проверить прямой спрос, экономику клика и набрать людей на первичный кастдев. Вероятнее всего, этот канал приведёт селлеров с небольшим оборотом &amp;mdash; и возможно, у них просто нет проблемы. Это тоже нужно подтвердить или опровергнуть.&lt;/p&gt;
&lt;p&gt;Параллельно будем выходить в аутрич через Telegram, чтобы дотянуться до среднего и крупного сегмента. Тут уже интереснее &amp;mdash; посмотрим, что получится.&lt;/p&gt;
&lt;p&gt;В разговоры с экспертами добавился новый блок &amp;mdash; прикидка трендов. Что будет дальше?&lt;/p&gt;
&lt;p&gt;API может стать платным. Больно, но не смертельно. Цена персонализируется до безумия &amp;mdash; непонятно, что будет с РРЦ и МРЦ. Запрет на изменение цен по API? Сомнительно, но и на это у нас есть запасной вариант.&lt;/p&gt;
&lt;p&gt;Далее по плану. &lt;/p&gt;
&lt;p&gt;Запускаем SaaS.&lt;br /&gt;Доделываем стратегии.&lt;br /&gt;Включаем рекламу и аутрич.&lt;br /&gt;А дальше &amp;mdash; посмотрим, что покажут цифры и люди.&lt;/p&gt;
</description>
</item>

<item>
<title>Модуль миграции товаров в интернет-магазин на Битрикс | Быстрый перенос с маркетплейсов</title>
<guid isPermaLink="false">115</guid>
<link>https://alexeyit.ru/all/modul-migracii-tovarov-v-internet-magazin-na-bitriks-bystry-pere/</link>
<pubDate>Fri, 03 Oct 2025 09:26:13 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/modul-migracii-tovarov-v-internet-magazin-na-bitriks-bystry-pere/</comments>
<description>
&lt;p&gt;Продолжу тему из прошлого поста про разработку продуктов. На этот раз мы прыгнули в историю с селлерами &amp;mdash; точнее, нас туда уже занесло.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/b-module.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Маркетплейсы продолжают закручивать гайки. К комиссиям добавляется и НДС. В итоге продавцам становится всё сложнее удерживать маржинальность. У Amazon, например, комиссии на некоторых категориях доходят до 50% &amp;mdash; и это уже не страшилка, а реальность.&lt;/p&gt;
&lt;p&gt;Многие селлеры просто не вывозят в таких условиях и начинают искать альтернативы.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Что предлагает рынок&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Рынок реагирует по-своему. Яндекс недавно запустил KIT &amp;mdash; по сути, конструктор интернет-магазина, заточенный под fashion-сегмент. Для небольших продавцов логично и дальше использовать тильду или аналогичные платформы. Запустить витрину на 50&amp;ndash;100 товаров так можно быстро и недорого.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Где возникает разрыв&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Проблема начинается там, где у селлера не сотня, а тысячи или десятки тысяч позиций. Где важна интеграция с 1С, синхронизация остатков, работа с прайсами и автоматизация процессов.&lt;/p&gt;
&lt;p&gt;Здесь простые конструкторы уже не тянут. А собственный магазин нужен не «через год после долгой разработки», а прямо сейчас, чтобы проверить гипотезу: полетит ли онлайн-продажа вне маркетплейсов или нет.&lt;/p&gt;
&lt;p&gt;В России из серьёзных платформ по сути остаётся Bitrix и пара его аналогов.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Наш кейс и решение&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Мы пошли по пути минимального входа: &lt;strong&gt;Bitrix + готовое решение + наш модуль миграции&lt;/strong&gt;. Такой старт-пакет позволяет быстро запуститься и сразу получить рабочий интернет-магазин.&lt;/p&gt;
&lt;p&gt;Модуль решает самую больную часть &amp;mdash; миграцию контента. Он умеет подтянуть каталог с нужной площадки (Ozon, Wildberries, Яндекс.Маркет, Lamoda) и автоматически разложить товары в Bitrix. Получаем готовую базу, с которой можно работать.&lt;/p&gt;
&lt;p&gt;Дальше уже можно подключить 1С, настроить синхронизацию и развивать проект. Главное &amp;mdash; продавец экономит недели рутинного копипаста и может сразу проверить спрос на своей площадке.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Что дальше&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Мы начали писать модуль, потому что такие запросы стали прилетать регулярно. И поняли, что проблема у рынка типовая.&lt;/p&gt;
&lt;p&gt;Сейчас модуль работает в закрытом режиме. На маркетплейсе Битрикса вы его не найдёте. Но если тема вам актуальна &amp;mdash; пишите, обсудим доступ и детали.&lt;/p&gt;
</description>
</item>

<item>
<title>Уязвимости Битрикс и Laravel — реальные кейсы и простые меры защиты</title>
<guid isPermaLink="false">112</guid>
<link>https://alexeyit.ru/all/uyazvimosti-bitriks-i-laravel-realnye-keysy-i-prostye-mery-zasch/</link>
<pubDate>Tue, 16 Sep 2025 18:28:40 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/uyazvimosti-bitriks-i-laravel-realnye-keysy-i-prostye-mery-zasch/</comments>
<description>
&lt;p&gt;Безопасность в IT &amp;mdash; как страховка. Пока ничего не происходит, кажется, что можно жить спокойно и не тратить время. Но как только случается атака, всё внимание переключается туда, и гайки начинают закручивать даже там, где это мешает бизнесу.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/ChatGPT-Image-16-sent.-2025-g.,-18_27_17.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Нужно понимать: собрать систему без единой лазейки на 100% в реальном мире почти невозможно, особенно если она подключена к сети. Можно только снизить риск заражения. Если кто-то действительно захочет взломать &amp;mdash; он найдёт способ: сотруднику пришлют «милого котика» в письме, домовую сеть взломают или найдут другой вектор. Большинство атак происходят автоматически &amp;mdash; боты сканируют сайты, находят целевые CMS и пытаются эксплуатировать известные уязвимости. Если закрыть известные дыры и поддерживать гигиену системы &amp;mdash; шансы спать спокойно вырастут.&lt;/p&gt;
&lt;p&gt;Я знаю, о чём говорю: по диплому у меня «комплексная защита объектов информатизации», и за годы в веб-разработке мы видели всё &amp;mdash; от ежедневных DDoS по 2 терабайта трафика до заражённых модулей и майнеров, внедрённых через пакеты.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Что реально ломают&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Чаще всего достаётся CMS: в Битриксе это модули и готовые решения, которые не обновляются вовремя; в WordPress ситуация ещё хуже. Laravel-проекты тоже не застрахованы: последние пару лет участились случаи заражения через сторонние пакеты, особенно бесплатные.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Что работает против уязвимостей&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Регулярные обновления ядра и модулей, плюс актуальная версия PHP (сейчас минимум 8.2).\&lt;/li&gt;
&lt;li&gt;Использование штатных инструментов: проактивный фильтр, защита админки по IP, одноразовый вход, настройка безопасных паролей.&lt;/li&gt;
&lt;li&gt;Ограничение доступа к серверу: FTP, SSH, база &amp;mdash; только по IP.&lt;/li&gt;
&lt;li&gt;Периодическое сканирование на уязвимости: встроенный модуль безопасности в Битрикс + AI-Bolit.&lt;/li&gt;
&lt;li&gt;Мониторинг серверов и кода: чем раньше обнаружен вирус, тем проще вычистить.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Бэкапы &amp;mdash; наше всё&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Они должны быть не просто «где-то там», а храниться на другом сервере или хотя бы в виде снапшотов от провайдера. Минимум месяц-два истории, обязательная проверка целостности и тестовые восстановления.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;ТруСтори&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;К нам однажды вернулся клиент, с которым мы уже не работали год. Новый подрядчик не смог вычистить вирусы. Спас только бэкап: откатились на момент до атаки, обновили систему &amp;mdash; и всё заработало. Если бы не копия, проект мог бы умереть.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Где перегибают&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Иногда в погоне за безопасностью «закручивают гайки» так, что разработчики не могут работать, а бизнес теряет скорость. Баланс важен: защита должна быть системной, но не мешать развитию.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;40 рекомендаций для условно безопасной веб-системы&lt;/h2&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Обновите ядро и все модули/пакеты до последних версий.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Используйте актуальную версию PHP (8.2+).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Удалите неиспользуемые модули и пакеты.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Проверяйте зависимости на уязвимости (composer audit, встроенные сканеры).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Включите WAF/проактивный фильтр.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ограничьте доступ к админке и API по IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Включите двухфакторную авторизацию для админов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Используйте только сложные пароли, настройте их регулярную смену.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Запретите доступ к FTP/SSH/БД извне, кроме доверенных IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Закройте публичный доступ к .env, конфигам, логам.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Отключите показ ошибок на продакшене.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Настройте права на файлы и каталоги (минимально необходимые).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Используйте HTTPS везде.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Настройте корректные заголовки безопасности (CSP, HSTS, X-Frame-Options).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Защитите формы CSRF-токенами.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ограничьте CORS только доверенными доменами.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Сканируйте проект встроенными и внешними сканерами (AI-Bolit, OWASP ZAP).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Подключите мониторинг логов авторизаций, ошибок и изменений файлов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Настройте уведомления о подозрительных активностях.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Проверяйте целостность файлов ядра/фреймворка.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Раз в полгода проводите внешний аудит безопасности.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Храните секреты и ключи только в переменных окружения, не в коде.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Проверьте APP_KEY (Laravel) или аналоги &amp;mdash; он должен быть надёжным.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Используйте очереди/джобы для тяжёлых процессов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Минимизируйте количество администраторов с полными правами.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Разграничьте права доступа для редакторов, маркетологов и разработчиков.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Отключите или ограничьте системные консольные команды на продакшене.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Настройте регулярные бэкапы БД и файлов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Храните бэкапы на отдельном сервере/в облаке.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Проверяйте возможность восстановления из бэкапов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Храните несколько версий бэкапов за последние 1&amp;ndash;2 месяца.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Используйте Fail2Ban или аналог для защиты от брутфорса.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Настройте Firewall (сетевой и на уровне веб-сервера).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ограничьте доступ к /storage, /bootstrap, /bitrix/admin и другим критичным директориям.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Удалите или закройте от доступа тестовые и dev-сервера.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Включите автоматическое обновление ОС и критичных пакетов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Используйте CDN/DDoS-защиту (Cloudflare, DDoS-Guard).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Подключите систему централизованного логирования (ELK, Sentry, Zabbix).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Регулярно проверяйте базу CVE на уязвимости используемых решений.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Делайте пентест/нагрузочное тестирование хотя бы раз в год.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Вывод&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Безопасность &amp;mdash; это не свод костылей после атаки, а элементарная гигиена: обновления, мониторинг, доступы и бэкапы. Работает не трогай &amp;mdash; худший совет, потому что атаки происходят именно тогда, когда всем кажется, что всё спокойно.&lt;/p&gt;
&lt;p&gt;

Поэтому если у вас до сих пор живёт старый «БУС», проекты на ранних версиях Laravel или давно не обновлявшийся Битрикс24 — сейчас тот самый момент, когда стоит обновить. Если вы ждали сигнала, то вот он. &lt;/p&gt;
</description>
</item>

<item>
<title>Кастомизация Битрикс24: мифы и реальные способы доработки коробки</title>
<guid isPermaLink="false">111</guid>
<link>https://alexeyit.ru/all/kastomizaciya-bitriks24-mify-i-realnye-sposoby-dorabotki-korobki/</link>
<pubDate>Fri, 12 Sep 2025 09:06:02 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/kastomizaciya-bitriks24-mify-i-realnye-sposoby-dorabotki-korobki/</comments>
<description>
&lt;p&gt;Таки-таки всем привет. Мы много работаем с корпоративными порталами на Битрикс24 и регулярно сталкиваемся с убеждением: &lt;strong&gt;его кастомизировать нельзя&lt;/strong&gt;. В народе ходит мнение, что это огромный коробочный монолит, любое вмешательство ломает обновления, и лучше туда вообще не лезть.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/b24.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;h2&gt;Откуда растут мифы&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Причины этого предвзятого отношения во многом идут из прошлого. Наследие «Битрикс: Управление сайтом» до сих пор тянется за Б24: про ту систему говорили, что она медленная, тяжёлая и сложная в доработках. Плюс многие, кто когда-то пробовал кастомизировать портал «на коленке», сталкивались с проблемами и делали вывод, что «ничего хорошего из этого не выйдет». На деле же проблема была не в платформе, а в подходе.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Правда в том, что кастомизация не только возможна, но и отлично работает&lt;/strong&gt;, если понимать, какими способами пользоваться и что при этом учитывать.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Простые варианты&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Самый лёгкий способ &amp;mdash; это веб-хуки. Входящие и исходящие позволяют вытащить данные из Б24 и положить что-то обратно. Возможностей хватает, чтобы автоматизировать базовые процессы и не залезать глубоко в систему.&lt;/p&gt;
&lt;p&gt;Следующий уровень &amp;mdash; локальные приложения. Это по сути кусок кода, который может лежать где угодно, не обязательно на том же сервере. Такой подход удобен, если нужно запускать регулярные задачи &amp;mdash; например, искать дубликаты в базе контактов.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Когда нужно больше&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Если простых инструментов мало, можно идти дальше и писать свои модули. Это уже почти без ограничений: хочешь &amp;mdash; дописывай новый функционал, хочешь &amp;mdash; меняй бизнес-логику. По сути это то же самое, что локальное приложение, только в более тесной интеграции с системой.&lt;/p&gt;
&lt;p&gt;А если задача стоит глобальная &amp;mdash; например, поменять внешний вид штатной оргструктуры или реализовать виртуальную очередь для блока маркетинга, чтобы почтовый сервер не захлёбывался, &amp;mdash; тогда вариантов становится меньше.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Подход «в лоб»&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Один способ &amp;mdash; взять нужный компонент или модуль, перекинуть его в папку local и дорабатывать под свои нужды. В целом ядро обновляется без проблем, но при крупных изменениях есть риск, что кастомный код перестанет работать. В такой ситуации остаётся два варианта: либо переносить изменения заново, либо забирать свежие исходники и снова накатывать свои доработки.&lt;/p&gt;
&lt;p&gt;По практике: такие решения могут спокойно жить годами, но могут ломаться и раз в полгода. Всё зависит от того, как часто Битрикс выпускает обновления для конкретного модуля.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Подход «изящный»&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Другой способ &amp;mdash; использовать &lt;strong&gt;bxjs&lt;/strong&gt;. Это библиотека, через которую строится значительная часть пользовательских интерфейсов. Если точно понимаешь, что и где нужно поменять, можно написать свой JS и встроить его в нужное место.&lt;/p&gt;
&lt;p&gt;Элегантность подхода в том, что мы &lt;strong&gt;не лезем в ядро вообще&lt;/strong&gt;. При обновлениях ничего не ломается, а если кастомный JS вдруг перестал работать, почти всегда продолжает функционировать стандартный интерфейс. Портал остаётся живым, и пользователи не страдают. Минус в том, что если ядро меняет JS-логику, кастом придётся чинить. Но в этом методе как раз и есть красота: отвалился кастом &amp;mdash; система всё равно работает.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Другие возможности&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Есть ещё виджеты &amp;mdash; например, в контакт-центре можно добавить свой блок. Можно работать через Bitrix24 UI Kit, использовать ui.buttons или даже встроить iFrame. В целом никто не мешает построить свой фронт на Vue или React, но это уже отдельная большая тема.&lt;/p&gt;
&lt;p&gt;Иногда кастомизация делается через наследование классов с выносом логики в модуль. А вот старый добрый init.php в коробочных решениях лучше не трогать &amp;mdash; больше проблем, чем пользы.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Итоги&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Всё сводится к двум подходам: один быстрый и предсказуемый, но требующий поддержки после обновлений, другой &amp;mdash; изящный и безопасный для ядра, но менее прогнозируемый. &lt;strong&gt;Любая кастомизация Б24 &amp;mdash; это компромисс между скоростью, качеством и стабильностью.&lt;/strong&gt; И задача разработчика &amp;mdash; правильно выбрать баланс для&lt;/p&gt;
</description>
</item>

<item>
<title>Self-hosted Sentry: опыт внедрения и настройка мониторинга ошибок</title>
<guid isPermaLink="false">110</guid>
<link>https://alexeyit.ru/all/self-hosted-sentry-opyt-vnedreniya-i-nastroyka-monitoringa-oshib/</link>
<pubDate>Tue, 09 Sep 2025 15:53:45 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/self-hosted-sentry-opyt-vnedreniya-i-nastroyka-monitoringa-oshib/</comments>
<description>
&lt;p&gt;Когда мы только начинали, любое сообщение от клиента превращалось в стресс. Звонок: «У нас не работает форма». И дальше вечные расспросы: какое устройство, какой браузер, что именно нажимали? Танцы с бубном вокруг поиска причины занимали часы и съедали нервы.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/space-1.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Со временем стало понятно: без системы мониторинга жить нельзя. Нужно что-то, что будет собирать логи и с фронта, и с бэка, показывать полную картину. Так в нашу жизнь вошёл Sentry. Тогда его ещё можно было оплатить картой из РФ, и мы начали присматриваться.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Попытки найти замену&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;После первых тестов был долгий период экспериментов с аналогами. Самый заметный из них &amp;mdash; GlitchTip. В облаке он казался нормальным вариантом, но в self-hosted быстро вскрылись ограничения. Базовые и интуитивные графики, которые есть в Sentry, там просто отсутствовали. Мы страдали с ним месяцев шесть-восемь, но в итоге признали: полноценной заменой это не станет.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Почему не сразу self-hosted Sentry&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Казалось бы, ответ на поверхности &amp;mdash; подними свой сервер с Sentry и работай. Но тут встаёт проблема ресурсов. Система прожорливая, особенно если у вас десяток проектов, которые могут генерировать по 100 тысяч алертов в день. Сервер ложится, команда нервничает.&lt;/p&gt;
&lt;p&gt;Поэтому вначале мы сомневались. Но потом приняли решение: «Гори оно огнём». Подняли свой сервер и развернули self-hosted Sentry. Первые месяцы ушли на оптимизацию: настройка лимитов, перераспределение ресурсов, чистка мусора. Постепенно система стала жить на адекватных мощностях.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Основные блоки Sentry&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Проекты&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;В Sentry всё начинается с проекта. Для каждого приложения или модуля можно завести отдельный проект: фронт, бэк, мобильное приложение. Это удобно, если у компании несколько сервисов или большой монолит, разбитый на части.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;События (Events)&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;Каждая ошибка или перформанс-проблема фиксируется как событие. В нём хранится полный набор данных: стек вызовов, заголовки, браузер, IP, параметры пользователя.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Алерты (Alerts)&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;Система умеет настраивать алерты: уведомления в почту, Slack, Telegram или другие интеграции. Это позволяет реагировать на проблемы сразу, а не ждать звонка от клиента.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Issues&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;Похожие события объединяются в один «Issue» &amp;mdash; это удобно, когда один баг воспроизводится сотни раз. Разработчики видят статистику и могут фокусироваться на корне проблемы, а не на разрозненных логах.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Performance Monitoring&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;Кроме ошибок, Sentry отслеживает скорость работы приложений: медленные запросы, долгие транзакции, узкие места.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Интеграции Sentry&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Sentry поддерживает большинство популярных фреймворков и CMS:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Laravel, Symfony, Django, Flask, Spring, .NET, Node.js, Ruby on Rails, Go.&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; Vue.js, React, Angular, Svelte, jQuery.&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;CMS:&lt;/strong&gt; Bitrix, WordPress, Drupal, Joomla.&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;Мобильные приложения:&lt;/strong&gt; iOS (Swift, Objective-C), Android (Kotlin, Java), React Native, Flutter.&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;DevOps и инфраструктура:&lt;/strong&gt; интеграции с Docker, Kubernetes, GitHub, GitLab, Jira, Slack, Telegram.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Чем удобен self-hosted формат&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;При self-hosted развёртывании доступны все основные блоки и интеграции, как и в облачной версии. Главное отличие &amp;mdash; ресурсы и поддержка берёшь на себя, но взамен получаешь полный контроль над данными и гибкость в настройках.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Как мы интегрируем сейчас&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;На проектах процесс отлажен:&lt;br /&gt; &amp;mdash; Laravel и Vue &amp;mdash; берёшь мануал и подключаешь туда, где нужен мониторинг.&lt;br /&gt; &amp;mdash; Bitrix &amp;mdash; ещё проще: ставишь модуль, закидываешь ключи, и все алерты автоматически уходят в Sentry.&lt;/p&gt;
&lt;p&gt;В итоге по каждой ошибке у нас полный набор данных: браузер, хосты, заголовки, stack trace, куки. Можно спокойно разбираться, а не притворяться Шерлоком Холмсом.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Чем это обернулось&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Сейчас мы почти всегда включаем Sentry клиентам по умолчанию &amp;mdash; и на фронт, и на бэк. Это помогает команде держать под контролем релизы, быстрее находить и исправлять проблемы, экономить часы и нервы.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Вывод:&lt;/strong&gt; self-hosted Sentry &amp;mdash; не подарок. Он требует ресурсов, внимания и оптимизации. Но это инструмент, который реально работает. И если выбирать между хаосом и спокойной жизнью команды, выбор очевиден.&lt;/p&gt;
</description>
</item>

<item>
<title>История систем релизов: от FTP и SVN до CI/CD, GitOps и Progressive Delivery</title>
<guid isPermaLink="false">102</guid>
<link>https://alexeyit.ru/all/istoriya-sistem-relizov-ot-ftp-i-svn-do-ci-cd-gitops-i-progressi/</link>
<pubDate>Mon, 25 Aug 2025 17:03:01 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/istoriya-sistem-relizov-ot-ftp-i-svn-do-ci-cd-gitops-i-progressi/</comments>
<description>
&lt;p&gt;Одна большая боль нашего милого IT-рынка &amp;mdash; релизы. Выкатываем новые фичи, а где-то в другом месте что-то отваливается. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/ci-cd.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Сегодня я не буду обсуждать мониторинг, тестирование или организацию процессов. Хочу сделать исторический экскурс &amp;mdash; как за последние двадцать лет менялись системы релизов, и почему каждая новая итерация рождалась из боли.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;1990-е &amp;ndash; начало 2000-х. FTP и SSH&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;На заре всё было просто: есть сервер, есть доступ по FTP или SSH, и есть код, который надо «просто закинуть». Мы так делали. И вы так делали. Ошибки? Они уже на продакшене.&lt;/p&gt;
&lt;p&gt;Откатиться можно было только через бэкап (и то, если вчера кто-то вспомнил его сделать). Иногда бэкап был месячной давности, и откат означал потерю данных и криков в чате от бухгалтерии.&lt;/p&gt;
&lt;p&gt;Особенности времени: никаких веток кода, никаких тестовых окружений, всё «боевое». Код в проде менялся в реальном времени, и правка одной строки в файле могла как починить баг, так и положить весь проект.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;2000-е. CVS, SVN и «релизы по кнопке»&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Когда команды подросли, стало понятно: хаос с FTP убивает проект. Пришли системы контроля версий. Сначала CVS, потом Subversion (SVN).&lt;/p&gt;
&lt;p&gt;Это позволило хотя бы видеть, кто и что менял. Появились staging-серверы, где можно было протестировать сборку перед выкладкой. Но процесс оставался ручным: разработчик собирал билд на своей машине, проверял его, а затем «по кнопке» или скриптом отправлял на прод.&lt;/p&gt;
&lt;p&gt;Проблемы? Конфликты кода при слиянии веток, разъехавшиеся окружения «у меня работает &amp;mdash; на сервере нет» и ночные выкладки с кофе и пиццей.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;2005&amp;ndash;2010. Git и первые шаги CI/CD&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Git родился в 2005 году, но в массовое использование в компаниях пришёл только к началу 2010-х, когда GitHub и GitLab сделали его доступным. Вместе с ним пришла мода на CI/CD &amp;mdash; автоматическую сборку и деплой после коммита.&lt;/p&gt;
&lt;p&gt;Казалось, это должно было убить все баги: разработчик пушит код, CI собирает, тесты прогоняются, и всё летит на сервер. Проблема в том, что тесты писали не всегда, а иногда тесты сами были кривыми. И да &amp;mdash; баги по-прежнему попадали на прод. Но скорость выкладок выросла в разы, а человеческий фактор в сборке &amp;mdash; снизился.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;2010-е. Blue-green deployment&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Следующая ступень &amp;mdash; сине-зелёные деплои. Суть: есть два окружения. Одно &amp;mdash; активное, второе &amp;mdash; резервное. Новая версия заливается в резервное, проверяется, и при готовности трафик переключается туда. Если что-то пошло не так &amp;mdash; можно быстро вернуться назад.&lt;/p&gt;
&lt;p&gt;Плюсы: минимальные простои, безопасный откат. Минусы: нужна двойная инфраструктура, а значит, удвоенные расходы. Для стартапа &amp;mdash; дорого, для крупной компании &amp;mdash; must have.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Середина 2010-х. Канареечные релизы и feature flags&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Канареечный релиз &amp;mdash; когда новая фича выкатывается сначала на 1&amp;ndash;5% пользователей. Если всё ок &amp;mdash; увеличиваем процент, пока не получат все. Если нет &amp;mdash; тихо откатываем, и никто, кроме «канареек», не заметил.&lt;/p&gt;
&lt;p&gt;Вместе с этим в моду вошли feature flags &amp;mdash; фичи выкатываются заранее, но выключены конфигом до нужного момента. Это позволяло тестировать код в продакшене без полного релиза и быстро включать/выключать функционал.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Сейчас. Progressive delivery, GitOps и «релизы без страха»&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Сегодняшний стек релизных практик выглядит как конструктор: каждая команда собирает свой набор подходов под конкретный продукт, бюджет и скорость обновлений.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Progressive delivery&lt;/strong&gt; &amp;mdash; логичное развитие канарейки. Здесь идея в том, что релиз &amp;mdash; это не момент, а процесс. Выкатываем обновление сначала на минимальную аудиторию, мониторим метрики (ошибки, время отклика, конверсии), и только после зелёных сигналов расширяем охват. Иногда это делается волнами: сначала внутренняя команда, потом 1%, потом 10%, 50% и только после этого 100%. Такой подход особенно ценен для продуктов с большой базой пользователей, где ошибка на продакшене стоит дорого &amp;mdash; как в деньгах, так и в репутации.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feature flags&lt;/strong&gt; в 2020-е стали обязательным инструментом в арсенале. Они позволяют выкатывать код заранее, но держать фичу выключенной до нужного момента. Это удобно, если нужно «открыть» функционал к определённой дате, тестировать разные варианты интерфейса на живой аудитории или быстро реагировать на сбои &amp;mdash; просто выключив флаг вместо отката целого релиза.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitOps&lt;/strong&gt; закрыл старую проблему «инфраструктура живёт отдельно от кода». Теперь и код, и конфигурация серверов, и пайплайны сборки лежат в одном репозитории. Любое изменение &amp;mdash; через pull-реквест, с автоматической проверкой и прозрачной историей. Это упростило повторяемость окружений и сделало релизы более предсказуемыми. А в связке с Kubernetes, Terraform и ArgoCD всё стало максимально автоматизировано: пушишь изменения в репозиторий, и система сама раскатывает их на нужные окружения.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Релизы без страха&lt;/strong&gt; &amp;mdash; идеал, к которому все идут. Но правда в том, что даже с progressive delivery и GitOps проблемы всё равно бывают. Просто теперь они реже, их проще локализовать и быстрее откатывать. И да, ночных выкладок «все в офисе, пока не починим» стало заметно меньше. А значит, можно не только быстрее выкатывать продукт, но и жить в чуть более человеческом ритме.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Итог&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Любой из этих методов может работать. Где-то старые схемы дешевле и проще, где-то без канареек и blue-green нельзя.&lt;/p&gt;
&lt;p&gt;Мы для своих проектов остановились на Git с CI/CD &amp;mdash; это наш компромисс между скоростью, безопасностью и экономикой. Он не решает все проблемы, но заметно снижает их количество и позволяет спать ночью, а не ждать три часа у консоли, пока выкатывается новая версия.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
</description>
</item>

<item>
<title>AI на стероидах: как искусственный интеллект усиливает сильных и вытесняет слабых</title>
<guid isPermaLink="false">100</guid>
<link>https://alexeyit.ru/all/ai-na-steroidah-kak-iskusstvenny-intellekt-usilivaet-silnyh-i-vy/</link>
<pubDate>Wed, 20 Aug 2025 14:58:27 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/ai-na-steroidah-kak-iskusstvenny-intellekt-usilivaet-silnyh-i-vy/</comments>
<description>
&lt;p&gt;Пару недель в каналах коллег постоянно вижу тему про AI: что он заменит, улучшит или «убьёт» &amp;mdash; отрасли, профессии, специалистов. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/AI.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Про это уже много сказано, но хочу высказать свою мысль, которая окончательно укрепилась после выхода &lt;strong&gt;GPT-5.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Честно, мне показалось, что он стал работать хуже, чем GPT-4. Да, отдельные тесты показывают квантовый скачок. Но в прикладных задачах всё оказалось не так радужно &amp;mdash; приходилось использовать Claude и DeepSeek. Наверное починят, но пока так. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ключевая мысль:&lt;/strong&gt; меняют отрасли не абстрактный «AI», а конкретные решения на его основе. Там, где можно ускорить процессы и оптимизировать работу, он отлично заходит. Пусть машины берут рутину, а люди занимаются более ценными вещами. Общаются с людьми как минимум. &lt;/p&gt;
&lt;p&gt;Например, копирайтинг. Кажется, будто AI уже полностью заменил его. И, наверное, да &amp;mdash; если речь про средних специалистов. Но если это сильный senior-копирайтер, то у него всё хорошо: раньше он писал и редактировал десять текстов в неделю, теперь сто или даже тысячу.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Слабых AI заменит быстро.&lt;/strong&gt; А сильные просто добавят его в свой стек навыков и будут работать, как будто «на стероидах». Если раньше кидали два лопаты, то теперь &amp;mdash; десять.&lt;/p&gt;
&lt;p&gt;Моё мнение: проблема «вайб-кодинга» (когда весь проект пишет AI) в целом не страшна. Важно, чтобы ты понимал, что происходит в коде, а не просто жамкал ctrl+c/ctrl+v. Если задача решена быстрее, но с сохранением качества и структуры &amp;mdash; почему бы и нет?&lt;/p&gt;
&lt;p&gt;Поэтому хочу поделиться топ-8 решений с AI, которые реально ускоряют нашу работу.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;1. Оценка задач&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Мы собрали агента на базе GPT. Загрузили в него наши сметы с декомпозицией, сделанных вручную. Дальше начинается магия: агент на основе ТЗ и этих примеров выдаёт примерный план задач и оценку в часах. Очень удобно и быстро.&lt;/p&gt;
&lt;p&gt;Разумеется, эти цифры не уходят клиенту «как есть» &amp;mdash; всё валидируется человеком. Но плюс в том, что быстро получается каркас, плюс агент читает ТЗ и подмечает нюансы, которые не всегда сразу видит человек.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;2. Аналитика&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;То же самое, что и со сметами. Обучаем агента на примерах хороших ТЗ и ФТ. Скармливаем ему материалы проекта &amp;mdash; тексты, макеты, PNG, все что есть. &lt;/p&gt;
&lt;p&gt;На выходе получаем черновик документации. Не идеальной, но уже не «чистый лист». Быстро и удобно.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;3. Резюме встреч&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Мы работаем в основном удалённо, митингов много. На них обсуждаются важные детали, которые нужно потом перенести в задачи, документацию и описания. Обычно это делается руками.&lt;/p&gt;
&lt;p&gt;Но сервисы вроде MyMeet дают транскрибацию и резюме. Пользуемся редко, но инструмент очень полезный.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;4. UX/UI&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Используем мало, но верю, что будем больше. GPT уже умеет быстро делать прототипы по описанию. Есть еще много полезных плагинов для Figma. Можно загрузить готовые прототипы и получить тепловые карты. Да, это гипотезы, но они хорошо подсвечивают явные огрехи.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;5. Вайб-кодинг&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Как говорится: «меняйся или умри». Если не использовать AI сейчас, легко оказаться за бортом.&lt;/p&gt;
&lt;p&gt;У нас проекты большие, с кучей кода и легаси. Кидать куски в GPT можно, но он не видит всей картины. Поэтому искали IDE с возможностью сканировать весь проект. Остановились на Cursor. Пока используем его.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;6. Аудиты&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;AI знает весь ваш проект. Главное &amp;mdash; не давать индексировать токены и ключи, иначе привет «восстание машин» и дыры в безопасности.&lt;/p&gt;
&lt;p&gt;Можно попросить проанализировать код на безопасность, актуальность пакетов, подходы и архитектуру. На выходе &amp;mdash; аудит, который легко порезать на задачи в roadmap.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;7. HR&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Скоринг резюме. На вакансии фронта приходят сотни откликов, и даже тестовые задания не спасают.&lt;/p&gt;
&lt;p&gt;Мы собрали агента, в который скармливаем PDF-резюме. На выходе &amp;mdash; баллы и приоритизация кандидатов. Можно сразу понять, кого звать в первую очередь. Скоро, думаю, появятся готовые AI-решения под такие задачи.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;8. Редактирование текстов&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Королевская фича. Отредактировать письмо, задачу, большой текст, придать стиль &amp;mdash; быстрее и проще не придумаешь.&lt;/p&gt;
&lt;p&gt;Совет максимально простой: пусть все исходящие письма или длинные сообщения проходят через AI. Качество вырастет.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Вместо вывода&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Эти восемь решений показывают: AI уже стал рабочим инструментом, который экономит время, повышает скорость и улучшает качество процессов &amp;mdash; от планирования и кода до прототипов и HR. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI &amp;mdash; не замена человеку, а надеюсь станет вторым пилотом.&lt;/strong&gt; Он ускоряет и усиливает, но не делает работу за тебя. &lt;/p&gt;
&lt;p&gt;Почти каждый текст в этом блоге редактирует GPT &amp;mdash; он явно лучше меня дружит с запятыми и правилами орфографии. Есть те, кто уверяет, что AI «разжижает мозг». Отчасти они правы &amp;mdash; но только если вообще перестать думать. Но думаю так же говорили и про паровые станки которые заменили ручной труд, машины и лошади и т. д.&lt;/p&gt;
&lt;p&gt;Мне нравится думать, что AI &amp;mdash; это допинг для сильных специалистов. Ощущение будто работаешь на стероидах &amp;mdash; быстрее, мощнее, продуктивнее. И посмотрим, куда это приведёт дальше.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Ошибки SEO продвижения: куда уходит бюджет и почему сайт не даёт трафика</title>
<guid isPermaLink="false">95</guid>
<link>https://alexeyit.ru/all/oshibki-seo-prodvizheniya-kuda-uhodit-byudzhet-i-pochemu-sayt-ne/</link>
<pubDate>Wed, 23 Jul 2025 11:57:37 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/oshibki-seo-prodvizheniya-kuda-uhodit-byudzhet-i-pochemu-sayt-ne/</comments>
<description>
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Дергается глаз от некоторых SEO-задач. Почему? Обсудим&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Когда мы только стартовали, у нас была почти наивная миссия &amp;mdash; спасать интернет. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/SEO.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Мы смотрели на сайты крупных компаний, где от SEO нет и следа, и думали: «Ну неужели так сложно сделать всё по уму?». Тогда нам казалось, что мы можем что-то изменить. Добавить смысла, структурности, системной пользы в хаос из недоработанных сайтов, мы думали что это готовые клиенты. Прошли годы, и стали понятны причины почему так получается и почему это норма. Мы стали прагматичнее, но наивность не умерла окончательно.&lt;/p&gt;
&lt;p&gt;Изначально этот пост планировался как серия из 4 — 5 постов про SEO, но решил собрать один лонгрид, высказаться так сказать и закрыть тему. &lt;/p&gt;
&lt;p&gt;Сегодня рекламных инструментов стало откровенно мало. Google Ads ушёл, таргет умирает, Яндекс Директ на грани pay-to-win. Из реального трафика остались Яндекс, органика Google, да блогеры. . А значит, &lt;strong&gt;SEO остаётся едва ли не ключевым каналом, где вы можете привлекать клиентов системно, без ежемесячных вливаний в рекламу.&lt;/strong&gt; Особенно если ваш сайт &amp;mdash; это не просто визитка, а обладает каталогом. В этом случае игнорировать SEO &amp;mdash; всё равно что стрелять себе в ногу.&lt;/p&gt;
&lt;p&gt;Когда компания запускают проекты за несколько миллионов и не может выделить хотя бы бюджет на &lt;strong&gt;«печеньки» для SEO &lt;/strong&gt;&amp;mdash; чтобы сайт хотя бы технически соответствовал реалиям требований поиска в 2025 года &amp;mdash; это либо чей то хитрый план или чей то недосмотр. Говорить про зоны ответственности вероятно не стоит, так как с одной стороны это ответственность pm со стороны заказчика — знать что он покупает. С другой стороны, что за подрядчик, если профессионал не сказал об этом клиенту. Иногда компаний / отделов несколько, иногда это разные подразделения. Ну вы поняли. &lt;/p&gt;
&lt;p&gt;SEO в текущих реалиях это не «где-то там», не только про конкуренцию с маркетплейсами. Даже случайный пресс-релиз, если он правильно залетит в органику, может привести реальный трафик, подписчиков и продажи. Но почему то это до сих пор не делается, для меня загадка. &lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Дёргается глаз, горит пукан&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Если вы работаете с SEO-подрядчиками, фрилансером, вы точно сталкивались с задачами типа: &lt;strong&gt;«Сделайте вёрстку валидной»&lt;/strong&gt;. Мы, как разработчики, получаем такие задачи регулярно. И каждый раз у меня начинает &lt;strong&gt;дергаться глаз и гореть пукан&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Чтобы добиться валидной верстки на старых проектах с историей и своей архитектурой &lt;strong&gt;это десятки, а иногда сотни часов&lt;/strong&gt; работы. А самое забавное &amp;mdash; чаще всего такие задачи даже не обсуждаются и не обосновываются, просто «падают» в бэклог. &lt;strong&gt;Зачем? &lt;/strong&gt;Потому что SEO-команда выгрузила &lt;strong&gt;10 000 ошибок по валидатору&lt;/strong&gt;. Красиво выглядит в отчёте. Звучит страшно. В голове клиента возникает ощущение: &lt;strong&gt;«если столько ошибок &amp;mdash; точно надо чинить».&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Но давайте честно: что именно даст эта правка? Ни один SEO-специалист не скажет, что валидная вёрстка &amp;mdash; ключ к &lt;strong&gt;ТОПу&lt;/strong&gt;. Это &lt;strong&gt;один из сотен факторов&lt;/strong&gt; ранжирования, и далеко не самый важный. У него просто минимальный вес при прочих равных. Потратить &lt;strong&gt;N&lt;/strong&gt; часов разработчика на&lt;strong&gt; устранение «лишнего div-а» или «не тот порядок meta-тегов»&lt;/strong&gt;, при этом не имея нормальных посадочных страниц и семантики &amp;mdash; это прямое вредительство. Особенно в проектах, где нет даже базового SEO-фундамента.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Как появляются такие задачи&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Чаще всего они возникают из-за того, что SEO-подрядчику нужно что-то показать клиенту. Работа застопорилась, идей нет, семантика собрана, тексты поменяны, а результатов нет. Тогда в ход идут автоматические сканеры сайта: Labrika, Serpstat, Netpeak, кто что любит. Все они умеют пугать. Особенно блоком «технические ошибки».&lt;/p&gt;
&lt;p&gt;Выглядит это как: «&lt;strong&gt;На сайте обнаружено 11 304 ошибки в разметке. Срочно устранить!&lt;/strong&gt;»&lt;br /&gt;В реальности? 500 товаров, по 20 одинаковых ошибок на карточке.&lt;br /&gt;Даже если исправите &amp;mdash; ничего не изменится. Но отчёт станет красивее. И можно сказать: «Работаем. Оптимизируем».&lt;/p&gt;
&lt;p&gt;Это называется работа ради работы. Показная активность. И она съедает часы, ресурсы и внимание.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Когда SEO нет &amp;mdash; и это ещё хуже&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Но есть и другой сценарий. И он, честно, пугает больше. Когда SEO нет совсем. Представьте себе: проект на кастомной разработке, работает, живёт, развивается, в него вкладывают ресурсы. Мы видим это постоянно &amp;mdash; особенно в fashion-сегменте, в ритейле, в нишевых b2b-порталах. Проекту несколько лет, десятки тысяч SKU, работает команда, маркетинг, CRM, а SEO &amp;mdash; просто не занимались.&lt;/p&gt;
&lt;p&gt;Проверяешь мета-теги: &lt;strong&gt;«Название раздела &amp;ndash; Название компании»&lt;/strong&gt;. Всё, и это в лучшем случае. Ни одного коммерческого запроса. Ни слова «купить», ни «в наличии», ни цен. Description &amp;mdash; машинный или отсутствует. Хочется спросить: Почему, это же так просто? &lt;/p&gt;
&lt;p&gt;Обычно в такой ситуации либо подрядчик за SEO не отвечает, либо SEO «внутри», но никто особо не вникает. Проблема в том, что даже базовые вещи &amp;mdash; не сделаны. Хотя внедрить их стоит недорого, а отдача может быть колоссальной. 80/20 работает и здесь, иногда. Даже не нужно пробиваться в топ по суперчастотникам, да и вероятно это сделать будет тяжело. Среднечастотные и низкочастотные запросы &amp;mdash; абсолютно рабочая зона. &lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Где действительно лежит трафик&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;В e-commerce и B2B трафик идёт из двух зон:&lt;strong&gt; разделы каталога и карточки товара&lt;/strong&gt;. По нашим данным &amp;mdash; около &lt;strong&gt;70%&lt;/strong&gt; органики приходит с категорий/разделов, остальное &amp;mdash; с товарных страниц. При этом схема простая: один ключ &amp;mdash; одна страница. Хочешь трафик по «синие строительные каски» &amp;mdash; сделай страницу именно под этот запрос. Полноценную посадочную с текстом, мета-тегами и заголовками.&lt;/p&gt;
&lt;p&gt;Это настолько&lt;strong&gt; базовая вещь&lt;/strong&gt;, что удивительно, сколько проектов её игнорируют. Упрощенная структура унаследованная из 1С, объединённые категории, не оптимизированные шаблоны разделов &amp;mdash; и вот вы сами забираете у себя органику.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Как еще достать трафика&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Второй слой&lt;/strong&gt; &amp;mdash; это страницы, которые не очевидны, но часто конвертируют: &lt;strong&gt;поиск по сайту, фильтры, бренды в связке с категориями.&lt;/strong&gt; Страницы поиска &amp;mdash; золото. Люди вводят туда конкретные потребности: «чёрные ботинки 42 размер». Почему бы не отдать им релевантную страницу и не открыть её для индексации? Технически это просто, а эффект может быть ощутимым.&lt;/p&gt;
&lt;p&gt;С фильтрами &amp;mdash; тоже всё понятно. Например, «недорогие красные карандаши» или «премиальные зелёные маркеры». Частотка там невысокая, но именно на таких хвостах можно собирать стабильный трафик. Сделать это можно через модульную генерацию или вручную &amp;mdash; кому как удобнее.&lt;/p&gt;
&lt;p&gt;Бренды с категориями &amp;mdash; наша любимая история. Люди ищут «Erich Krause карандаши», «Nike футболки», «Bosch перфораторы». Но на сайтах чаще всего есть только страница бренда &amp;mdash; и всё. И пользователь тонет в хаосе товаров. Мы же рекомендуем сделать полноценные страницы по связке «бренд + категория». Это потребует генерации, возможно, сложной логики.&lt;strong&gt; Но оно того стоит.&lt;/strong&gt; Даже если из сотни новых страниц в топ выйдут 20 &amp;mdash; этого хватит, чтобы трафик начал расти.&lt;/p&gt;
&lt;p&gt;Благо что инструментов, модулей для подобных задач хоть отабавляй. &lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Вроде есть &amp;mdash; но не работает&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Еще один кейс &amp;mdash; когда SEO «ведут», но задач по &lt;strong&gt;технике / доработкам нет&lt;/strong&gt;. Нет новых страниц, нет изменений в структуре, нет изменений по коду. Заказчику кажется, что всё под контролем &amp;mdash; есть подрядчик, приходят отчёты. А если копнуть &amp;mdash; там либо закупка поведенческих факторов, либо имитация активности. Да, может быть временный всплеск. Но на длинной дистанции побеждает тот, кто строит структуру, пишет контент и создает страницы под спрос. То есть без технических доработок развивать ресурс по SEO едва ли возможно. &lt;/p&gt;
&lt;p&gt;Яндекс в своей справке всё давно описал: один ключ = одна страница, уникальный текст, быстро открывается. Если ежемесячный отчет не содержит блок связанный с предложениями об улучшениях и доработка &amp;mdash; повод задуматься, на мой взгляд. &lt;/p&gt;
&lt;p&gt;В целом, это справедливо и для платного трафика — там же A/B-тесты, гипотезы и постоянные эксперименты, так что изменений, по идее, должно быть ещё больше.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Куда действительно стоит вкладываться&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Вложитесь туда, что реально дает эффект: в структуру, в контент, в скорость, в семантику. Создавайте страницы, которые закрывают реальные запросы. Не бойтесь автоматизации &amp;mdash; генерация под фильтры, бренды, поиск может дать кратный рост. И если кто-то снова придёт к вам с задачей «починить вёрстку», просто спросите: «Сколько трафика это нам даст?» Если ответ &amp;mdash; «неизвестно», возможно, стоит еще раз подумать. &lt;/p&gt;
&lt;p&gt;Советы конечно звучат как за все хорошее, против всего плохого. И кажется что последнее время описанного в тексте стало меньше, но периодически все еще встречается. И это наверное хорошо. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
</description>
</item>

<item>
<title>Как перенести сайт без потерь: данные, заказы, пользователи, бонусы</title>
<guid isPermaLink="false">92</guid>
<link>https://alexeyit.ru/all/kak-perenesti-sayt-bez-poter-dannye-zakazy-polzovateli-bonusy/</link>
<pubDate>Mon, 14 Jul 2025 12:57:56 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/kak-perenesti-sayt-bez-poter-dannye-zakazy-polzovateli-bonusy/</comments>
<description>
&lt;p&gt;&lt;em&gt;Почему запуск “с чистого листа” &amp;mdash; это чаще про миграцию, чем про новизну&lt;/em&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/newpro.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Примерно &lt;strong&gt;30&amp;ndash;40%&lt;/strong&gt; наших проектов &amp;mdash; это запуск с чистого листа. Иногда так и есть: никакого кода, никаких интерфейсов, просто идея и желание начать. Но на практике чаще всего &lt;strong&gt;«чистый лист»&lt;/strong&gt; оказывается с заметками на полях. Даже если нет легаси-кода и серверов в подвале &amp;mdash; почти всегда есть пользователи, бонусы, заказы, каталоги &amp;mdash; всё это должно куда-то переехать. И чем раньше мы начнём думать об этом, тем спокойнее будет запуск.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Привычные интерфейсы &amp;mdash; не трогаем&lt;/strong&gt;&lt;br /&gt;Если в старом интерфейсе поиск был по центру &amp;mdash; стоит оставить его там и в новой версии. Люди к этому привыкли, и даже если вы полностью перезапускаете платформу, не надо ломать то, что уже работает. Визуальные паттерны &amp;mdash; &lt;strong&gt;это не баг, это капитал&lt;/strong&gt;, и с ним нужно обращаться бережно.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Каталог и бонусы: выглядит просто, но с нюансами&lt;/strong&gt;&lt;br /&gt;С каталогом товаров всё обычно проще. Чаще всего он приходит из внешней системы: 1С, Excel, XML, PIM &amp;mdash; не суть. Там всё более-менее понятно. Согласовали структуру &amp;mdash; и вперёд. &lt;strong&gt;Ошибки начинаются&lt;/strong&gt; тогда, когда база плохо структурирована, а на старом проекте это держалось на костылях. Выгружаем &amp;mdash; и получаем не структуру, а хаос.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Бонусные системы и программы лояльности&lt;/strong&gt; тоже выглядят как простой блок. Табличка с баллами, пару фильтров &amp;mdash; и поехали. Но есть &lt;strong&gt;нюанс&lt;/strong&gt;: бонусы всегда привязаны к пользователю. &lt;strong&gt;Второй нюанс&lt;/strong&gt;, история начислений и списаний тоже лучше перенести. Если вы не сохранили корректные связи или потеряли часть базы при переносе &amp;mdash; придётся объяснять каждому, куда делись его накопления.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Миграция пользователей&lt;/strong&gt;&lt;br /&gt;Сами пользователи переносятся несложно. Для большинства систем есть штатные механизмы. Но есть один подводный камень &amp;mdash; пароли. Если ваша старая платформа (например, тот же Битрикс) хранила пароли в виде &lt;strong&gt;хешей&lt;/strong&gt; &amp;mdash; вы не сможете их просто вытащить.&lt;/p&gt;
&lt;p&gt;Решение: забираем таблицу с &lt;strong&gt;хешами&lt;/strong&gt;, пишем свою логику авторизации по аналогии со старой системой. Пользователь вводит пароль &amp;mdash; мы проверяем его старым методом, и, если он проходит, обновляем данные в новой системе. Постепенно база «&lt;strong&gt;очищается&lt;/strong&gt;», но первое время живём с двумя методами.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Заказы &amp;mdash; самая глубокая связка&lt;/strong&gt;&lt;br /&gt;Одна из самых сложных структур при миграции. У заказа есть статус, история оплат, доставки, корзина, покупатель, иногда &amp;mdash; привязка к внешним системам. &lt;strong&gt;Это не одна таблица&lt;/strong&gt;, целый набор сущностей, каждая из которых состоит из своего набора данных.&lt;/p&gt;
&lt;p&gt;Мы в своей практике чаще всего идём по пути &lt;strong&gt;прямого импорта&lt;/strong&gt;: сначала переносим пользователей, затем &amp;mdash; связанные с ними заказы. Главное &amp;mdash; правильно сопоставить ID старых и новых сущностей, иначе вы получите тысячи «висячих» заказов, которые ни к кому не привязаны.&lt;/p&gt;
&lt;p&gt;Иногда, чтобы не лезть в сложную структуру заказов, проще выбрать альтернативный подход: настроить обратную выгрузку заказов, опыливателей из системы в 1С, а потом обратно. Это требует работы со стороны 1С, но в итоге ваши клиенты смогут видеть всю свою историю покупок, даже если они делались не через интернет-магазин.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Универсальных рецептов нет&lt;/strong&gt;&lt;br /&gt;Вопреки распространённому мнению, «проект с нуля» почти всегда начинается с миграции. Даже если вы переходите с Битрикса на Битрикс, будет масса нюансов. Если переезжаете с чего-то вроде WooCommerce или Тильды &amp;mdash; тем более.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Не существует универсального рецепта&lt;/strong&gt;, потому что каждый проект живёт по своим законам. Один сайт может спокойно обойтись без истории заказов, другому важно сохранить каждую транзакцию.&lt;/p&gt;
&lt;p&gt;Перед стартом такого «&lt;strong&gt;нуля&lt;/strong&gt;» нужно сделать только одно: собрать максимум информации. Где и как хранятся данные, какие блоки обязательны, какие связаны друг с другом. Уже от этого будет зависеть стратегия: что переносить, что можно выкинуть, а что воссоздать с нуля. Иногда проще не мигрировать, а построить новое &amp;mdash; с учётом всех прошлых ошибок.&lt;/p&gt;
</description>
</item>

<item>
<title>Как повысить конверсию в eCommerce: сравнение платёжных решений — редирект, SDK и ввод карты на сайте</title>
<guid isPermaLink="false">90</guid>
<link>https://alexeyit.ru/all/kak-povysit-konversiyu-v-ecommerce-sravnenie-platyozhnyh-resheni/</link>
<pubDate>Fri, 04 Jul 2025 09:41:00 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/kak-povysit-konversiyu-v-ecommerce-sravnenie-platyozhnyh-resheni/</comments>
<description>
&lt;p&gt;На днях разговаривал с коллегой из другого агентства. Казалось бы, обычный диалог про лидогенерацию и другие насущные вопросы, но в какой-то момент прозвучала простая мысль, которая что-то во мне переключила.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/bill.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Мы обсуждали, как в агентстве появляются нужные запросы. И вот он говорит:Мы пишем в свой канал, что умеем делать сложные проекты &amp;mdash; и приходят запросы на сложные задачи.&lt;/p&gt;
&lt;p&gt;Казалось бы мысль банальна, и все о ней говорят. Пиши про то, с кем хочешь работать &amp;mdash; и такие клиенты к тебе и придут.&lt;/p&gt;
&lt;p&gt;И я задумался: сам бы я пришёл к себе на консультацию как директор агентства? Наверное, да, но не факт. А если бы я был директором e-commerce проекта? Вероятно, нет.&lt;/p&gt;
&lt;p&gt;Поэтому с сегодняшнего утра &amp;mdash; курс корректируем. Буду больше писать о том, в чём мы сильны: &lt;strong&gt;разработка и развитие B2B / D2C / B2C ecommerce-проектов.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Погнали.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Что не так с оформлением заказа&lt;/strong&gt;&lt;br /&gt;Как проходит оплата в типичном интернет-магазине на Bitrix или другом типовом движке?&lt;br /&gt;Форма заказа &amp;mdash; часто многошаговая. Потом сообщение: «Спасибо, ваш заказ оформлен, сейчас мы переведём вас на оплату». Следом &amp;mdash; редирект на платёжный шлюз, где вводим данные карты, иногда повторно. Оплачиваем, нажимаем «вернуться на сайт».&lt;br /&gt;Итого &amp;mdash; два редиректа, три интерфейса. И куча поводов для сомнений и отказа от покупки. Особенно если это повторный заказ или импульсная покупка.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Как делают маркетплейсы&lt;/strong&gt;&lt;br /&gt;Вот кто действительно короли в этом процессе &amp;mdash; маркетплейсы. Они не просто обрабатывают платежи, они выжимают максимум. Оформление заказа там &amp;mdash; это одна кнопка, если заказ повторный. Карта уже сохранена, адрес ПВЗ стоит, оформление &amp;mdash; по сути, мгновенное. Никаких лишних переходов, одно окно, одна кнопка. Всё продумано под повторные заказы, минимальное трение.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Какие есть варианты, если хочется так же&lt;/strong&gt;&lt;br /&gt;Если вы хотите принимать оплату картой прямо на сайте, у вас есть два пути. &lt;strong&gt;Первый &amp;mdash; обрабатывать данные карты самостоятельно.&lt;/strong&gt; Это значит, что ваш сервер будет напрямую принимать номер карты (PAN), срок действия, CVV и другие чувствительные данные. Такой подход возможен, но связан с огромными сложностями: вы обязаны пройти полную &lt;strong&gt;сертификацию PCI DSS (уровень 1)&lt;/strong&gt;, настроить сквозное шифрование, защиту каналов передачи, использовать сертифицированные &lt;strong&gt;HSM-модули&lt;/strong&gt; и регулярно проходить аудит. &lt;strong&gt;Это дорого, долго&lt;/strong&gt;, и требует штатных специалистов по безопасности. Любая ошибка &amp;mdash; и вы нарушаете международные стандарты, рискуя не только деньгами, но и репутацией.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Второй путь&lt;/strong&gt; &amp;mdash; использование &lt;strong&gt;SDK/API&lt;/strong&gt; от платёжной системы. В этом случае пользователь визуально &lt;strong&gt;вводит данные карты у вас на сайте&lt;/strong&gt;, но технически эти данные &lt;strong&gt;отправляются напрямую платёжному провайдеру&lt;/strong&gt;. Ваш сервер не видит и не хранит информацию карты &amp;mdash; вы получаете только токен, с которым уже можно списывать средства. Это решение не требует сложной сертификации, укладывается в минимальные требования &lt;strong&gt;PCI DSS (SAQ A)&lt;/strong&gt; и значительно упрощает внедрение. Вы получаете современный UX и безопасность без лишних затрат и рисков.&lt;/p&gt;
&lt;p&gt;Мы в проектах чаще используем &lt;strong&gt;SDK/API или редирект (классика)&lt;/strong&gt;&amp;mdash; в зависимости от задач клиента, типа заказов и повторных покупок.&lt;/p&gt;
&lt;p&gt;Что даёт ввод карты прямо на сайте (SDK или самостоятельный приём)&lt;br /&gt;&lt;strong&gt;Плюсы:&lt;/strong&gt;&lt;br /&gt;&amp;ndash; Повторная покупка &amp;mdash; одна кнопка&lt;br /&gt;&amp;ndash; Меньше отказов &amp;mdash; пользователь не покидает сайт&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Минусы:&lt;/strong&gt;&lt;br /&gt;&amp;ndash; Ограниченная вариативность &amp;mdash; СБП и др. нужно подключать отдельно&lt;br /&gt;&amp;ndash; Не все готовы вводить данные на малознакомом сайте&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Что выбрать?&lt;/strong&gt;&lt;br /&gt;Если вы не входите в топ-100 eCom по DataInsight, но хотите увеличить повторные заказы и не терять клиента на каждом шаге &amp;mdash; SDK будет отличным решением. Редирект &amp;mdash; это рабочий компромисс. Но если вы хотите UX как у маркетплейсов &amp;mdash; без SDK никак.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;В следующих постах разберём практику:&lt;/strong&gt;&lt;br /&gt;&amp;mdash; Зачем вам PIM-система и как внедрять&lt;br /&gt;&amp;mdash; Интегрируем логистику без привязки к внешним сервиса&lt;br /&gt;&amp;mdash; Что должно быть в личном кабинете eCom-проекта&lt;br /&gt;&amp;mdash; Делаем бонусныу систему и при чем тут фальшивомонетничество&lt;/p&gt;
</description>
</item>

<item>
<title>Проблемы при миграции Битрикс24 на Астра Линукс: кейс отказа от Apache и перехода на Nginx + PHP-FPM</title>
<guid isPermaLink="false">89</guid>
<link>https://alexeyit.ru/all/problemy-pri-migracii-bitriks24-na-astra-linuks-keys-otkaza-ot-a/</link>
<pubDate>Tue, 01 Jul 2025 18:09:11 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/problemy-pri-migracii-bitriks24-na-astra-linuks-keys-otkaza-ot-a/</comments>
<description>
&lt;p&gt;&lt;strong&gt;Когда «ускорение» оборачивается откатом&lt;/strong&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/fpm.png" width="1248" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Любая оптимизация несёт в себе риск. Особенно если речь идёт о корпоративной системе с тысячами пользователей, десятками бизнес-процессов и высокой критичностью к стабильности.&lt;/p&gt;
&lt;p&gt;Мы работаем с крупными инсталляциями Битрикс24: по 2000&amp;ndash;3000 активных пользователей в системе, десятки интеграций, сложная автоматизация. В один момент перед нами встал вызов: перейти на импортозамещённое окружение, включая «Астра Линукс» и отказ от привычного Apache в пользу связки Nginx + PHP-FPM.&lt;/p&gt;
&lt;p&gt;На бумаге всё выглядело логично: производительность, масштабируемость, современные практики. Но на практике мы получили множество непредсказуемых сбоев и недельный ад восстановления.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Как это выглядело: миграция «в лоб»&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Решение принималось быстро. Никто не давил &amp;mdash; просто все были за эффективность. Apache решили не использовать: «устаревший», «тяжёлый», «нам всё равно нужно больше производительности».&lt;/p&gt;
&lt;p&gt;Мы развернули новое окружение:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ОС: Astra Linux&lt;/li&gt;
&lt;li&gt;Web-сервер: Nginx&lt;/li&gt;
&lt;li&gt;PHP: PHP-FPM&lt;/li&gt;
&lt;li&gt;СУБД: PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На тестовом сервере всё работало. Проверяли мы, клиент, снова мы. Формально &amp;mdash; продукт был готов к миграции. Все ключевые функции: CRM, бизнес-процессы, коммуникации, документы &amp;mdash; выглядели стабильными.&lt;/p&gt;
&lt;p&gt;Назначили день Х, перенесли файлы и базу, запустились.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;И началось: падение стабильности без Apache&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Первый звоночек &amp;mdash; пользователи не смогли синхронизировать календари с мобильными устройствами.&lt;br /&gt; Потом не проходили заголовки для zip-архивации.&lt;br /&gt; Затем отвалились некоторые интеграции с внешними сервисами, особенно REST-запросы.&lt;/p&gt;
&lt;p&gt;Самое странное: всё это работало на тесте. Ошибки были нелогичными, хаотичными. Казалось, что система живёт своей жизнью. Обычные HTTP-запросы вели себя непредсказуемо.&lt;/p&gt;
&lt;p&gt;Мы ушли в дебаг:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Начали с логов&lt;/li&gt;
&lt;li&gt;Проверили сокеты&lt;/li&gt;
&lt;li&gt;Запустили трассировку пакетов&lt;/li&gt;
&lt;li&gt;Сравнили поведение Nginx и Apache на одном и том же коде&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Результаты нас неприятно удивили.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Почему Bitrix24 «любит» Apache&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Коробочная версия Битрикс24 до сих пор во многих местах завязана на особенности работы Apache:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Использование .htaccess файлов&lt;/li&gt;
&lt;li&gt;Обработка нестандартных заголовков&lt;/li&gt;
&lt;li&gt;Проксирование для мобильных клиентов&lt;/li&gt;
&lt;li&gt;Роутинг внутри REST API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Да, формально Bitrix работает и под Nginx. Да, на сайте есть конфигурации. Но под капотом &amp;mdash; множество нюансов, которые не эмулируются простыми правилами nginx.conf.&lt;/p&gt;
&lt;p&gt;Когда мы пытались сымитировать Apache-правила в Nginx &amp;mdash; устраняя одни баги, ломались другие.&lt;br /&gt; Мобильные приложения отказывались работать. REST-запросы возвращали пустые данные. Архивы не скачивались.&lt;br /&gt; А клиент уже работал на новом сервере. Проект в бою. Откат &amp;mdash; сложный. Ресурсы на пределе.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Что мы сделали: откат к проверенному решению&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Решение оказалось не героическим, а здравым: поставить Apache.&lt;/p&gt;
&lt;p&gt;Мы подняли Apache параллельно, перевели конфигурацию, протестировали.&lt;br /&gt; Большинство проблем исчезло.&lt;br /&gt; Платформа снова начала работать стабильно.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Что из этого вынесли: уроки и рекомендации&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt; Всегда читайте рекомендации вендора&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вендор указывает не просто так, что поддержка Apache является приоритетной. Это не маркетинг, а техническая реальность. Игнорировать &amp;mdash; значит платить временем и репутацией.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt; Неочевидные функции &amp;mdash; ваши лучшие тест-кейсы&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Мы добавили в свой чек-лист для QA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Проверка zip-архивации&lt;/li&gt;
&lt;li&gt;Синхронизация календарей&lt;/li&gt;
&lt;li&gt;Интеграции с мобильными устройствами&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Именно они вскрывают глубинные архитектурные зависимости, которые не заметны при базовой проверке интерфейсов.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt; Не «ускоряйтесь», пока не знаете цену ускорения&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Да, отказ от Apache выглядит как оптимизация. Но если это приводит к нестабильной работе ядра &amp;mdash; вы теряете больше, чем выигрываете. Особенно в B2B-проектах, где SLA, штрафы и сложные договорные отношения.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;И напоследок: импортозамещение &amp;mdash; это не просто про «поставить галочку»&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Никакой сарказм. Мы поддерживаем курс на импортонезависимость. Но подход должен быть зрелым:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Тестируйте заранее&lt;/li&gt;
&lt;li&gt;Учитывайте legacy-архитектуру&lt;/li&gt;
&lt;li&gt;Не бойтесь “старых” решений, если они решают задачу&lt;/li&gt;
&lt;li&gt;Apache &amp;mdash; не панацея, но и не зло&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если вы переходите на Астра Линукс, внимательно пересмотрите архитектуру вашего веб-стека. Иногда лучше не экспериментировать с критически важными модулями, особенно если вы работаете с Bitrix24.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
</description>
</item>

<item>
<title>Обмен 1С с сайтом: как работает, почему падает и как починить</title>
<guid isPermaLink="false">88</guid>
<link>https://alexeyit.ru/all/obmen-1s-s-saytom-kak-rabotaet-pochemu-padaet-i-kak-pochinit/</link>
<pubDate>Fri, 27 Jun 2025 17:49:05 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/obmen-1s-s-saytom-kak-rabotaet-pochemu-padaet-i-kak-pochinit/</comments>
<description>
&lt;p&gt;Удивительно, но на некоторых проектах до сих пор всплывают проблемы с обменом между сайтом и 1С которые не могут решить. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/obmen.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Недавно помогали коллегам с подобным кейсом: старый БУС, 1С, обмен заказами долго шёл без проблем &amp;mdash; и в один день встал. В логах &amp;mdash; вал ошибок, обмен стоит. Разобрались, починили. Заодно решил расчехлить старую инструкцию из Wiki.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Принцип работы штатного обмена&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Обмен между 1С и сайтом реализован через протокол &lt;strong&gt;CommerceML 2&lt;/strong&gt;, где основа &amp;mdash; XML-файлы. Обмен всегда инициируется со стороны 1С. Сайт играет роль приёмника.&lt;/p&gt;
&lt;p&gt;&lt;h4&gt;Что можно передавать:&lt;/h4&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;товары и торговые предложения (в 1С &amp;mdash; «характеристики»)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;остатки&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;цены&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;заказы в обе стороны&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;пользователи&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;справочники и прочие сущности&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h4&gt;Ключевые особенности:&lt;/h4&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;точка входа на сайте &amp;mdash; &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/bitrix/admin/1c_exchange.php&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;взаимодействие идёт через серию GET-запросов&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;данные записываются во временные таблицы (b_xml, b_xml_tree_import_1c)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;при сбое обмен начинается с начала&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Важно: &lt;strong&gt;одновременные обмены одного типа невозможны&lt;/strong&gt;, так как данные будут перезаписаны. Это может привести к потере целостности данных.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Версии обмена: как определить&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Разные версии модуля обмена (на стороне 1С и на сайте) формируют разные составы файлов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;import.xml&lt;/code&gt;&lt;/pre&gt; и &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;offers.xml&lt;/code&gt;&lt;/pre&gt; &amp;mdash; минимальный набор&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;добавление &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;prices.xml&lt;/code&gt;&lt;/pre&gt; и &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;rests.xml&lt;/code&gt;&lt;/pre&gt; &amp;mdash; передача цен и остатков отдельно&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;goods.xml&lt;/code&gt;&lt;/pre&gt; + дополнительные запросы (например, деактивация) &amp;mdash; для кастомизированных решений&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Подробности: &lt;a href="https://www.dev.1c-bitrix.ru/api_help/sale/xml/index.php"&gt;&lt;a href="https://www.dev.1c-bitrix.ru/api_help/sale/xml/index.php"&gt;https://www.dev.1c-bitrix.ru/api_help/sale/xml/index.php&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Дополнительный модуль обмена от 1С&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;На сайте 1С доступен бесплатный модуль, который можно установить в конфигурацию:&lt;br /&gt; &lt;a href="https://1c.1c-bitrix.ru/ecommerce/download.php"&gt;&lt;a href="https://1c.1c-bitrix.ru/ecommerce/download.php"&gt;https://1c.1c-bitrix.ru/ecommerce/download.php&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Что он даёт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;дерево выгрузки товаров и категорий&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;гибкость в отборе данных&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❗️Внимание: если используются отборы по дереву, категории или товары, не попавшие в него, &lt;strong&gt;не выгрузятся&lt;/strong&gt;. Нужно контролировать это вручную.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Режимы выгрузки&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;В 1С можно выбрать один из двух режимов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Только изменения&lt;/strong&gt; &amp;mdash; выгружаются элементы, помеченные как изменённые&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Полная выгрузка&lt;/strong&gt; &amp;mdash; выгружается весь набор по заданному отбору&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Также можно отключить:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;выгрузку изображений&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;определённые свойства или разделы&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Заказы выгружаются, если их &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;дата изменения&lt;/code&gt;&lt;/pre&gt; больше &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;даты последней выгрузки&lt;/code&gt;&lt;/pre&gt;.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Типовые проблемы и их причины&lt;/h3&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;❌ Включён ZIP-архив &amp;mdash; часто вызывает ошибки. Лучше выключить.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;❌ Слишком большой размер пакета &amp;mdash; рекомендуемое значение: &lt;strong&gt;не более 100 элементов&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;❌ Много свойств у товаров &amp;mdash; увеличивает нагрузку и время выполнения.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;❌ Ручное редактирование в админке перетирается данными из 1С.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;❌ Массовое изменение заказов (обработчиком или API) &amp;mdash; вызывает очередь, которую 1С не успевает обработать.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h3&gt;Ручная отладка обмена&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Иногда проще отладить руками, эмулируя работу 1С.&lt;/p&gt;
&lt;p&gt;&lt;h4&gt;Пример запросов:&lt;/h4&gt;&lt;/p&gt;
&lt;p&gt;Авторизация:&lt;/p&gt;
&lt;pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;amp;mode=checkauth
/bitrix/admin/1c_exchange.php?type=catalog&amp;amp;amp;mode=checkauth&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt;Полученный &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sessid&lt;/code&gt;&lt;/pre&gt; используется в следующих шагах.&lt;/p&gt;
&lt;p&gt;Загрузка файла вручную:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Положите нужный XML-файл в &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/upload/1c_catalog/&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вызовите:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/bitrix/admin/1c_exchange.php?type=catalog&amp;amp;amp;mode=file&amp;amp;amp;filename=rests_123.xml&amp;amp;amp;sessid=ВАШ_ID&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;Жмите F5 &amp;mdash; по ответам на экране будет видно, когда обмен завершится&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;Почему не выгружаются заказы&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Если 1С «не видит» заказы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Проверьте отбор на стороне 1С &amp;mdash; может стоять фильтр «только оплаченные»&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Сайт отправляет всё, что попадает под условия (&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;дата изменения &amp;amp;gt; последней выгрузки&lt;/code&gt;&lt;/pre&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Важно: при ручной проверке обмена заказы выгружаются &lt;strong&gt;один раз&lt;/strong&gt;. Чтобы повторить выгрузку &amp;mdash; нужно изменить заказ вручную (например, добавить комментарий).&lt;/p&gt;
&lt;p&gt;Проверка:&lt;/p&gt;
&lt;pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;amp;mode=query&amp;amp;amp;sessid=ВАШ_ID&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt;&lt;h3&gt;Кастомизация модуля обмена&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Что можно делать безопасно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;добавлять свойства в заказ через штатную схему&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;использовать доп. свойства, не меняя структуру XML&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;выносить изменения в &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/local/&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;сделать отдельную точку входа для особой выгрузки&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Что &lt;strong&gt;не стоит&lt;/strong&gt; делать:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;править ядро модуля обмена напрямую &amp;mdash; это приведёт к проблемам при обновлении&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дополнительные справочники (например, бонусы клиентов) лучше выгружать через отдельный скрипт (XML, CSV, JSON).&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Реальный кейс: обмен встал из-за завершённых заказов&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;На одном из проектов 1С начала выгружать старые заказы, уже в статусе «Выполнен». Битрикс по умолчанию &lt;strong&gt;не позволяет вносить изменения в закрытые заказы&lt;/strong&gt;. В результате:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1С пыталась обновить более 1000 заказов&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;сайт их отклонял&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;обмен вставал&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;сервер перегружался&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h4&gt;Что сделали:&lt;/h4&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Очистили очередь заказов на сайте (&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mode=query&lt;/code&gt;&lt;/pre&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;В таблице &lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;b_sale_order&lt;/code&gt;&lt;/pre&gt; сняли флаг «к выгрузке»&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;В 1С очистили внутренний реестр на стороне обмена&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;После этого обмен заработал.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;Общие выводы&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Обмен с 1С &amp;mdash; мощный инструмент, но требует внимания:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;при росте проекта он начинает тормозить из-за избыточности (всё дерево, все свойства)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;устаревшие конфигурации могут не справляться с объёмом&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;кастомизации лучше выносить отдельно&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если проект выходит за рамки стандартного обмена &amp;mdash; стоит рассматривать переход на брокеры: RabbitMQ, Kafka, Datareon. Там выше гибкость и скорость, но потребуется тщательная архитектура, чтобы избежать зацикливаний и потерь данных.&lt;/p&gt;
&lt;p&gt;Если вы столкнулись с похожей проблемой &amp;mdash; поможем разобраться. Мы работаем как со стандартным обменом, так и с интеграциями через очереди и API.&lt;/p&gt;
</description>
</item>

<item>
<title>Репрайсер для маркетплейсов: для озон и wildberries</title>
<guid isPermaLink="false">84</guid>
<link>https://alexeyit.ru/all/reprayser-dlya-marketpleysov-dlya-ozon-i-wildberries/</link>
<pubDate>Tue, 03 Jun 2025 11:38:08 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/reprayser-dlya-marketpleysov-dlya-ozon-i-wildberries/</comments>
<description>
&lt;p&gt;&lt;span&gt;Мы тут пилим новый стартап &amp;mdash; систему управления ценами на маркетплейсах, на сленге репрайсер с парсером. И если честно, идем по самому «неправильному» пути.&lt;/span&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/parser.png" width="1536" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Никаких глубоких продуктовых исследований, кастдевов, воркшопов и фасилитаций. Все как во вредных советах: задача родилась в продакшене, решение появилось по пути, MVP собрано из того, что было под рукой. Не повторяйте за нами, если хотите «по учебнику».&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Но давайте по делу.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Проблема, которая болит у многих&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Проект вырос из регулярных запросов клиентов. История всегда примерно одна: товар на WB или Ozon внезапно участвует в какой-то автоматической акции, скидка прилетает из ниоткуда, а продавец узнает об этом уже по факту &amp;mdash; когда теряет маржу.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Следить за этим можно, но это ад. Глазами и ручками по 2&amp;ndash;3 раза в день просматривать сотни карточек? Такое даже на старте звучит как наказание.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Что мы сделали&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Мы собрали сервис, который автоматически проверяет цены на маркетплейсах по заданным ссылкам. Базовые цены подгружаются из Excel, Google Таблиц или 1С. Дальше алгоритм делает простую магию:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1"&gt;&lt;span&gt;Сравнивает текущую цену на карточке с базовой.&lt;/span&gt;&lt;/li&gt;
&lt;li aria-level="1"&gt;&lt;span&gt;Если цена на маркетплейсе опустилась ниже &amp;mdash; высчитывает разницу и повышает базовую цену до нужного уровня.&lt;/span&gt;&lt;/li&gt;
&lt;li aria-level="1"&gt;&lt;span&gt;Выгружает обновленную цену через API обратно на площадку.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;На текущем этапе мы работаем с WB и Ozon, но парсеру в целом все равно, откуда тянуть данные &amp;mdash; можно адаптировать под любую площадку. Так же и с выгрузкой: архитектура позволяет быстро подключать новые интеграции.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;MVP &lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Сервис уже работает на реальных проектах. Он регулярно проверяет цены, автоматически поднимает цену, если кто-то на площадке решает «поиграть в скидки». Минимум действий от пользователя: просто загрузить ссылки и указать, откуда брать базовые цены.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Это не красивая идея на бумаге. Это рабочее решение, которое спасает деньги каждый день.&lt;/span&gt;&lt;/p&gt;
&lt;p data-start="101" data-end="502"&gt;Если вы ищете &lt;strong data-start="115" data-end="146"&gt;репрайсер для маркетплейсов&lt;/strong&gt;, который работает с Wildberries и Ozon &amp;mdash; вы по адресу. Наш сервис Guard Price &amp;mdash; это автоматическая система мониторинга и корректировки цен, созданная из реальной боли клиентов. В отличие от других решений, наш &lt;strong data-start="357" data-end="380"&gt;репрайсер WB и Ozon&lt;/strong&gt; не просто следит за ценами, а автоматически поднимает их до нужного уровня, если маркетплейс внезапно активировал скидку.&lt;/p&gt;
&lt;p data-start="504" data-end="823"&gt;Интеграции с Excel, Google Таблицами, 1С, а также удобная работа с API делают его идеальным инструментом для продавцов, которые хотят сохранить &lt;strong data-start="648" data-end="679"&gt;маржу и контроль над ценами&lt;/strong&gt;. Сейчас тестируем MVP и собираем обратную связь, чтобы сделать продукт ещё лучше. Попробуйте &amp;mdash; даже если вы уже знакомы с MPStats или Indeeper.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Сейчас тестируем гипотезу через лендинг, а вот кстати ссылочка: &lt;a href="https://guardprice.ru/"&gt;https://guardprice.ru/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Проект сдан. Но не закончен</title>
<guid isPermaLink="false">82</guid>
<link>https://alexeyit.ru/all/proekt-sdan-no-ne-zakonchen/</link>
<pubDate>Fri, 30 May 2025 15:50:40 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/proekt-sdan-no-ne-zakonchen/</comments>
<description>
&lt;p&gt;&lt;strong&gt;Май &amp;mdash; месяц новых рубрик.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/vibor.png" width="911" height="669" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span &gt;Запускаем сразу две, включая эту. А заодно добавим интерактива на канал &amp;mdash; опросы, реакции, движ. Хочется чуть больше жизни и вовлечённости.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Суть рубрики:&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span &gt;Я буду описывать ситуации &amp;mdash; вымышленные, а иногда и вполне реальные &amp;mdash; из практики, связанной с нашей «агентской» деятельностью. Через пару дней после публикации кейса выкладываю своё мнение и вариант решения. Формат интерактивный, полезный и местами душераздирающий.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span &gt;Для удобства поиска вопросы и ответы будем нумеровать, начиная с &lt;/span&gt;&lt;strong&gt;№1000&lt;/strong&gt;&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span &gt;p.s. Формат не я придумал &amp;mdash; честно подсмотрел у Сергея Колганова. Постараюсь адаптировать под нашу специфику.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Погнали.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span &gt;🎮 &lt;/span&gt;&lt;strong&gt;Игровой кейс №1000.&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span &gt; Клиент возвращается с «небольшими доработками» после сдачи проекта...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ситуация:&lt;/strong&gt;&lt;span &gt; Проект успешно сдан, акты подписаны, клиент доволен. Проходит две недели, и от него приходит письмо: «Ребята, все супер, но мы тут подумали, было бы здорово еще вот тут кнопочку подвинуть, тут текст поменять, а еще добавить небольшой раздел с отзывами. Это же мелочи, быстро сделаете в рамках гарантии/поддержки?» Вы понимаете, что «мелочи» могут легко вылиться в несколько дней работы, а то и больше, если начать копать.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Как реагировать?&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Все бесплатно:&lt;/strong&gt;&lt;span &gt; Быстро сделать все правки для лояльности, не выставляя счет. &lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Отказ по ТЗ/договору:&lt;/strong&gt;&lt;span &gt; Проект принят. Новые задачи &amp;ndash; платно. Предложить новый заказ. &lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Гибкий подход:&lt;/strong&gt;&lt;span &gt; Мелкие правки &amp;ndash; бонус. Крупные &amp;ndash; оценить и выставить счет. &lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Абонентская поддержка:&lt;/strong&gt;&lt;span &gt; Предложить договор на ежемесячную поддержку для доработок. &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Ответ будет через пару дней&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ответ к кейсу 1000. Как бы поступил я и почему это&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span &gt;Это одна из самых частых и деликатных ситуаций в нашей работе. Тут важно найти баланс между лояльностью клиента и защитой своих ресурсов.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Почему не вариант 1 (Сделать все бесплатно)?&lt;/strong&gt;&lt;span &gt; Это опасная дорожка. Один раз сделав бесплатно значительный объем доработок, вы рискуете создать у клиента впечатление, что так будет всегда. «Мелочи» могут превратиться в бесконечный поток, а ваша команда будет тратить время, которое не оплачивается. Это прямой путь к снижению рентабельности и демотивации сотрудников.&lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Почему не вариант 2 (Вежливо, но твердо отказать на все)?&lt;/strong&gt;&lt;span &gt; Слишком формальный и жесткий подход может обидеть клиента, особенно если он действительно лоялен и у вас были хорошие отношения. Даже если вы юридически на 100% правы, это может испортить долгосрочное сотрудничество и сарафанное радио. Иногда небольшая гибкость окупается сторицей.&lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Почему не вариант 4 (Сразу предлагать абонентскую поддержку)?&lt;/strong&gt;&lt;span &gt; Это хороший вариант для дальнейшего развития отношений, но если клиент пришел с небольшим конкретным запросом, сразу «продавать» ему абонемент может быть преждевременно и выглядеть как попытка навязать ненужную услугу. Лучше сначала решить текущую потребность.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Так почему же вариант 3 &amp;ndash; оптимальный?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Гибкость и клиентоориентированность:&lt;/strong&gt;&lt;span &gt; Вы показываете, что слышите клиента и готовы пойти навстречу. Сделать пару действительно мелких правок (например, заменить номер телефона или поправить опечатку) &amp;ndash; это хороший жест, который почти ничего вам не стоит, но ценится клиентом.&lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Установление границ:&lt;/strong&gt;&lt;span &gt; Одновременно вы четко даете понять, что есть предел бесплатных «плюшек». Когда вы говорите: «Вот это мы сделаем быстро как бонус, а вот эти задачи (например, добавление нового раздела) уже требуют времени наших специалистов, давайте оценим и согласуем», &amp;ndash; вы приучаете клиента к тому, что дополнительная работа стоит денег.&lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Прозрачность:&lt;/strong&gt;&lt;span &gt; Клиент видит, что вы не просто отмахиваетесь, а анализируете его запрос. Предоставление оценки на платные доработки позволяет ему принять взвешенное решение.&lt;/span&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Мост к дальнейшему сотрудничеству:&lt;/strong&gt;&lt;span &gt; После того как вы помогли с текущими «мелочами» (часть бесплатно, часть платно), можно уже предложить и вариант 4 &amp;ndash; абонентскую поддержку, если клиент предполагает, что подобные задачи будут возникать регулярно. Это будет выглядеть логичным и своевременным предложением.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Практический вывод:&lt;/strong&gt;&lt;span &gt; Всегда будьте готовы к таким запросам. В идеале, еще на этапе подписания актов проговорите с клиентом, что входит в гарантийную поддержку (исправление ошибок, которые были в рамках ТЗ), а что является новой задачей. Но если такой разговор не состоялся или клиент «забыл», действуйте по варианту 3. Проявите немного гибкости, но не позволяйте садиться себе на шею. Четкая коммуникация и аргументация &amp;ndash; ключ к успеху.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
</description>
</item>

<item>
<title>Как ускорить сайт на Битрикс: полный гайд по оптимизации скорости загрузки</title>
<guid isPermaLink="false">79</guid>
<link>https://alexeyit.ru/all/kak-uskorit-sayt-na-bitriks/</link>
<pubDate>Tue, 20 May 2025 08:38:38 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/kak-uskorit-sayt-na-bitriks/</comments>
<description>
&lt;p&gt;По статистике, на Битриксе работает около ~ 11% сайтов в РФ. Это не мало, для сравнения тильда и WP ~ 59%.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/cpu.png" width="1200" height="797" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Но при слове «Битрикс» у многих первая ассоциация &amp;mdash; медленный, неудобный, тяжёлый. Хотя часто дело не в движке, а в том, как его готовили. Ниже &amp;mdash; рабочая инструкция: от базовой диагностики до продвинутых проверок инфраструктуры и железа.&lt;/p&gt;
&lt;p&gt;Продолжая тему из&lt;a href="https://t.me/alexeyitru/58"&gt; прошлого поста&lt;/a&gt;, собрал в формате гайда наш рабочий подход к анализу и ускорению сайтов на Битрикс &amp;mdash; от базовой диагностики до продвинутых решений, которые реально дают прирост.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Общие шаги анализа&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Собрать обратную связь.&lt;/strong&gt; Какие страницы тормозят? Какие действия? Где затыки?&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Проверить системные требования.&lt;/strong&gt; CPU, RAM, дисковая подсистема &amp;mdash; всё должно быть в норме.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Оценить загрузку сервера.&lt;/strong&gt; top, htop, Task Manager &amp;mdash; загруженность ЦП, памяти, диска.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Проверить географию.&lt;/strong&gt; Сервер должен быть в РФ, а не на экваторе.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Дальше &amp;mdash; по слоям: локация &amp;rarr; сервер/ПО &amp;rarr; окружение &amp;rarr; backend &amp;rarr; frontend.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Анализ сервера&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Скорость диска.&lt;/strong&gt; Проверь через hdparm, fio. Норма &amp;mdash; от 150 МБ/с.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Доступность сервера.&lt;/strong&gt; Не перегружен ли ботами? Смотри access.log.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Ошибки.&lt;/strong&gt; error.log, php_errors.log &amp;mdash; критические сбои и ошибки.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;PHP.&lt;/strong&gt; Настройки opcache, memory_limit, max_execution_time.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;MySQL.&lt;/strong&gt; Проверь query_cache, innodb_buffer_pool_size, tmp_table_size.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Cron.&lt;/strong&gt; Нагрузка от зацикленных или тяжёлых заданий.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Свободные ноды.&lt;/strong&gt; Хватает ли ресурсов под процессы?&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Свободное место.&lt;/strong&gt; Минимум 5&amp;ndash;10 ГБ должно быть свободно.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Анализ базы данных&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Диагностика Битрикс.&lt;/strong&gt; Встроенный инструмент: /bitrix/admin/performance.php.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Медленные запросы.&lt;/strong&gt; slow_query_log, инструмент в phpMyAdmin, EXPLAIN.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Индексы.&lt;/strong&gt; Наличие по часто используемым полям.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Очистка.&lt;/strong&gt; b_event_log, b_search_content &amp;mdash; чистим старое.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Жирные таблицы.&lt;/strong&gt; Например, b_sale_fuser может распухнуть до гигабайтов.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Анализ кода и модулей&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Включить отладку.&lt;/strong&gt; Кол-во запросов, время ответа.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Кэш и композит.&lt;/strong&gt; Должны быть включены и корректно работать.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Пользовательский код.&lt;/strong&gt; Отключить свои компоненты, проверить init.php.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Отключение модулей.&lt;/strong&gt; Через /bitrix/admin/module_admin.php. Всё лишнее &amp;mdash; в архив.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Профайлер.&lt;/strong&gt; /bitrix/admin/perfmon_panel.php &amp;mdash; ищем долгие участки.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Тяжёлые функции.&lt;/strong&gt; CIBlockElement::GetList, CSaleOrder::GetList &amp;mdash; аккуратно.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Обмены.&lt;/strong&gt; С 1С и прочими системами &amp;mdash; могут грузить базу и API.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Оптимизация фронтенда&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Сокращение запросов.&lt;/strong&gt; Анализ в браузере &amp;mdash; DevTools.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Кеширование.&lt;/strong&gt; Проверить, работает ли компонентный кеш.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Минификация CSS/JS.&lt;/strong&gt; Через /bitrix/admin/performance_tuning.php.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;GZIP.&lt;/strong&gt; Должен быть включён для статики.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Изображения.&lt;/strong&gt; Сжатые, современный формат (WebP).&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Внешние подключения.&lt;/strong&gt; Шрифты, YouTube, картинки &amp;mdash; переложить внутрь проекта.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Тестирование нагрузки&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Стресс-тест.&lt;/strong&gt; Apache JMeter, k6 &amp;mdash; симуляция пользователей.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Сессии.&lt;/strong&gt; Где возможно &amp;mdash; убрать session_start().&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Очередь заданий.&lt;/strong&gt; Проверить /bitrix/admin/agent_list.php, лучше &amp;mdash; cron.&lt;br /&gt;&lt;strong&gt;Кэш серверных данных.&lt;/strong&gt; Redis / Memcached &amp;gt; файловый кэш.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Инфраструктурные проверки&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Сетевые задержки.&lt;/strong&gt; ping, traceroute.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;CDN.&lt;/strong&gt; Для ускорения статики.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Балансировка.&lt;/strong&gt; Если есть балансировщики &amp;mdash; проверяем распределение.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Актуальность ПО.&lt;/strong&gt; Версии PHP, MySQL, модули Битрикс &amp;mdash; обновлены?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;План Б: смена окружения и архитектуры&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Если всё выше сделано, а сайт всё ещё медленный &amp;mdash; пора подумать о смене окружения:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;Apache + mod_php&lt;/li&gt;
&lt;li  aria-level="1"&gt;PHP-FPM&lt;/li&gt;
&lt;li  aria-level="1"&gt;PHP-PM&lt;/li&gt;
&lt;li  aria-level="1"&gt;FrankenPHP&lt;/li&gt;
&lt;li  aria-level="1"&gt;RoadRunner&lt;/li&gt;
&lt;li  aria-level="1"&gt;Swoole&lt;/li&gt;
&lt;li  aria-level="1"&gt;NGINX Unit&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Что выбрать &amp;mdash; зависит от контекста. Универсального ответа нет.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Железо: когда ускорение начинается с «железа»&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Если проект живёт на «железе», к которому страшно прикасаться &amp;mdash; пора на апгрейд.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Процессор&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;Битрикс активно использует одноядерные операции &amp;rarr; важна производительность на ядро.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Частота &amp;mdash; от 3.5 ГГц. Желательно с Turbo Boost (Intel) или Precision Boost (AMD).&lt;/li&gt;
&lt;li  aria-level="1"&gt;Кэш L2/L3 &amp;mdash; чем больше, тем лучше.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Новые архитектуры (Intel Alder Lake, AMD Zen 3) дают реальный прирост.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Пример: Intel Core i7-13700K с архитектурой Raptor Lake &amp;mdash; на голову выше старых Xeon.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Диски&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;Только SSD. Лучше &amp;mdash; NVMe (но не любой: смотри IOPS, задержки, скорость записи/чтения).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Дополнительно&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;Elasticsearch &amp;mdash; для поиска, фильтров, сортировки, каталогов.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Kafka, RabbitMQ, Datareon &amp;mdash; брокеры очередей.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Часть рекомендаций актуальна и для Битрикс24, но у него требования к окружению ещё выше.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Это должно помочь.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Если нужно &amp;mdash; делаем аудит. Если сам &amp;mdash; сохраняй текст, используй как чеклист.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Почему не стоит копировать Apple или Авито под ключ</title>
<guid isPermaLink="false">74</guid>
<link>https://alexeyit.ru/all/pochemu-ne-stoit-kopirovat-apple/</link>
<pubDate>Wed, 07 May 2025 09:10:38 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/pochemu-ne-stoit-kopirovat-apple/</comments>
<description>
&lt;p&gt;В жизни любой веб-студии, digital-продакшена или фрилансера случались заявки вроде:&lt;br /&gt; &lt;strong&gt;«Сделайте лендинг как у Apple»&lt;/strong&gt;,&lt;br /&gt; &lt;strong&gt;«Хочу аналог Авито, но с нашим дизайном»&lt;/strong&gt;,&lt;br /&gt; &lt;strong&gt;«Давайте повторим HH, только для другой ниши»&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/bin.jpg" width="1000" height="546" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;На первый взгляд всё просто: бери популярный сервис и адаптируй. Но на практике &amp;mdash; почти никогда не работает. Не из-за рук кривых, а потому что реальность живет в других координатах.&lt;/p&gt;
&lt;p&gt;Разбираться в мотивах таких идей не будем &amp;mdash; они понятны. Давайте поговорим, почему, скорее всего, ничего путного из этого не выйдет.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Дизайн как у Apple &amp;mdash; это не про шрифты и анимации&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Когда звучит фраза &lt;strong&gt;«Сделайте как у Apple»&lt;/strong&gt;, важно задать вопрос: зачем? У Apple аудитория в сотни миллионов пользователей, и их сайт &amp;mdash; это финальный штрих гигантской маркетинговой машины.&lt;/p&gt;
&lt;p&gt;Да, можно вдохновиться стилем, использовать похожие акценты или анимации. Но магия Apple &amp;mdash; это не шрифт San Francisco и не белые фоны. Это контент: рендеры, тексты, микровзаимодействия, проработанные до пикселя.&lt;/p&gt;
&lt;p&gt;За этим стоит команда из десятков дизайнеров, маркетологов, фотографов и 3D-художников. И если вы не собираетесь вкладываться на этом уровне &amp;mdash; результата «как у Apple» не будет.&lt;/p&gt;
&lt;p&gt;В итоге получаем не «как у Apple», а «как смогли». И это не про дизайн &amp;mdash; это про ожидания.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Сделать «аналог Авито» &amp;mdash; звучит просто&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Ещё один популярный запрос &amp;mdash; клон маркетплейса, доски объявлений, дейтинга и любых платформ, где встречаются две стороны: продавцы и покупатели.&lt;/p&gt;
&lt;p&gt;В представлении заказчика это сайт из трёх страниц: главная, каталог и карточка объявления. Просто, быстро, дешево.&lt;/p&gt;
&lt;p&gt;Но на деле &amp;mdash; это сложный бэкенд с множеством взаимосвязей.&lt;br /&gt;Понадобятся:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;два разных личных кабинета (для продавца и покупателя),&lt;/li&gt;
&lt;li  aria-level="1"&gt;система сообщений или чатов,&lt;/li&gt;
&lt;li  aria-level="1"&gt;фильтрация, модерация, рейтинг, верификация,&lt;/li&gt;
&lt;li  aria-level="1"&gt;механизмы уведомлений и безопасности.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И это мы даже не трогаем главную боль: &lt;strong&gt;«проблему курицы и яйца»&lt;/strong&gt;. Нет аудитории &amp;mdash; нет контента. Нет контента &amp;mdash; никто не приходит.&lt;/p&gt;
&lt;p&gt;Если у заказчика уже есть активное комьюнити, база, паблик или хотя бы Telegram-канал &amp;mdash; шанс есть. Если же проект стартует с нуля &amp;mdash; и «аналог Авито» рассчитывает на органический рост&amp;hellip; Это почти всегда провал.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Разработка &amp;mdash; это не самое главное&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Удивительно, но факт: &lt;strong&gt;разработка &amp;mdash; это не главная часть таких проектов&lt;/strong&gt;. Она важная, она дорогая, но она технически решаемая.&lt;/p&gt;
&lt;p&gt;А вот собрать аудиторию, удержать пользователей, обеспечить наполнение контентом &amp;mdash; вот настоящий вызов. Это маркетинг, стратегия, продвижение, комьюнити-менеджмент.&lt;/p&gt;
&lt;p&gt;Если этого нет &amp;mdash; не спасёт ни код, ни крутой дизайн.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Что делать вместо&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Итак, если вдруг вам в голову пришла «гениальная идея» создать ещё один маркетплейс &amp;mdash; остановитесь и задайте себе честный вопрос: &lt;strong&gt;а точно ли он нужен рынку?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Возможно, лучше:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;стартовать с более простого решения &amp;mdash; например, классического e-commerce;&lt;/li&gt;
&lt;li  aria-level="1"&gt;собрать MVP, где продавцов эмулирует внутренняя команда;&lt;/li&gt;
&lt;li  aria-level="1"&gt;сосредоточиться на валидации гипотез, а не на масштабной разработке.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;И напоследок &amp;mdash; про флажки в ТЗ&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Если в техзадании красной нитью идёт: &lt;strong&gt;«должно быть как у Apple»&lt;/strong&gt;, &lt;strong&gt;«сделать всё как на Wildberries, но по-другому»&lt;/strong&gt; &amp;mdash; это тревожный сигнал. Не в плане дизайна, а в плане бизнес-зрелости.&lt;/p&gt;
&lt;p&gt;Лучше чуть проще, но честно. И с пониманием, что вы делаете и зачем.&lt;/p&gt;
&lt;p&gt;Хочешь MVP, который работает, а не мечту на Figma &amp;mdash; сядь, посчитай, подумай. А потом уже запускай.&lt;/p&gt;
</description>
</item>

<item>
<title>Почему проекты срывают сроки: 10+ причин провалов и способы избежать хаоса в разработке</title>
<guid isPermaLink="false">69</guid>
<link>https://alexeyit.ru/all/pochemu-proekty-sryvayut-sroki/</link>
<pubDate>Wed, 23 Apr 2025 11:04:10 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/pochemu-proekty-sryvayut-sroki/</comments>
<description>
&lt;p&gt;Сроки в заказной разработке &amp;mdash; интересная субстанция. Они вроде бы есть, но редко соблюдаются. Давайте разберем, почему так происходит и с какими переменными мы сталкиваемся.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/weather.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;🗂 &lt;strong&gt;Согласования&lt;/strong&gt;. Требуют гораздо больше времени, чем кажется. Когда вам называют сроки до старта работ, в них обычно не заложено время на обратную связь. Представьте дизайн типового ecom-проект с 100+ экранами: предварительное согласование, затем правки, потом утверждение всего пула, а еще адаптив под минимум 4 разрешения. И ведь нужно не просто посмотреть, но и вникнуть, дать конкретные замечания. Сколько на это заложить времени?&lt;/p&gt;
&lt;p&gt;👥 &lt;strong&gt;Команда&lt;/strong&gt;. Еще один критический фактор. Люди болеют, уходят в отпуск. Конечно, эти риски лежат на подрядчике, и если его менеджмент умеет виртуозно жонглировать ресурсами, то сроки едут не сильно или вовсе не едут. Тут многое зависит от проектного менеджера &amp;mdash; сильный PM вывезет проект с любой командой.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Распространенное заблуждение: если добавить программистов, проект пойдет быстрее. На практике новому специалисту нужно вникнуть в код, понять структуру, адаптироваться. Если был один разработчик с производительностью 1, то с двумя в лучшем случае получим 1.75, а не 2.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;🔗 &lt;strong&gt;Интеграции&lt;/strong&gt;. Сегодня есть почти в каждом проекте &amp;mdash; 1С, ERP, Microsoft Dynamics или какая-нибудь шина данных. И даже при максимально качественном предпроектном обследовании что-то может пойти не так. Данные в каталоге могут оказаться заполненными наполовину или быть в неожиданном формате.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔄 Изменение требований в процессе.&lt;/strong&gt; Очень часто в ходе проекта корректируется видение, добавляет новые функции или меняет приоритеты. Даже небольшие изменения могут вызвать каскадный эффект и потребовать переработки уже готовых компонентов.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧱 Технический долг.&lt;/strong&gt; По мере продвижения проекта накапливаются временные решения, которые потом требуют рефакторинга. Часто команды планируют идеальный путь, но в реальности приходится идти на компромиссы, которые впоследствии приводят к замедлению.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🤔 Недооценка сложности задач.&lt;/strong&gt; Это классическая проблема &amp;mdash; разработчики склонны оптимистично оценивать задачи, не учитывая «закон Хофштадтера»: все занимает больше времени, чем кажется, даже с учётом закона Хофштадтера.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🌐 Внешние зависимости&lt;/strong&gt;. Иногда проект зависит от сторонних сервисов, API или поставщиков, которые могут изменить условия, задержать обновления или предоставить неожиданные ограничения.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Нечёткое определение готовности.&lt;/strong&gt; Без чётких критериев приёмки или «definition of done» команды могут бесконечно полировать функциональность или, наоборот, считать задачу завершённой раньше времени.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧠 Переключение контекста.&lt;/strong&gt; Если разработчики вынуждены работать над несколькими проектами одновременно, эффективность падает из-за постоянного переключения и необходимости заново погружаться в контекст.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Минимизируем риски&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;mdash; 📋 Четкое определение требований.&lt;/strong&gt; Зафиксировать требования на раннем этапе и детально согласовать их. Четкие и фиксированные требования позволяют избежать частых изменений и недопонимания.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;mdash; 🌀 Гибкое управление проектом.&lt;/strong&gt; Это позволяет оперативно реагировать на изменения, отслеживать прогресс и пересматривать задачи по мере их выполнения. Разделить проект на маленькие итерации (спринты) с четкими результатами по каждой, что позволяет отслеживать и контролировать риски в реальном времени.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;mdash; 🧑&amp;zwj;⚕️ Резервирование ресурсов.&lt;/strong&gt; Создание резервных ресурсов и планов на случай отсутствия ключевых сотрудников (по болезни, отпуску).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;mdash; 📊 Регулярные промежуточные чекапы.&lt;/strong&gt; Проведение регулярных ревизий в процессе работы над проектом позволяет отслеживать выполнение задач, выявлять потенциальные проблемы на ранней стадии.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;mdash; 🧩 Планирование рисков.&lt;/strong&gt; Идентификация потенциальных рисков на старте проекта и подготовка стратегий для их минимизации.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Сроки в разработке &amp;mdash; это не точные даты, а гипотезы, подверженные погоде, людям и 1С. Если хочешь попасть в дедлайн &amp;mdash; закладывай буфер, строй прозрачные процессы и не верь в магию «давайте добавим еще одного разработчика». А главное &amp;mdash; строй отношения, а не только планы.&lt;/strong&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Laravel + Orchid: Идеальное решение для админок без CMS</title>
<guid isPermaLink="false">68</guid>
<link>https://alexeyit.ru/all/laravel-orchid/</link>
<pubDate>Mon, 21 Apr 2025 10:32:35 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/laravel-orchid/</comments>
<description>
&lt;p&gt;Не только Битриксом едины. Иногда мы меняем модули и компоненты на роуты и контроллеры &amp;mdash; Laravel в нашем арсенале давно. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/baza.png" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;На нём мы собираем всё: от бэкендов под мобилки до админок для магазинов. А дальше &amp;mdash; как фантазия подскажет 😅&lt;/p&gt;
&lt;p&gt;Если CMS, с одной стороны, накладывает на нас ограничения, но при этом предлагает мощную встроенную админку, то фреймворки такой роскоши нам не дают. Когда бекенд на Laravel, а админка нужна, у нас есть несколько путей:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Писать с нуля на HTML &amp;ndash; можно даже купить готовый шаблон, есть весьма приличные варианты.&lt;/li&gt;
&lt;li&gt;Сделать отдельный фронт на Vue или React &amp;ndash; пишем API для редактирования, отдельно собираем фронтенд.&lt;/li&gt;
&lt;li&gt;Использовать готовое решение &amp;ndash; наиболее известные сейчас: SleepingOwl, Laravel Nova и Orchid.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Когда-то давно мы использовали SleepingOwl, но по ряду причин отказались от него. Laravel Nova хороша, но платная. В итоге мы обратили внимание на Orchid &amp;ndash; визуально приятное, опенсорсное, кастомизируемое и регулярно обновляемое решение.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Это база&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;⚡️ Быстрое создание админок&lt;/strong&gt; &amp;ndash; Orchid позволяет быстро разрабатывать сложные админ-панели без необходимости писать много кода. Используется декларативный стиль, что делает код более читаемым.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;📊 Гибкие таблицы и формы&lt;/strong&gt; &amp;ndash; Встроенные механизмы для работы с таблицами (TD, Layouts, Screens) позволяют легко создавать CRUD-интерфейсы, настраивать фильтрацию и сортировку данных.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔐 Система разрешений (ACL)&lt;/strong&gt; &amp;ndash; Гибкая ролевая модель, которая позволяет управлять доступом на уровне пользователей, ролей и отдельных действий.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🎨 TailwindCSS + Turbo&lt;/strong&gt; &amp;ndash; В Orchid используется современный стек технологий, что делает интерфейс легковесным и быстрым без необходимости вручную писать HTML и CSS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧩 Гибкость и расширяемость&lt;/strong&gt; &amp;ndash; Можно подключать свои классы, middleware, события и сервисы, создавая кастомные модули и плагины.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Неочевидно&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧠 «Глобальные состояния» в Screens&lt;/strong&gt; &amp;ndash; Можно использовать &lt;em&gt;$this-&amp;gt;state()&lt;/em&gt; для хранения и передачи данных между методами внутри одного экрана (аналог Livewire). Это позволяет сделать более сложные и динамичные страницы без обновления.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🚀 Интерактивные элементы через AsyncAction&lt;/strong&gt; &amp;ndash; Orchid поддерживает асинхронные операции без перезагрузки страницы. Можно использовать &lt;em&gt;AsyncAction&lt;/em&gt; для выполнения сложных запросов, отправки писем или обновления данных в фоновом режиме.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔔 Поддержка WebSocket&lt;/strong&gt;s &amp;ndash; Orchid позволяет легко интегрировать Laravel Echo и Pusher для создания real-time интерфейсов, но эта возможность редко используется. Можно делать обновления данных без перезагрузки.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧵 Кастомные фильтры в таблицах&lt;/strong&gt; &amp;ndash; Помимо стандартных фильтров можно создавать сложные предустановленные фильтры, которые работают через QueryFilter. Это полезно для сложных отчетов и аналитики.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🛠 Использование Modifiers для форматирования данных&lt;/strong&gt; &amp;ndash; Можно создавать собственные классы модификаторов, которые изменяют отображение данных в таблицах без необходимости писать логику форматирования в экранах. Например, для автоматического преобразования дат, валют или статусов.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;В итоге&lt;/strong&gt; &amp;mdash; Orchid оказался именно тем, что искали для Laravel-проектов. Прост в освоении, гибок в кастомизации и визуально приятен. Можно быстро собрать MVP, а потом не стыдно и в прод выкатить.&lt;/p&gt;
</description>
</item>

<item>
<title>Интеграция 1С и Битрикс24: варианты решений для закрытых контуров и сложных проектов</title>
<guid isPermaLink="false">67</guid>
<link>https://alexeyit.ru/all/integraciya-1s-i-bitriks24/</link>
<pubDate>Fri, 18 Apr 2025 09:29:56 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/integraciya-1s-i-bitriks24/</comments>
<description>
&lt;p&gt;Довольно много работаем с коробочными Битрикс24 &amp;mdash; от энтерпрайзов до поменьше &amp;mdash; и почти всегда на таких проектах всплывает тема интеграций. Битрикс24 с чем-то ещё.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/iskustvo.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Чаще всего это, конечно, 1С. Обычно в виде ЗУП &amp;mdash; «Зарплата и управление персоналом». Вполне логично: когда у тебя 1000+ пользователей внутреннего портала, удобнее управлять ими централизованно через одну систему.&lt;/p&gt;
&lt;p&gt;В целом для ЗУПа есть штатная интеграция. Пользователей и немного данных она передаёт, но не более.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔐 Проблема закрытых контуров&lt;/strong&gt;&lt;br /&gt;Частая история: 1С живёт в изолированном контуре, где интернет даже не ночевал. А интеграция даже у коробочных Битриксов работает через серверы вендора. Получается, что связать «открытый» Битрикс24 и «закрытую» 1С &amp;mdash; почти невозможно.&lt;/p&gt;
&lt;p&gt;А бывает и хуже: обе системы закрыты, и каждая &amp;mdash; в своём контуре. Это уже совсем весело.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧰 Какие есть варианты интеграции&lt;/strong&gt;&lt;br /&gt;Разберу по степени сложности и зрелости проекта.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🗂 1. Обмен через файлы&lt;/strong&gt;&lt;br /&gt;Форматы могут быть любые: CSV, XML, Excel.&lt;br /&gt;1С формирует файл, кладёт у себя. Прокси-сервер, у которого есть доступ и туда, и наружу, отгружает файл в Битрикс24. Дальше всё обрабатывается. Обратно &amp;mdash; по той же схеме.&lt;/p&gt;
&lt;p&gt;Плюсы:&lt;br /&gt;&amp;ndash; быстро&lt;br /&gt;&amp;ndash; просто&lt;br /&gt;&amp;ndash; дешево&lt;/p&gt;
&lt;p&gt;Минусы:&lt;br /&gt;&amp;ndash; сложно контролировать&lt;br /&gt;&amp;ndash; мало гибкости&lt;br /&gt;&amp;ndash; можно сломать одной запятой&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔌 2. API с обеих сторон&lt;/strong&gt;&lt;br /&gt;На стороне 1С &amp;mdash; веб-сервис. На стороне Битрикс24 &amp;mdash; обработчик, который знает, что и куда тащить. Прокси по-прежнему нужен. Такой вариант требует больше усилий, особенно если потоков несколько: пользователей гоним, задачи, отпуска, статусы.&lt;/p&gt;
&lt;p&gt;Если настроить всё грамотно &amp;mdash; один из самых универсальных способов. Особенно если есть потребность в двустороннем обмене.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🛢 3. SQL-шина&lt;/strong&gt;&lt;br /&gt;Работает как прокси. Оба участника читают и пишут в общую базу. Обычно один поток = одна таблица. Например, пользователи из 1С &amp;rarr; в Битрикс24 &amp;mdash; это один поток. Можно, конечно, всё в одну таблицу, но тогда больше шансов на косяки.&lt;/p&gt;
&lt;p&gt;Хорош тем, что всегда можно зайти, посмотреть, что передано, что зависло, что обработалось. Прозрачно и удобно. Я бы назвал это «шина на коленке», но работает стабильно.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🏗 А если нужно что-то посерьёзнее?&lt;/strong&gt;&lt;br /&gt;Когда обменов много, системы становятся сложнее, появляется больше направлений и требований по отказоустойчивости &amp;mdash; начинают появляться полноценные брокеры сообщений: Kafka, RabbitMQ, всё чаще &amp;mdash; Datareon.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datareon&lt;/strong&gt; &amp;mdash; российская сертифицированная альтернатива, всё чаще встречаю на проектах, особенно в крупных корпоративных заказах. В такие решения уже можно вшивать маршрутизацию, подтверждение доставки, приоритезацию, контроль ошибок и многое другое.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🤔 Что выбрать?&lt;/strong&gt;&lt;br /&gt;Зависит от задач. Вот примерная логика:&lt;br /&gt;&amp;ndash; если обмен простой и редкий &amp;mdash; хватит файлов&lt;br /&gt;&amp;ndash; если данные гоняются туда-сюда часто &amp;mdash; уже API&lt;br /&gt;&amp;ndash; много направлений обмена, хочется прозрачности &amp;mdash; SQL&lt;br /&gt;&amp;ndash; если проект масштабный и планируется подключение других систем &amp;mdash; пора смотреть в сторону брокеров&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;⚠️ О чём часто забывают&lt;/strong&gt;&lt;br /&gt;&amp;ndash; CSV может поломаться от одной запятой&lt;br /&gt;&amp;ndash; API требуют авторизации, логирования, повторных попыток&lt;br /&gt;&amp;ndash; SQL-шина без чётких расписаний может вызвать гонки данных&lt;br /&gt;&amp;ndash; Kafka и Rabbit &amp;mdash; мощно, но требовательно, особенно к инфраструктуре и команде&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔒 Безопасность и устойчивость&lt;/strong&gt;&lt;br /&gt;Независимо от подхода &amp;mdash; критично:&lt;br /&gt;&amp;ndash; логировать обмен&lt;br /&gt;&amp;ndash; ограничивать доступ&lt;br /&gt;&amp;ndash; обрабатывать ошибки&lt;br /&gt;&amp;ndash; предусмотреть восстановление после падения&lt;/p&gt;
&lt;p&gt;Особенно если данные важные, а обмен идёт в реальном времени.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧩 Что удобно в реальных проектах&lt;/strong&gt;&lt;br /&gt;&amp;ndash; возможность вручную «толкнуть» данные в систему&lt;br /&gt;&amp;ndash; визуализация очередей (видно, что висит и почему)&lt;br /&gt;&amp;ndash; простое добавление новых параметров без переписывания всей логики&lt;br /&gt;&amp;ndash; защита от потери данных, подтверждение доставки&lt;/p&gt;
</description>
</item>

<item>
<title>Гейзенбаг и самооборона: Как проактивная защита Битрикса может заблокировать сам себя</title>
<guid isPermaLink="false">66</guid>
<link>https://alexeyit.ru/all/geyzenbag-i-samooborona/</link>
<pubDate>Wed, 16 Apr 2025 09:47:45 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/geyzenbag-i-samooborona/</comments>
<description>
&lt;p&gt;💡 Гейзенбаг (Heisenbug) &amp;mdash; это такой баг, который исчезает или меняет поведение, как только ты пытаешься его исследовать. Смотришь &amp;mdash; и он уже ведёт себя по-другому. Почти как квантовая частица 🧙&amp;zwj;♂️&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/bugs.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Иногда проект начинает жить своей жизнью. Ошибки появляются, но никто их не видит. Логи молчат, нагрузка в норме, а фронт впадает в кому. Мы как раз про такую ситуацию &amp;mdash; реальная история охоты на гейзенбага 👇&lt;/p&gt;
&lt;p&gt;Ситуация вымышленная, все совпадения случайны (ну почти).&lt;/p&gt;
&lt;p&gt;На входе: корпоративный сайт на Битриксе, который отдаёт API. Фронт &amp;mdash; на Vue 3 / Nuxt.&lt;br /&gt;Симптомы: периодически, в разное время, часть фронта просто перестаёт работать, а в браузере &amp;mdash; ошибка: Nuxt не работает.&lt;/p&gt;
&lt;p&gt;Примерно через 20&amp;ndash;60 минут всё само «оживает» и продолжает работать как ни в чём не бывало.&lt;/p&gt;
&lt;p&gt;Что говорят логи?&lt;br /&gt;🔍 pm2 &amp;mdash; пусто (есть варнинги, но не критичные)&lt;br /&gt;📄 nginx &amp;mdash; чисто&lt;br /&gt;🐘 php &amp;mdash; молчит&lt;br /&gt;🧱 Битрикс &amp;mdash; почти ничего, а что есть &amp;mdash; не страшно&lt;br /&gt;🖥 Нагрузка на сервер &amp;mdash; не выше 20%&lt;br /&gt;💽 Жёсткие диски &amp;mdash; расслаблены, курят бамбук&lt;/p&gt;
&lt;p&gt;Мы прыгали с бубном вокруг сервера, но:&lt;br /&gt;&amp;mdash; эмуляция нагрузки не даёт сбоя&lt;br /&gt;&amp;mdash; API отвечает&lt;br /&gt;&amp;mdash; тестовый стенд работает как часы&lt;/p&gt;
&lt;p&gt;Железо и нагрузка тут не при чём.&lt;/p&gt;
&lt;p&gt;Так мы жили пару месяцев, перебирав все мыслимые и немыслимые варианты 🧠&lt;/p&gt;
&lt;p&gt;Пока однажды...&lt;/p&gt;
&lt;p&gt;В access.log заметили, что часть трафика отбраковывается с ошибкой 403 ❌&lt;br /&gt;Причина &amp;mdash; попытка инъекции вредоносного кода. С одной стороны &amp;mdash; хорошо: злоумышленник не пробрался 👮&amp;zwj;♂️&lt;br /&gt;С другой &amp;mdash; странно. Кто именно блокирует?&lt;/p&gt;
&lt;p&gt;Выяснилось: проактивный фильтр Битрикса.&lt;br /&gt;Стало интересно. Копаем глубже ⛏️&lt;/p&gt;
&lt;p&gt;Симулируем атаку: подставляем «вредный» код в URL и&amp;hellip; ловим бан от Битрикса.&lt;br /&gt;Фронт частично перестаёт работать. Вот оно! 🧩&lt;/p&gt;
&lt;p&gt;Ключевое слово &amp;mdash; частично.&lt;br /&gt;Nuxt всё ещё может отдавать пререндеренные страницы, но при любом запросе к API &amp;mdash; ошибка.&lt;br /&gt;Например, с главной всё работает, а если обновить страницу &amp;mdash; бах, и ошибка.&lt;/p&gt;
&lt;p&gt;Но и это ещё не всё. Поскольку фронт и бэкенд живут на одной машине, они общаются через 127.0.0.1 и IP сервера.&lt;br /&gt;Проактивный фильтр не различает, кто есть кто &amp;mdash; и блокирует весь IP, включая самого себя.&lt;/p&gt;
&lt;p&gt;🚫 Вуаля: фронт частично недоступен, API под блоком.&lt;br /&gt;🔥 Причём инициатором бана оказался... он сам 🤦&lt;/p&gt;
&lt;p&gt;P.S.&lt;br /&gt;Решение «сложить фронт и бэкенд на один сервер и один домен» &amp;mdash; не наше, так что не кидайтесь тапками 👟&lt;/p&gt;
&lt;p&gt;Вывод:&lt;br /&gt;Если фронт начинает вести себя странно, а логи делают вид, что ничего не происходит &amp;mdash; копайте в неожиданное. Проактивная защита &amp;mdash; это круто, но ни когда она душит проект который защищает.&lt;/p&gt;
</description>
</item>

<item>
<title>Выбираем архитектуру: монолит против микросервисов</title>
<guid isPermaLink="false">63</guid>
<link>https://alexeyit.ru/all/monolit-vc-mikroservisov/</link>
<pubDate>Mon, 07 Apr 2025 17:39:16 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/monolit-vc-mikroservisov/</comments>
<description>
&lt;p&gt;Объявим участников. В правом углу — бывший чемпион в супертяжелом весе — Мистер Монолит. В левом углу — молодая и накачанная банда микросервисов в полулегком весе.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/mr.png" width="1792" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Я видел несколько серьезных монолитов в своей жизни. У одного из них было около 5+ часов времени сборки, и компании пришлось построить свой собственный CI, чтобы продолжать двигаться вперед.&lt;/p&gt;
&lt;p&gt;С другой стороны, я видел, как люди использовали архитектуру микросервисов. Им требовалось 11 балансировщиков нагрузки, чтобы запустить их приложение. Самое интересное, что это было до эпохи инфраструктуры как кода, так что это было действительно большое число.&lt;/p&gt;
&lt;p&gt;Если бы вы спросили меня пять лет назад, я бы по умолчанию сказал, что монолит — это зло, а микросервисы — это хорошо и я бы процитировал все стандартные вещи. Однако практический опыт этих лет научил меня, что путь микросервисов может легко обернуться против вас.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Определения&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Монолитная архитектура ПО — &lt;strong&gt;это подход к построению приложений, где весь функционал концентрируется в одном приложении или модуле&lt;/strong&gt;. Все компоненты, такие как пользовательский интерфейс, бизнес-логика и база данных, находятся внутри одной кодовой базы. В екоме его представляют Битрикс и интерпрайз-решения вроде Magento. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Микросервисная архитектура&lt;/strong&gt; — вариант сервис-ориентированной архитектуры программного обеспечения, направленный на взаимодействие насколько это возможно небольших, слабо связанных и легко изменяемых модулей — &lt;strong&gt;&lt;em&gt;микросервисов&lt;/em&gt;&lt;/strong&gt;. Например, PIM отвечает за товарный контент, отдельная система — за управление остатками и ценами и т. д.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Мертвая лошадь?&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Позвольте мне пропустить разговор о проблемах монолита, нет смысла пинать мертвую лошадь. И позвольте мне сосредоточиться немного на проблемах с микросервисами.&lt;/p&gt;
&lt;p&gt;Помимо написания кода, есть много вещей, которые нужно сделать, чтобы продукт был готов (создание сборки, запуск тестов, развертывание, мониторинг, масштабирование и т. д.). Все это нужно сделать только один раз для монолита. Однако это нужно повторить для каждого из микросервисов. В лучшем случае ваши микросервисы основаны на похожем стеке технологий для повторного использования. В худшем случае вам придется изобретать велосипед для каждого из них. Небольшое примечание: некоторые из этих проблем постепенно решаются с помощью инструментов, но только некоторые из них.&lt;/p&gt;
&lt;p&gt;Кто должен просыпаться в 2 часа ночи, если ваш сервис начал хромать? Специальная команда Ops для монолита обычно обладает достаточными знаниями, чтобы решить проблемы первого уровня и позволяет вам справиться с остальными в 8 утра. Как только у вас появляются сотни микросервисов, вы довольно часто оказываетесь с парой человек или даже с одним, которые знают, как поддерживать работу этого конкретного сервиса. Не очень-то весело просыпаться в 2 часа ночи только потому, что какой-то мониторинг дал ложный положительный результат. Кроме того, это невероятно увеличивает операционные риски что произойдет, если этот человек, который знает какой-то конкретный микросервис, уедет в отпуск в место без интернета?&lt;/p&gt;
&lt;p&gt;Перемещение кода внутри монолита и изменение интерфейсов в целом не так уж и плохо. Перемещение кода между микросервисами и изменение интерфейсов, включая управление версиями и обратную совместимость, невероятно дорого.&lt;/p&gt;
&lt;p&gt;История с изменением интерфейса становится особенно болезненной, если вы не идеально разделили свое приложение в первый раз и обнаружили, что некоторые части логики относятся к неправильному микросервису. И я могу обещать, вы не сделали этого идеально. Было бы наивно предполагать, что первоначальное мышление будет идеально правильным в последующие годы.&lt;/p&gt;
&lt;p&gt;Монолит использует тот же язык, фреймворк и т. д. В результате перемещение людей между частями монолита становится простым. Перемещение людей между различными микросервисами (которые могут иметь совершенно разные технологические стеки) — это сложно.&lt;/p&gt;
&lt;p&gt;Отладка чего-либо в наборе микросервисов — это, мягко говоря, болезненно. Любой, кому приходилось гоняться за ошибкой в ​​4—5 микросервисах туда-сюда в течение нескольких дней, чтобы обнаружить, что один из них не выполнил какую-либо проверку, поймет.&lt;/p&gt;
&lt;p&gt;Бизнес-риск — многие команды изначально перегружают свои проекты думая, что их стартап / проект станет следующим единорогом, и поэтому им следует строить все с помощью микросервисов или какой-то другой гипермасштабируемой инфраструктуры. Но это обычно не так, почти всегда не так.&lt;/p&gt;
&lt;p&gt;Я почти уверен, что есть много других минусов. Однако даже этот список заставляет меня усомниться в том, что микросервисы — это панацея .&lt;/p&gt;
&lt;p&gt;Ок. Монолит плох. Микросервисы плохи... Ааааа... Всё плохо. Бежать некуда. Что делать?&lt;/p&gt;
&lt;p&gt;Самая большая проблема — это не монолит как таковой или микросервисы как таковые, а скорее крайности, которые его вызывают. И, к сожалению, команды/компании могут не распознать проблемы вовремя и не начать решать их, пока они полностью не выйдут из-под контроля.&lt;/p&gt;
&lt;p&gt;Монолит становится большим и имеет тенденцию продолжать расти и ухудшаться. Когда вы понимаете, что это проблема, она уже настолько большая и волосатая, что ее разрушение становится почти невыполнимой задачей.&lt;/p&gt;
&lt;p&gt;Микросервисы часто используются преждевременно, их количество и сложность взаимодействия растут, и в результате возникают все те проблемы, которые я описал выше.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Вопрос масштаба&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Забавный факт состоит в том что если достаточно покрутить микроскоп через который мы смотрим на проект в монолите можно микро сервисный подход. Любой проект использует сторонние библиотеки, API и т. д., вполне себе микросервисы. &lt;/p&gt;
&lt;p&gt;А еще забавнее что тот же фокус можно проделать и с микросервисами. И запросто может оказаться что компания которая кичиться что у нее внутри микросервисы, модный смузи и они за френдли атоствфету — окажеться что у них N монолитов как то между собой связаны. &lt;/p&gt;
&lt;p&gt;В данной части я конечно утрирую, но все же от проекта к проекту понитие “микро” может быть разным. Где то это сервис вроде PIM, поиска или шины данных, а у кого то это сервис состоящий из 1 — 2 классов и например конвертирует данные из одного формата в другой. &lt;/p&gt;
&lt;p&gt;Все упирается в вопросы масштаба с которым вы смотрите.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Что выбрать? &lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Наверное открою портал в ад высказав свою точку зрения, но Мое мнение таково что вам нужны сервисы правильного размера. Прежде всего, я считаю, что хорошей идеей для большинства проектов малого, среднего и части крупного бизнеса будет начать с разумно монолитной архитектуры (один или несколько сервисов). &lt;/p&gt;
&lt;p&gt;По мере того, как они начинают расти, ищите естественные трещины (куски кода с очень разными атрибутами). Это те части, которые можно постепенно разделить на отдельные сервисы. &lt;/p&gt;
&lt;p&gt;Главное не пропустить момент, когда монолит выходит из-под контроля. Лучше начать разделять вещи немного преждевременно, чем сделать это слишком поздно. Мое внутреннее чувство подсказывает, что как только вы начинаете тратить около 5% своего времени на борьбу с проблемами монолита, пора что-то с этим делать.&lt;/p&gt;
&lt;p&gt;Приведу пример на родном, прости господи, Битрикс. С ростом проекта, вероятно, первым делом у вас возникнул проблемы со стандартным обмен с 1С, если оно есть. Это решается как раз выделение модуля обмена в отдельный сервис плюс шина данных Ребит или Кафка. &lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Контекст имеет решающее значение&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;В жизни в чистом виде, почти наверняка, нет ни микросервисов ни монолитов. Кругом гибриды и компромиссные решения из набора монолитов и микросервисов. При выборе стоит учитывать эволюционный путь трансформации ПО, сколько это будет стоит и как больной это будет делать. &lt;/p&gt;
</description>
</item>

<item>
<title>Когда-то и мы были дикими 🦖</title>
<guid isPermaLink="false">62</guid>
<link>https://alexeyit.ru/all/eto-baza/</link>
<pubDate>Thu, 03 Apr 2025 08:25:16 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/eto-baza/</comments>
<description>
&lt;p&gt;На заре становления нашей компании Git был чем-то непонятным и ненужным. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/biplan.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Один разработчик работал над одним сайтом, и мы, вероятно, вполне соответствовали званию региональной веб-студии. Но времена меняются, и с тех пор прошло очень много лет.&lt;/p&gt;
&lt;p&gt;Сейчас, попадая на проект без Git, мы испытываем недоумение: как компания жила и развивала свой проект без системы контроля версий? Например, совсем недавно к нам обратился клиент с запросом на доработку e-commerce проекта. Начав разбираться, мы увидели, что изначально это был шаблонное решение, но со временем в него добавили массу кастомных решений &amp;ndash; местами удачных, местами не очень.&lt;/p&gt;
&lt;p&gt;Первый тревожный звоночек. Ситуация стандартная: прошлый подрядчик ушел, разобраться в коде непросто. Запросили доступы &amp;ndash; получили админку и FTP. Зашли и ужаснулись: Git отсутствует, документации по изменениям нет, кастомных решений &amp;ndash; огромная количество.&lt;/p&gt;
&lt;p&gt;Ладно, допустим, с этим можно справиться. Начали выяснять, как выполнялись релизы, но быстро стало понятно, что тестового сервера тоже нет. Это, конечно, печально, но когда-то и мы были такими. Поэтому я решил поделиться, что сейчас входит в базовый набор на подобных проектах.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Базовый набор инструментов для работы над проектами&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Git &amp;ndash; это база &lt;/strong&gt;&lt;br /&gt;Без Git сегодня никуда. Это не только система контроля версий, но и страховка от случайных ошибок и удобный инструмент командной работы. Мы используем локальный GitLab, но если у клиента уже есть свой репозиторий, работаем с ним.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Тестовые окружения&lt;/strong&gt;&lt;br /&gt;В идеале тестовая среда должна разворачиваться под каждую отдельную задачу, но это дорого. Поэтому стандартный минимум &amp;ndash; три окружения:&lt;br /&gt;&amp;ndash; Прод &amp;ndash; боевой сервер,&lt;br /&gt;&amp;ndash; Пре-прод &amp;ndash; среда, максимально приближенная к продакшену,&lt;br /&gt;&amp;ndash; Песочница &amp;ndash; для тестирования изменений.&lt;/p&gt;
&lt;p&gt;Часто для этих целей удобно использовать Docker, чтобы минимизировать различия между окружениями.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. CI/CD &amp;ndash; автоматизация развертывания &lt;/strong&gt;&lt;br /&gt;На некоторых проектах без CI/CD просто невозможно работать. Хотя не всегда он нужен в минимальном наборе, на серьезных проектах это must-have. Мы используем GitLab CI/CD для автоматизации развертывания и тестирования.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Документация &amp;ndash; экономия времени в будущем&lt;/strong&gt;&lt;br /&gt;Честно говоря, мы сами не всегда вели документацию, но это неизменно приводило к проблемам. Поэтому сейчас придерживаемся правила:&lt;br /&gt;&amp;ndash; Завершил задачу &amp;ndash; добавь описание в таск-трекер.&lt;br /&gt;&amp;ndash; Внес значительное изменение &amp;ndash; задокументируй в базе знаний.&lt;/p&gt;
&lt;p&gt;Для этого используем комбинацию Яндекс.Трекера и его встроенной вики. Главное &amp;ndash; неважно, какой инструмент вы используете (хоть Google Docs), важно, чтобы документация была.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Резервное копирование &lt;/strong&gt;&lt;br /&gt;Перед любыми изменениями на боевом сервере надо убедиться, что бэкапы: существуют, целостны, разворачиваются без проблем.&lt;/p&gt;
&lt;p&gt;Кроме того, важно проверять, что резервные копии регулярно создаются и актуализируются. Идеальный вариант &amp;ndash; хранить их на отдельном сервере, а не надеяться, что копия внутри боевого сервера спасет в случае ЧП.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Мониторинг &amp;ndash; чтобы не ловить проблемы постфактум &lt;/strong&gt;&lt;br /&gt;Даже качественный код не спасает от внешних факторов: сервер может упасть, провайдер может отключить услугу, модули могут сломаться. Чтобы не узнать о проблеме от разъяренного клиента, мы используем три инструмента:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Uptime&lt;/strong&gt; &amp;ndash; отслеживание доступности проекта и сбор статистики.&lt;br /&gt;&lt;strong&gt;Zabbix&lt;/strong&gt; &amp;ndash; мониторинг состояния сервера (нагрузка, память, дисковое пространство).&lt;br /&gt;&lt;strong&gt;Sentry&lt;/strong&gt; &amp;ndash; слежение за ошибками на фронтенде и бэкенде. Да, он потребляет 15 ГБ ОЗУ, но зато все ошибки наглядно и с алертами.&lt;/p&gt;
&lt;p&gt;В поиске новых инструментов&lt;br /&gt;Сейчас мы рассматриваем варианты ПО для анализа статической безопасности кода, но пока находимся в процессе изучения.&lt;/p&gt;
&lt;p&gt;А какие инструменты используете вы?&lt;/p&gt;
</description>
</item>

<item>
<title>Киллер-фича 🚀</title>
<guid isPermaLink="false">61</guid>
<link>https://alexeyit.ru/all/killer-ficha/</link>
<pubDate>Tue, 01 Apr 2025 08:38:59 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/killer-ficha/</comments>
<description>
&lt;p&gt;Хотите приложение для своего проекта? Допустим, у вас есть портал, сервис или интернет-магазин, и вы хотите сделать для него мобильное приложение. Какие у вас есть варианты?&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/border.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;h2&gt;Нативные приложения 📱&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Первое, что приходит на ум, &amp;mdash; это нативные приложения для iOS и Android. Для их разработки используются Swift и Kotlin. По сути, это два отдельных проекта, объединенных только общим API и дизайном (и то далеко не всегда). У каждой платформы свои особенности, поэтому неудивительно, что иногда Android уходит вперед в развитии, а иногда наоборот. Разработка нативного приложения требует ресурсов, ведь поддерживать две платформы сразу &amp;mdash; это двойная работа, больше затрат на тестирование, исправление багов и обновления.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Кроссплатформенные решения 🔄&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Следующий вариант &amp;mdash; кроссплатформенные технологии. Например, Xamarin (жив ли он еще?), React Native или Flutter, который сейчас на коне. В этом случае процесс разработки схож: сначала создаем API, затем собираем дизайн, интегрируем аналитику, настраиваем пуш-уведомления и наконец запускаем приложение. Поддерживать такой проект проще, так как код один, но все же в некоторых случаях приходится делать доработки под каждую платформу. Это дешевле, чем нативная разработка, но все равно может быть затратным.&lt;br /&gt;Но что, если и этот вариант не подходит по бюджету? 🤔&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;PWA &amp;mdash; альтернатива ⚡️&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Здесь на сцену выходит PWA &amp;mdash; технология, которая позволяет создать приложение на базе обычного веба. Прогрессивные веб-приложения (Progressive Web Applications) представляют собой улучшенные версии привычных сайтов, которые ведут себя как мобильные приложения.&lt;/p&gt;
&lt;p&gt;Существует также TWA (Trusted Web Activities), которая позволяет запускать веб-сайты как приложения на Android, используя Chrome Custom Tabs, и IWA (Isolated Web Apps) &amp;mdash; изолированные веб-приложения, работающие в ограниченной среде. Однако в большинстве случаев никто не вникает в эти нюансы и называет все просто PWA.&lt;br /&gt;Мы используем эту технологиями уже 6-7 лет и можем сказать: работает, можно брать.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Как создать? 🛠&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Если ваш проект уже работает на Vue или React, то считайте, что он готово, почти. В противном случае сначала нужно собрать API, затем создать отдельный фронтенд, ориентируясь на мобильное разрешение, и наконец интегрировать все вместе. Бэкенд может быть любым &amp;mdash; хоть Laravel, хоть Битрикс, хоть даже WordPress (да-да, мы такое встречали). Главное, чтобы сайт работал по HTTPS.&lt;/p&gt;
&lt;p&gt;Когда все готово, начинается магия. Загружаем проект на сервер и переходим на сайт PWA Builder или аналоги Аналогов довольно много. Указываем ссылку на наш PWA, ждем. Если есть ошибки в манифесте или других настройках, исправляем их и повторяем процесс. В результате получаем два исходника: один для Android, другой для iOS. Дальше загружаем их в магазины приложений, следуя стандартным инструкциям.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Киллер фича ✨&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Самое крутое в PWA &amp;mdash; обновления. Вам не нужно каждый раз проходить модерацию магазинов приложений, чтобы внести изменения. Достаточно просто обновить сайт, и пользователи сразу получат новую версию. Это невероятно удобно. Кроме того, разработка занимает меньше времени и не требует расширенного стека технологий.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Минусы? 🤷&amp;zwj;♂️&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Есть нюансы, с которыми придется мириться. Например, пуш-уведомления работают через браузер, а не как нативные. Но все же их можно настроить. Аналитика также имеет ограничения, поскольку PWA не обладает полным доступом к системным возможностям устройства. И наконец, PWA не может работать в офлайне. Хотя если речь идет об интернет-магазине, то какая разница, ведь без интернета покупки все равно никто не делает?&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Заключение 📊&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;По последним исследованиям, спрос на PWA растет, и это неудивительно. Решение обладает своими плюсами и минусами, но при этом работает стабильно, обходится дешевле, чем нативная разработка, и позволяет быстро выпускать обновления. Возможно, в будущем PWA станет стандартом, а пока это отличная альтернатива.&lt;/p&gt;
</description>
</item>

<item>
<title>Брокеры сообщений: что это, как работают и какой выбрать?</title>
<guid isPermaLink="false">59</guid>
<link>https://alexeyit.ru/all/brokery/</link>
<pubDate>Tue, 25 Mar 2025 18:33:41 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/brokery/</comments>
<description>
&lt;p&gt;Если вам потребуется организовать обмен данными между системами, какой выбор вы сделаете, если вас разбудят среди ночи? Давайте разберёмся, как происходит обмен информацией и какую роль в этом играют брокеры.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/broker2.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Виды общения&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Общение &amp;mdash; это основа взаимодействия между людьми и системами. Самый привычный формат &amp;mdash; диалог, когда один человек (N) передаёт информацию другому (Y) и ожидает ответ. Это классическая модель запроса и ответа.&lt;/p&gt;
&lt;p&gt;Но бывают ситуации, когда N транслирует сообщение Y, не ожидая ответа. Например, рекламные рассылки или push-уведомления.&lt;/p&gt;
&lt;p&gt;Существует также обмен через посредника. Представим, что N передаёт сообщение X, а тот, в свою очередь, распространяет его среди друзей C, D и E. Этот принцип реализован в мессенджерах и новостных рассылках.&lt;/p&gt;
&lt;p&gt;Другой вариант &amp;mdash; N записывает сообщение и оставляет его в специальном ящике. X может забрать его в удобное время. Здесь каждый получатель получает только одно сообщение.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Паттерны обмена информацией&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;В программировании сервисы и приложения взаимодействуют между собой, обмениваясь данными. Основные модели взаимодействия:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Request-Response (Запрос-Ответ)&lt;/strong&gt; &amp;ndash; примером является работа HTTP, когда клиент делает запрос на сервер и ждёт ответа.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;One-Way (Односторонний обмен) или Fire and Forget (Отправил и забыл)&lt;/strong&gt; &amp;ndash; отправитель передаёт сообщение без ожидания ответа, как в случае с UDP-пакетами.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Publish-Subscribe (Публикация-Подписка, Pub-Sub)&lt;/strong&gt; &amp;ndash; отправитель публикует сообщение в канал, а подписчики его получают.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Point-to-Point (Точка-Точка)&lt;/strong&gt; &amp;ndash; каждое сообщение доставляется только одному получателю.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Когда приложения работают напрямую, они зависят от доступности друг друга. В случае с асинхронным взаимодействием через посредника эти ограничения снимаются.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Роль брокеров сообщений&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Брокер сообщений &amp;ndash; это программный посредник, который реализует паттерны Pub-Sub и Point-to-Point. Его основная задача &amp;ndash; упрощение маршрутизации, хранения и доставки сообщений. Использование брокера оправдано, если:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;задачи требуют значительных ресурсов;&lt;/li&gt;
&lt;li  aria-level="1"&gt;не нужен мгновенный ответ;&lt;/li&gt;
&lt;li  aria-level="1"&gt;необходимо координировать множество сервисов;&lt;/li&gt;
&lt;li  aria-level="1"&gt;требуется масштабируемость и отказоустойчивость.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Гарантия доставки сообщений&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;При передаче данных возможны сбои, поэтому брокеры предлагают различные уровни гарантии доставки:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;At most once (Не более одного раза)&lt;/strong&gt; &amp;ndash; сообщения могут теряться.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;At least once (Хотя бы один раз)&lt;/strong&gt; &amp;ndash; возможна повторная отправка, чтобы гарантировать доставку.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Exactly once (Строго один раз)&lt;/strong&gt; &amp;ndash; сообщения не теряются и не дублируются.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Очереди и топики&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Брокеры реализуют два основных механизма работы:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Очереди (Queue, Point-to-Point)&lt;/strong&gt; &amp;ndash; сообщение читается одним получателем и затем удаляется.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Топики (Topic, Pub-Sub)&lt;/strong&gt; &amp;ndash; сообщение доставляется сразу нескольким подписчикам.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Популярные брокеры сообщений&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Среди множества решений можно выделить наиболее популярные:&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Apache Kafka&lt;/strong&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Datareon&lt;/strong&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Redis Streams&lt;/strong&gt;&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Amazon SQS&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Каждое из решений отличается по характеристикам: масштабируемость, отказоустойчивость, поддерживаемые протоколы и гарантии доставки.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Альтернативные подходы&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Вместо брокера можно использовать SQL-базу данных как очередь сообщений, но это менее гибкий вариант.&lt;/p&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;RabbitMQ: «умный брокер, тупой потребитель»&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;RabbitMQ &amp;ndash; традиционный брокер с поддержкой Pub-Sub и Point-to-Point. Он активно управляет сообщениями: распределяет их по подписчикам, отслеживает их статус и удаляет после обработки. Он поддерживает At most once и At least once, а его настройка проще, чем у Kafka.&lt;/p&gt;
&lt;p&gt;Принцип работы RabbitMQ:&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;Отправитель (Publisher) передаёт сообщение в обменник (Exchange).&lt;/li&gt;
&lt;li  aria-level="1"&gt;Сообщение попадает в одну или несколько очередей (Queue).&lt;/li&gt;
&lt;li  aria-level="1"&gt;Подписчики (Consumers) забирают сообщения из очереди.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Apache Kafka: «тупой брокер, умный потребитель»&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;Kafka &amp;ndash; мощный брокер для работы с большими объёмами данных. В отличие от RabbitMQ, он не удаляет сообщения после обработки. Они остаются в хранилище и могут быть прочитаны несколько раз. Kafka поддерживает Exactly once и обладает высокой отказоустойчивостью.&lt;/p&gt;
&lt;p&gt;Принцип работы Kafka:&lt;/p&gt;
&lt;ol&gt;
&lt;li  aria-level="1"&gt;Продюсер (Producer) отправляет сообщение в топик.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Брокер записывает сообщение в журнал (лог) без удаления.&lt;/li&gt;
&lt;li  aria-level="1"&gt;Подписчики (Consumers) сами запрашивают (pull) сообщения.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;h3&gt;&lt;strong&gt;Kafka vs RabbitMQ: что выбрать?&lt;/strong&gt;&lt;/h3&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;Kafka&lt;/strong&gt; подходит для обработки больших потоков данных, обладает высокой отказоустойчивостью и возможностью повторного чтения сообщений.&lt;/li&gt;
&lt;li  aria-level="1"&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt; удобен для микросервисной архитектуры, не требует дополнительных ресурсов и сложной настройки.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Выбор брокера зависит от конкретных задач. Если требуется обработка событий с высокой пропускной способностью и хранение данных, лучше подойдёт Kafka. Если важно оперативное взаимодействие микросервисов с возможностью гибкой маршрутизации, RabbitMQ будет предпочтительнее.&lt;/p&gt;
</description>
</item>

<item>
<title>Баги, Ошибки, Проблемы, Недостатки, Неисправности, Сбои, и Дефекты</title>
<guid isPermaLink="false">53</guid>
<link>https://alexeyit.ru/all/bagi-oshibki-problemy-nedostatki-neispravnosti-sboi-i-defekty/</link>
<pubDate>Thu, 27 Feb 2025 10:11:02 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/bagi-oshibki-problemy-nedostatki-neispravnosti-sboi-i-defekty/</comments>
<description>
&lt;p&gt;Волею судьбы часть времени провожу в общении с руководителями проектов, клиентами и иногда 
клиентами-клиентов. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/scale_2400.jpg" width="1200" height="628" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В диалогах часто возникает слова: баги, проблемы, сбои, ошибка и дефект и зачастую они используются как синонимы, но различия все таки есть.&lt;/p&gt;
&lt;p&gt;Если что-нибудь может пойти не так, оно пойдёт не так...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ошибка (error)&lt;/strong&gt; &amp;mdash; это &lt;strong&gt;ошибочные действия&lt;/strong&gt;, допущенные в результате &lt;strong&gt;ошибки &lt;/strong&gt;программирования или &lt;strong&gt;ошибки &lt;/strong&gt;использования. Не каждая ошибка приводит к последующим &lt;strong&gt;проблемам&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Дефект &lt;/strong&gt;&amp;mdash; это &lt;strong&gt;ошибка&lt;/strong&gt;, обнаруженная на этапе разработки.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Баг &lt;/strong&gt;&amp;mdash; это дефект, обнаруженный на этапе тестирования. Не все &lt;strong&gt;ошибки &lt;/strong&gt;обнаруживаются. Следовательно, не все &lt;strong&gt;ошибки &lt;/strong&gt;вызывают &lt;strong&gt;дефекты &lt;/strong&gt;и &lt;strong&gt;баги&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Сбой или отказ&lt;/strong&gt; &amp;mdash; это когда система не соответствует своим требованиям. Это &lt;strong&gt;ошибка&lt;/strong&gt;, которая дошла до пользователя.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Неисправность &lt;/strong&gt;является причиной &lt;strong&gt;сбоя&lt;/strong&gt;. Это может быть ошибка программирования или неправильное использование системы пользователем.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Проблемой &lt;/strong&gt;может быть что угодно &amp;mdash; даже то, что было согласовано и является правильным согласно задания. Это может быть то что беспокоит пользователя или что затрудняет его работу.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Недостаток / изъян&lt;/strong&gt; обычно относится к проблеме в архитектуре или конструкции всей системы. Недостатки не являются напрямую ошибкой, но вызывают проблемы.&lt;/p&gt;
&lt;p&gt;Например, если вы зальете дизель в бензиновый автомобиль, автомобиль перестанет работать. Тот факт, что двигатель больше не работает, является &lt;strong&gt;отказом&lt;/strong&gt;. &lt;strong&gt;Ошибка &lt;/strong&gt;была в том, что в автомобиль залили дизель. Пользователи и тестировщики обычно сообщают о &lt;strong&gt;сбоях&lt;/strong&gt;, разработчикам нужно найти &lt;strong&gt;неисправности&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/suv.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Используем больше слов в одном сценарии: представьте водителя автомобиля, который идет к механику с жалобой на то, что машина не едет. Пользователь сообщает о &lt;strong&gt;неисправности&lt;/strong&gt;. Машина не ехала. Механик осматривает машину и подтверждает это. Он выясняет, что в бензиновом двигателе есть дизельное топливо &amp;mdash; он определил &lt;strong&gt;причину&lt;/strong&gt;. Это вина пользователя, причина &lt;strong&gt;неисправности &lt;/strong&gt;в том, что он залил дизельное топливо в бензиновый двигатель! Теперь мы пытаемся найти &lt;strong&gt;причину&lt;/strong&gt;, по которой произошла &lt;strong&gt;неисправность&lt;/strong&gt;. Это была человеческая &lt;strong&gt;ошибка &lt;/strong&gt;&amp;mdash; водитель не обратил внимания, но &lt;strong&gt;проблема &lt;/strong&gt;в том, что вы вообще можете залить дизельное топливо в бензиновый двигатель.&lt;/p&gt;
&lt;p&gt;Несколько примеров интересных ошибок&lt;/p&gt;
&lt;p&gt;&lt;h2 class="block-header"&gt;Ошибки единиц измерения&lt;/h2&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/space.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Когда вы имеете дело с физическими системами, единицы измерения имеют значение. Есть разница, едете ли вы со скоростью 100 миль или 100 км в час. Это опыт, который команде &lt;a href="https://ru.wikipedia.org/wiki/Mars_Climate_Orbiter" target="_blank" rel="nofollow noreferrer noopener"&gt;Mars Climate Orbiter&lt;/a&gt; пришлось пройти нелегким путем: одна команда использовала ньютоны, а другая &amp;mdash; фунт-силы. Это несоответствие в коммуникации между двумя программными компонентами привело к взрыву космического корабля. Это потеря в размере 327,6 млн долларов США.&lt;/p&gt;
&lt;p&gt;&lt;h2 class="block-header"&gt;Ошибки на единицу или ошибка неучтённой единицы (Off-by-One Errors)&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ru.wikipedia.org/wiki/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%D0%BD%D0%B0_%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%86%D1%83" target="_blank" rel="nofollow noreferrer noopener"&gt;Ошибки на единицу&lt;/a&gt; &amp;mdash; это одни из самых распространённых логических ошибок в программировании. Они возникают, когда мы путаемся в границах &amp;gt;&amp;lt;=:&lt;/p&gt;
&lt;ul class="block-list"&gt;
&lt;li&gt;Меньше или меньше либо равно&lt;/li&gt;
&lt;li&gt;Больше или больше либо равно&lt;/li&gt;
&lt;li&gt;Меньше или больше&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Такие ошибки можно обнаружить, если протестировать функцию на заранее известных входных данных и сравнить фактический результат с ожидаемым. Данная ошибка коварна, так как может приводить не только к некорректным вычислениям, но и, например, к бесконечным циклам.&lt;/p&gt;
&lt;p&gt;Хорошие юнит-тесты помогают выявлять ошибки.&lt;/p&gt;
&lt;p&gt;&lt;h2 class="block-header"&gt;Условия гонки / race condition&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D0%BD%D0%BA%D0%B8" target="_blank" rel="nofollow noreferrer noopener"&gt;Состояние гонки &lt;/a&gt;возникает, когда два или более потоков/процессов работают с одними и теми же данными. В такой ситуации время выполнения отдельных частей процесса становится критически важным. Если повезёт, всё будет работать так, как задумано. Но если синхронизация окажется неудачной, возможны различные проблемы:&lt;/p&gt;
&lt;ul class="block-list"&gt;
&lt;li&gt;Грязное чтение&lt;/li&gt;
&lt;li&gt;Неповторяющиеся чтения&lt;/li&gt;
&lt;li&gt;Фантомное чтение&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ошибки, вызванные гонками данных, очень трудно отловить, поскольку они зависят от точного времени выполнения разных процессов. Из-за этого их иногда называют «&lt;a href="https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%B9%D0%B7%D0%B5%D0%BD%D0%B1%D0%B0%D0%B3" target="_blank" rel="nofollow noreferrer noopener"&gt;Гейзенбагами&lt;/a&gt;» (Heisenbugs) &amp;ndash; если попытаться их поймать, они словно исчезают.&lt;/p&gt;
&lt;p&gt;&lt;h2 class="block-header"&gt;Нефункциональные проблемы&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Одна из самых распространённых нефункциональных ошибок &amp;mdash; это медленная работа кода или проекта. Определить это можно с помощью инструментов, таких как Xdebug, аналоги или на глаз.&lt;/p&gt;
&lt;p&gt;Другая частая проблема &amp;mdash; чрезмерное потребление памяти в браузерах. Это критично для смартфонов, где ресурсы ограничены.&lt;/p&gt;
&lt;p&gt;Другая проблема со смартфонами &amp;mdash; чрезмерное энергопотребление. Если приложение быстро разряжает батарею, его вряд ли оценят пользователи.&lt;/p&gt;
&lt;p&gt;&lt;h2 class="block-header"&gt;Человеческая ошибка&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;На мой взгляд, утверждение, что первопричиной всех бед является человеческая ошибка неверна &amp;mdash; это слишком просто. Такая трактовка означает что мы отказываемся от улучшения системы.&lt;/p&gt;
&lt;p&gt;Однако я думаю, что выделение четырех типов «человеческой ошибки» может привести к дополнительным размышлениям на эту тему:&lt;/p&gt;
&lt;ul class="block-list"&gt;
&lt;li&gt;&lt;strong&gt;Промахи &lt;/strong&gt;&amp;mdash; невнимательность: возможно, нам следует сделать предупреждение более заметным, убрать беспорядок в интерфейсе или привлечь больше людей для этой работы.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Провалы &lt;/strong&gt;&amp;mdash; провалы памяти: если люди забыли что-то сделать, это может быть связано с тем, что им нужно запомнить слишком много вещей или информация была озвучена очень давно. Более частое обучение или упрощение работы может помочь.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ошибки &lt;/strong&gt;&amp;mdash; непреднамеренные ошибки в принятии решений: если люди нарушают правило или процедуру, им может не хватать знаний или понимания процесса.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Нарушение &lt;/strong&gt;&amp;mdash; намеренное совершение неправильных действий: если люди намеренно нарушают правила процедуры, они могут не осознавать последствий, или их обычный рабочий процесс будет значительно медленнее, если они будут постоянно следовать правилам.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Держите меня семеро, я прикручиваю ИИ</title>
<guid isPermaLink="false">51</guid>
<link>https://alexeyit.ru/all/ai/</link>
<pubDate>Tue, 18 Feb 2025 11:35:29 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/ai/</comments>
<description>
&lt;p&gt;Мы начали работу над первым проектом, в техническом задании которого фигурирует использование искусственного интеллекта. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/ai.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для особо душных: мы будем использовать не «искусственный интеллект», а языковую модель на основе нейронных сетей, построенную по архитектуре трансформера (далее &amp;mdash; ИИ).&lt;/p&gt;
&lt;p&gt;Конечно, задача, которую мы доверили ИИ, достаточно простая &amp;mdash; даже немного обидная для него. Это генерация текста на основе пользовательского запроса, по сути, чат-бот. Интегрировать его будем с Битриксом, хотя от самого Битрикса в проекте осталось не так много, но это уже другая история.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Выбор между локальным и облачным решениями&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Перед нами стоял выбор: развернуть модель на своем сервере или использовать облачное решение.&lt;/p&gt;
&lt;p&gt;Поскольку ИИ встраивается в уже существующий продукт, а объем его использования сложно прогнозировать &amp;mdash; популярность сервиса еще предстоит проверить &amp;mdash; мы остановились на облачном варианте.&lt;/p&gt;
&lt;p&gt;Это позволило сократить время запуска, избежать сложностей с инфраструктурой и снизить стартовые затраты. В будущем, если сервис будет востребован, можно будет перенести ИИ на свой сервер.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Выбор облачной платформы&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Так как сервис ориентирован на российский рынок, требовалось решение с серверами в РФ. Коробочную версию мы исключили по причинам, указанным выше. В итоге выбор сузился до Яндекса и Сбера.&lt;/p&gt;
&lt;p&gt;Для тестирования мы использовали GPT и Claude, сформировав 10 типовых задач для генерации текста.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Результаты тестирования&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Вот субъективные оценки различных моделей по нашему сценарию:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;Яндекс 4 Lite&lt;/strong&gt; &amp;mdash; 9&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;Яндекс 4 Pro&lt;/strong&gt; &amp;mdash; 7&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;Claude 3.5 Sonnet&lt;/strong&gt; &amp;mdash; 7&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;Claude 3.5 Haiku&lt;/strong&gt; &amp;mdash; 6&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;GPT-4o Mini&lt;/strong&gt; &amp;mdash; 8&lt;/li&gt;
&lt;li style="font-weight: 400;" aria-level="1"&gt;&lt;strong&gt;GigaChat&lt;/strong&gt; &amp;mdash; 5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В итоге остановились на младшей модели Яндекса. Она показала хорошие результаты и выдачу в удобном формате.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Песочница Яндекса&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Для тестов у нас есть технический промт &amp;mdash; он добавляется к пользовательскому запросу. Это позволяет добиться более стабильных и предсказуемых результатов.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/image1-2.png" width="1248" height="783" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;h2&gt;Что дальше&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Мы принимаем ответы от ИИ через API, обрабатываем их и формируем финальный ответ для пользователя. В целом, процесс довольно прост.&lt;/p&gt;
&lt;p&gt;Конечно, круг задач, которые можно решать таким способом, пока ограничен.&lt;/p&gt;
&lt;p&gt;Ранее мы уже интегрировали GPT в чат-помощника &amp;mdash; пользователи даже не всегда замечали, что общаются с ИИ.&lt;/p&gt;
&lt;p&gt;Теперь рассматриваем вариант внедрения ИИ в поиск, вероятно, через Elasticsearch или напрямую.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
</description>
</item>

<item>
<title>Восемьдесят миллионов оттенков зеленого: как боты устроили распродажу производительности</title>
<guid isPermaLink="false">42</guid>
<link>https://alexeyit.ru/all/ottenki-zelenogo/</link>
<pubDate>Fri, 17 Jan 2025 08:37:01 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/ottenki-zelenogo/</comments>
<description>
&lt;p&gt;Последнее время на практике участились обращения, связанные с ИТ-аудитом систем. Чаще всего клиенты обращаются по вопросам рефакторинга, отладки обменов с внешними системами, новых функций и составления дорожных карт по развитию проектов. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/robot-opt.png" width="1216" height="832" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;
Но особенно часто встречаются запросы на оптимизацию производительности. Хочу поделиться двумя интересными случаями из последней практики, где причины низкой производительности оказались довольно неочевидными, но примитивны.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Дисклеймер&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Прежде чем перейти к разбору кейсов, сделаю важное отступление. Да, я знаю о неоднозначном отношении к Битриксу, особенно когда речь идет о относительно крупных и нагруженных проектах. Конечно, грамотно написанный проект на современном фреймворке будет быстрее и технологичнее. Ключевое слово здесь &amp;mdash; &lt;strong&gt;грамотно написанный&lt;/strong&gt;. Интересно, сколько времени у вас уйдет на создание с нуля функционала, аналогичного БУС.&lt;/p&gt;
&lt;p&gt;Конечно, найдутся специалисты, которые заявят, что реализуют это на WordPress или, прости господи, Joomla за вечер и пачку сигарет. Но, есть сомневаюсь в этом. Я уверен, что правильно настроенный Битрикс способен работать быстро и выдерживать средние руки. &lt;/p&gt;
&lt;p&gt;Если вы убежденный противник PHP и Битрикса в частности, или скорость для вас ассоциируется исключительно с Go, возможно, этот материал не для вас. Также если вы сеньор-разработчик Битрикса &amp;ndash; вам здесь может быть не слишком интересно.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Кейс первый: Таинственное замедление&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Первым пациентом стал проект на Битриксе, созданный на основе готового решения с серьезной кастомизацией. B2B-проект с интеграцией с 1С, каталогом около 10 тысяч товаров и примерно сотней свойств. Сервер у проекта был настоящий космолет &amp;ndash; на таком не только сайты можно хостить, но и, пожалуй, космические корабли запускать.&lt;/p&gt;
&lt;p&gt;Проект имел историю заражения вирусами, был не до конца обновлен, и, что самое критичное, работал катастрофически медленно. Карточка товара могла грузиться более 6 секунд, про списки товаров и главную страницу лучше было вообще молчать.&lt;/p&gt;
&lt;p&gt;Первым делом мы обновили ядро и перевели проект на PHP 8.1, учитывая неуверенность в качестве предыдущей очистки от вирусов. Этот процесс имел свои нюансы, но сейчас не о них. Обновление, как и ожидалось, не решило проблему производительности. &lt;/p&gt;
&lt;p&gt;При анализе отладки обнаружилась странная картина &amp;ndash; основная нагрузка приходилась на ядро. Проверка на вирусы ничего не выявила, активность была чистой. При исследовании SQL-запросов заметили подозрительно длинный запрос к корзине, выполняющийся на каждом хите.&lt;/p&gt;
&lt;p&gt;Дальнейшее расследование привело нас к таблице с 80 миллионами записей &amp;ndash; таблице готового решения, хранящей названия корзин и их цвета. Это была реализация модного разделения корзин. Странность заключалась в том, что при минимальном трафике и закрытом характере портала такой объем данных казался необъяснимым.&lt;/p&gt;
&lt;p&gt;Разгадка крылась в роботах &amp;ndash; Яндекса, GPT, Apple и прочих. Система создавала для каждого бота отдельную сессию и автоматически генерировала корзину с зеленым цветом и названием по умолчанию. Решение оказалось простым &amp;ndash; мы закрыли проект от ботов и добавили механизм очистки неактуальных корзин. Результат &amp;ndash; время загрузки снизилось с 6 секунд до 0,04-0,06 секунд.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Кейс второй: Периодические падения сервера&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Второй случай &amp;ndash; также проект на Битриксе, но уже без готового шаблона, с относительно чистым кодом. Основная проблема &amp;ndash; регулярные падения сервера. В каталоге около 100 тысяч товаров, минимум торговых предложений, небольшое количество цен и складов. Сервер снова был избыточно мощным для такого проекта.&lt;/p&gt;
&lt;p&gt;Команда проекта уже провела определенную работу: настроили memcached, оптимизировали базу данных, экспериментировали с настройками 1С, но существенных улучшений это не принесло.&lt;/p&gt;
&lt;p&gt;На первый взгляд заметили 300-400 запросов на страницу &amp;ndash; многовато, но не критично. Init-файл оказался перегружен разнообразным функционалом, что противоречит хорошим практикам, но не критично. Команды для анализа логов помогли выявить активность ботов:&lt;/p&gt;
&lt;p&gt;Первая команда выводит всех ботов в отдельный файл:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;awk ’{print $6}’ bots.log | sort | uniq -c | sort -nr | head -n 1&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Вторая команда сортирует ботов по количеству запросов:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;awk -F\» ’{print $6}’ bots_sort.log | sort | uniq -c | awk ’$1 &amp;gt; 5000’ | sort -nr&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Особенностью проекта оказалось необычное соотношение &amp;ndash; на 100 тысяч товаров приходилось 10 тысяч свойств, что существенно выше нормы. Компоненты каталога не были оптимизированы под такой объем данных, а стандартный обмен с 1С только усугублял ситуацию.&lt;/p&gt;
&lt;p&gt;При проверке конфигурации MySQL обнаружили, что кэш составлял всего пару гигабайт при доступных тридцати. Композитное кэширование было полностью отключено. В результате мощный сервер пытался обрабатывать 500-600 запросов на каждый хит, что в сочетании с медленной SQL создавало критическую нагрузку.&lt;/p&gt;
&lt;p&gt;План оптимизации включил внедрение Cloudflare для контроля ботов, включение композитного кэширования, оптимизацию конфигурации MySQL, чистку неиспользуемых модулей, реструктуризацию Init-файла и оптимизацию механизма работы со свойствами товаров.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;strong&gt;Главные уроки&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Оба случая демонстрируют, что падение производительности редко происходит одномоментно &amp;ndash; это обычно результат постепенного накопления проблем. Критически важно регулярно мониторить состояние проекта и своевременно разбирать технический долг.&lt;/p&gt;
&lt;p&gt;Проблемы производительности часто имеют комплексный характер, затрагивая различные уровни системы &amp;ndash; будь то Битрикс, Laravel или любая другая платформа. Иногда это некачественный код, иногда &amp;ndash; неоптимальная архитектура. При этом диагностику всегда стоит начинать с проверки самых очевидных причин, постепенно углубляясь в детали. Удивительно часто решение лежит на поверхности &amp;ndash; нужно только уметь его увидеть.&lt;/p&gt;
</description>
</item>

<item>
<title>В поисках программистов-экзорцистов</title>
<guid isPermaLink="false">37</guid>
<link>https://alexeyit.ru/all/v-poiskah-programmistov-ekzorcistov/</link>
<pubDate>Sat, 21 Dec 2024 14:09:44 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/v-poiskah-programmistov-ekzorcistov/</comments>
<description>
&lt;p&gt;При первой встрече и знакомстве с новым клиентом мы часто обсуждаем проблемы которые возникли на проекте. Особенно внимательно мы стараемся выяснить что случилось с предыдущими подрядчиками или внутренними специалистами. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/sand.png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Диалог и набор ответов, обычно, довольно предсказуем — это сроки, качество, обратная связь и так далее. Но особое место занимает проблема, которую называю ходячие мертвецы.&lt;/p&gt;
&lt;p&gt;Такой проект возникает, когда между командой заказчика, подрядчика и самим проектом нет вайпа. Причин может быть множество: неверный выбор технологического стека, переоценка собственных возможностей или недооценка унаследованного кода. &lt;/p&gt;
&lt;p&gt;В результате заказчик ищет виновника торжества чтобы в будущем не повторять ошибок. Сам на себя он не подумает, может быть причина в подрядчике, но довольно часто заказчик приходит к выводу, что вероятно проблема кроется в технологии. На перезапуск проекта ее непременно нужно поменять на другую: с WordPress на Битрикс, с Битрикса на Laravel, с PHP на Python и так далее. Можете написать любую комбинацию, не промахнетесь. &lt;/p&gt;
&lt;p&gt;Важно понимать: нет плохих технологий, языков программирования, фреймворков и CMS — есть их неправильное использование. Это как пытаться есть суп вилкой. Конечно, у каждой технологии есть своя специализация. Например, на Go маловероятно, что вы будете разрабатывать корпоративный сайт. Технически это сделать конечно можно, но вряд ли целесообразно. Однако если задача состоит в том что бы расшить узкое место с помощью отдельного микросервиса, Go может оказаться окажется прекрасным выбором.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Выбор&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Прежде чем погружаться в технические детали, важно понять контекст проекта: является ли это стартапом с амбициозными планами роста или устоявшимся бизнесом с четкими процессами, какие нагрузки ожидаются, потребуется ли интеграция с существующими системами. Все эти факторы существенно влияют на выбор технологического решения.&lt;/p&gt;
&lt;p&gt;Рассмотрим показательный пример: компания по производству мебели планирует создать платформу для онлайн-продаж. На первый взгляд, задача кажется простой — нужен интернет-магазин. Но копнем глубже: компании требуется интеграция с 1С для учета складских остатков, конфигуратор мебели для клиентов, система управления заказами для менеджеров и API. И здесь мы сталкиваемся с классическим выбором между популярными решениями: Tilda, WordPress, OpenCart, 1С-Битрикс.&lt;/p&gt;
&lt;p&gt;Каждая из этих систем прекрасна в своей нише. WordPress изначально создавался как блоговая платформа, OpenCart и 1С-Битрикс специализируется на e-commerce. И хотя современные CMS благодаря плагинам и расширениям способны выполнять практически любые задачи, это не всегда оптимальный путь.&lt;/p&gt;
&lt;p&gt;Да, многие скажут, что WordPress с набором плагинов может превратиться в прекрасный интернет-магазин, и люди успешно используют такое решение. Это действительно правда, но лишь отчасти. Здесь уместна аналогия с транспортом: можно прикрепить к велосипеду мотор, но это не сделает его мотоциклом. На таком решении вы сколько то проедет, но вопрос насколько далеко? &lt;/p&gt;
&lt;p&gt;При выборе технологического решения стоит смотреть не только на текущие потребности, но и на перспективу развития проекта. В случае с мебельной компанией это может быть расширение функционала конфигуратора, добавление функций для визуализации мебели в интерьере или интеграция с новыми торговыми площадками. &lt;/p&gt;
&lt;p&gt;Важно учитывать стоимость владения и поддержки, доступность специалистов на рынке, вопросы безопасности и надежности решения. Технологический стек должен соответствовать не только техническим требованиям, но и бизнес-целям компании, обеспечивая оптимальное соотношение функциональности, стоимости и перспектив развития.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Ключевой критерий&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Ключевой критерий выбора технологии прост: если у вас есть доступ к ресурсам, способным за разумные деньги — разработать и развивать систему — значит эта технология подходит для вашего проекта. &lt;/p&gt;
&lt;p&gt;Плюс система, язык, платформа должна быть достаточно популярна так чтобы специалисты не являлись единорогами, которых днем с огнем не сыщешь. &lt;/p&gt;
&lt;p&gt;В последнее время я особое внимание обращаю на размер вендора, предоставляющего готовое или коробочное решение. Если это небольшой стартап, существует немаленькая вероятность что его завтра не будет, прекратиться обновления и поддержка, и вы рискуете остаться один на один с незнакомым легаси-кодом.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Как обычно важен контекст&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Радует, что заказчики стали более осознанно подходить к выбору технологического стека. Они стараются не увеличивать зоопарк технологий, что упрощает дальнейшую поддержку проектов.&lt;/p&gt;
&lt;p&gt;В IT-мире нет однозначно плохих или хороших решений — они просто разные, как цвета и вкусы. Главное — правильно оценить контекст и сделать осознанный выбор технологии под конкретные задачи.&lt;/p&gt;
</description>
</item>

<item>
<title>Синонимы, транслит и магия: Как заставить систему читать мысли пользователя</title>
<guid isPermaLink="false">34</guid>
<link>https://alexeyit.ru/all/sinonimy-translit-i-magiya/</link>
<pubDate>Sat, 14 Dec 2024 12:42:13 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/sinonimy-translit-i-magiya/</comments>
<description>
&lt;p&gt;Поиск сопровождает практически любую информационную систему — будь то интернет-магазин, таск-трекер, CRM или что-либо другое. Заветная иконка поиска присутствует почти везде.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/Magic-(1).png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В зависимости от проекта к данной функции предъявляются разные требования. Например, в магазине автозапчастей поиск чаще всего осуществляется по артикулу — казалось бы, просто, но данных очень много. В интернет-магазинах требования к поиску максимально широкие.&lt;/p&gt;
&lt;p&gt;Речь идет о транслите, учете ошибок в написании, синонимах и других тонкостях. Обычно все начинается с классического поиска в формате выборки по SQL или нечеткого поиска..&lt;/p&gt;
&lt;h2&gt;Эволюция&lt;/h2&gt;
&lt;p&gt;Штатный битрикс поиск умеет искать по названиям и описаниям. Дополнительно в него можно включить любое свойство, чтобы расширить возможности поиска. Это отличный вариант улучшения на старте. Достаточно загрузить каталог в 1С или на сайт и через запятую добавить ключи, по которым должен осуществляться поиск товаров. Функция транслита обычно присутствует, но почти всегда остается выключенной.&lt;/p&gt;
&lt;p&gt;Далее можно рассмотреть варианты с дополнительными модулями — поиск работает лучше, но не стоит ожидать чудес.&lt;/p&gt;
&lt;p&gt;Появляется Sphinx — довольно старая система, но ее преимущество перед стандартным решением в том, что мы сами индексируем нужные нам данные, плюс поиск становится условно быстрым.&lt;/p&gt;
&lt;p&gt;Затем на сцену выходят мощные решения вроде Elasticsearch \+ Kibana — инструмент, который мы регулярно внедряем клиентам. Здесь можно самостоятельно настроить индексацию, синонимы, учет ошибок и аналитические дашборды, а также установить веса — просто идеально.&lt;/p&gt;
&lt;h2&gt;Мода&lt;/h2&gt;
&lt;p&gt;Для стартапов и небольших приложений подойдут Meilisearch и Typesense с их простотой использования и быстрой интеграцией. Проекты, связанные с искусственным интеллектом, оценят Weaviate и Milvus благодаря семантическому поиску. Для корпоративных решений рассмотрите Vespa или Opensearch. При необходимости встроить поиск в существующую инфраструктуру обратите внимание на RedisSearch или ZincSearch.&lt;/p&gt;
&lt;h2&gt;SaaS-сервисы: быстро, но с ограничениями&lt;/h2&gt;
&lt;p&gt;Отдельно стоит упомянуть SaaS-сервисы. Туда загружается XML или JSON с контентом для индексации, после чего возвращается готовая выдача. Практически это выглядит как установка фрейма или JS-строки поиска с последующим вызовом Vue-компонента с результатами.&lt;/p&gt;
&lt;p&gt;Такой подход удобен, но имеет существенные ограничения: зависимость от стороннего сервиса, ежемесячные платежи и невозможность создать, например, SEO-страницу поиска. Это не самый профессиональный способ решения задачи, хотя иногда может быть оправдан срочностью.&lt;/p&gt;
&lt;h2&gt;Что важно учесть&lt;/h2&gt;
&lt;h3&gt;1. Обработка ввода пользователя&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Транслитерация: Поддержка ввода на русском и английском (например, «stul» и «стул»).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Опечатки: Распознавание и исправление ошибок (например, «стлу» → «стул»).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Синонимы: Учет различных формулировок (например, «диван» = «софа»).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Регистронезависимость: Поиск должен работать независимо от регистра (например, «СТУЛ» = «стул»).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Множественное число и склонения: Поддержка форм слов (например, «стула», «стулья»).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Префиксный поиск: Результаты при вводе части слова (например, «стул» → «стул», «стулья», «стульчик»).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Логика поиска&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Релевантность: Ранжирование результатов по популярности, наличию и соответствию.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Поиск по полям: Разделение на основные (названия, категории) и дополнительные (описания, характеристики).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Фильтры и сортировка: Поддержка фильтров по цене, наличию, категориям и т. д.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Поиск по частям фраз: Например, «детский стул» → «стул детский», «детский стол и стул».&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Сложные запросы: Поиск по нескольким параметрам одновременно (например, «стул деревянный дешевый»).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Обогащение функционала&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Перевод слов: Если сайт многоязычный, поиск должен учитывать перевод (например, «chair» = «стул»).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Популярные запросы: Отображение популярных и трендовых запросов.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Подсказки (автокомплит): Предложение вариантов поиска во время ввода.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;История запросов: Возможность повторить предыдущие поиски.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Семантический поиск: Понимание контекста, даже если запрос некорректен (например, «стол круглый белый»).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Как выбрать правильное решение поиска&lt;/h2&gt;
&lt;p&gt;Нередко к нам обращаются клиенты с жалобой, что поиск не работает. Это общее описание проблемы, поэтому необходимо получить конкретику, чтобы определить дальнейшие действия.&lt;/p&gt;
&lt;p&gt;Для структуризации задачи мы высылаем клиентам опросный лист в формате таблицы, где просим описать проблемы по определенному шаблону: ключевые моменты, текущие результаты и желаемый.&lt;/p&gt;
&lt;p&gt;По результатам заполнения таблицы становится понятно, стоит ли просто доработать штатный поиск или необходимо внедрять более тяжеловесное решение.&lt;/p&gt;
&lt;p&gt;Вот пример таблицы, которую клиент сможет заполнить для анализа текущей работы поиска.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="table"&gt;Таблица&lt;/h2&gt;&lt;br /&gt;
В формате Google Таблицы: &lt;a href="https://docs.google.com/spreadsheets/d/1diUu2S1K1l3vBBoYsmDVYI6eH4FJrBLCEQv_WrWMt1s/edit?usp=sharing"&gt;https://docs.google.com/spreadsheets/d/1diUu2S1K1l3vBBoYsmDVYI6eH4FJrBLCEQv_WrWMt1s/edit?usp=sharing&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;p&gt;Запрос&lt;/p&gt;
&lt;/th&gt;&lt;th&gt;&lt;p&gt;Что выводится сейчас&lt;/p&gt;
&lt;/th&gt;&lt;th&gt;&lt;p&gt;Что должно выводиться (ожидаемый результат)&lt;/p&gt;
&lt;/th&gt;&lt;th&gt;&lt;p&gt;Ошибка, которая не обрабатывается&lt;/p&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;молоко&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Товары с «молоко», включая «молоко 1%», «кефир» и «йогурт». Все виды хлеба, включая «багет», «батон», «нарезка».&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Не учитываются синонимы (например, «кефир», «йогурт»).&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;хлеб&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Все виды хлеба, включая «багет», «батон», «нарезка»&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Нет обработки синонимов (например, «батон»).&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;mlk&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Результаты с «молоко» (транслитерация «mlk» → «молоко»).&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Транслит не обрабатывается.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;яблк&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Результаты для «яблоко» (исправление опечатки).&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Опечатка не обрабатывается.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;шокоадный&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Товары с «шоколад», «батончик», включая «сникерс», «твикс».&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Поиск работает строго по фразе, не учитывает раздельный поиск слов.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;молоко детское&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Товары с молоком, включая категорию «детское».&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Нет фильтрации по категориям (например, «детское молоко»).&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;1л молока&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;«Молоко 1 литр», «кефир 1 литр».&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Нет обработки числовых значений.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;яблоки зеленые&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ссылка на результаты поиска&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Зеленые яблоки, включая категории «фрукты», «яблоки».&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;Не работает поиск по ключевым словам с уточнением цвета.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;h2&gt;Инструкция для заполнения:&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Запрос: Впишите поисковый запрос, который пользователь может ввести.&lt;/li&gt;
&lt;li&gt;Что выводится сейчас: Скопируйте ссылку на текущие результаты поиска (или опишите, что выводится).&lt;/li&gt;
&lt;li&gt;Что должно выводиться: Опишите, как вы ожидаете, что результаты должны быть отображены.&lt;/li&gt;
&lt;li&gt;Ошибка, которая не обрабатывается: Укажите, какая ошибка присутствует в работе поиска (например, отсутствие фильтрации, неработающие синонимы, игнорирование опечаток и т. д.).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Этот формат поможет четко определить проблемные места и области для улучшения.&lt;/p&gt;
&lt;h2&gt;Заключение&lt;/h2&gt;
&lt;p&gt;При выборе дальнейшего решения важно помнить о производительности. Если в системе миллион товаров или торговых предложений, выбор решений становится существенно ограниченным.&lt;/p&gt;
&lt;p&gt;Вспоминая пример с Wrike, где поиск осуществлялся по названиям, содержанию описаний проектов и задач, включая комментарии. А в Яндекс.Трекере, к примеру, общий поиск работает только по названиям задач — крайне неудобно.&lt;/p&gt;
&lt;p&gt;Важно отметить, нужна какая то система аналитики с отслеживание самых популярных запросов и запросов на которых нет ответов. Это позволит постепенно улучшать поиск. &lt;/p&gt;
&lt;p&gt;Поиск в проектах с большим объемом информации — это настоящий помощник, позволяющий быстро находить давно утерянные данные. Не пренебрегайте этой, казалось бы, тривиальной функцией, улучшайте ее. Пользователи будут благодарны, что конечном итоге улучшит ваши метрике и бизнес будет благодарен.&lt;/p&gt;
</description>
</item>

<item>
<title>Человек, который контролирует 40% интернета. Восхождение open-source империи</title>
<guid isPermaLink="false">33</guid>
<link>https://alexeyit.ru/all/open-source-empire/</link>
<pubDate>Thu, 12 Dec 2024 08:23:18 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/open-source-empire/</comments>
<description>
&lt;p&gt;В начале 2000-х 19-летний разработчик Мэтт Муленвег форкнул систему управления контентом b2/cafelog, добавив в нее функции, которых, по его мнению, не хватало.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/korona.png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;К октябрю 2009 года проект, получивший название WordPress, стал самой популярной open-source CMS в интернете, сегодня обеспечивающей работу более 810 миллионов веб-сайтов по всему миру.&lt;/p&gt;
&lt;p&gt;Практически любой — от New York Times до Нила Пателя — использует WordPress для создания блога, интернет-магазина, корпоративного сайта или портфолио. Система бесплатна, легка в использовании, оптимизирована для поисковых систем и изначально была открыта для любых модификаций. Точнее, была открыта до определенного момента.&lt;/p&gt;
&lt;h2&gt;Закулисье открытого проекта: конфликт с WP Engine&lt;/h2&gt;
&lt;p&gt;В сентябре 2024 года произошли драматические события. Муленвег публично раскритиковал хостинг-компанию WP Engine, назвав ее «раком» WordPress из-за минимального вклада в развитие открытого проекта и неправомерного использования бренда. В ответ WP Engine направила Муленвегу письмо с требованием прекратить подобные высказывания.&lt;/p&gt;
&lt;p&gt;Реакция Муленвега была молниеносной: он заблокировал WP Engine, в результате чего клиенты хостинг-провайдера лишились возможности обновлять свои веб-сайты. Спустя несколько недель Муленвег присвоил плагин ACF, созданный WP Engine, используя сомнительную юридическую формулировку о потенциальном риске для сообщества.&lt;/p&gt;
&lt;p&gt;Конфликт между Муленвегом и WP Engine продолжается и сейчас, постепенно перемещаясь в судебную плоскость. Это противостояние стало переломным моментом в мире открытого программного обеспечения — теперь будет период до и после этого конфликта.&lt;/p&gt;
&lt;p&gt;В open-source сообществе существует концепция «доброжелательного пожизненного диктатора» — разработчика, который распространяет свой код бесплатно, сохраняя эксклюзивные права и контроль, но действующего исключительно в интересах сообщества. До последнего времени эта модель работала безупречно.&lt;/p&gt;
&lt;p&gt;WordPress охватывает более 810 миллионов веб-сайтов, но существование всей этой экосистемы полностью зависит от одного человека — Мэтта Муленвега. Слишком много власти для одного человека? Без сомнения, да.&lt;/p&gt;
&lt;h2&gt;Империя Муленвега&lt;/h2&gt;
&lt;p&gt;Существует очевидный конфликт интересов. Несмотря на то, что WordPress распространяется бесплатно, Муленвег заработал на нем миллиарды долларов. Он владеет компанией Automattic, которой принадлежат WordPress.com и Pressable — два хостинг-провайдера для WordPress, популярный плагин Jetpack, WooCommerce и множество других проектов.&lt;/p&gt;
&lt;p&gt;Нападая на WP Engine, Муленвег фактически атакует прямого конкурента Automattic, компании, зарабатывающей полмиллиарда долларов ежегодно благодаря WordPress.&lt;/p&gt;
&lt;h2&gt;Сообщество&lt;/h2&gt;
&lt;p&gt;Никто не понимает мотивов Муленвега. Многие уважаемые представители open-source сообщества, включая Дэвида Хайнемейера Ханссона, призывали его к деэскалации конфликта и переговорам вместо стремления довести WP Engine до банкротства.&lt;/p&gt;
&lt;p&gt;В ответ Муленвег написал письмо, полное оскорблений, высмеивая Ханссона за его неспособность капитализировать собственные успешные open-source проекты.&lt;/p&gt;
&lt;p&gt;Что на самом деле движет Муленвегом? Он — владелец и CEO компании с годовым оборотом 500 миллионов долларов, создавший один из самых успешных веб-проектов. Действия последних трех месяцев заставляют многих задуматься о его истинных намерениях.&lt;/p&gt;
&lt;h2&gt;Open-source&lt;/h2&gt;
&lt;p&gt;Интернет изменился после того, как Муленвег отключил доступ WP Engine. Владельцы WordPress-блогов внезапно осознали, что их сайты им не принадлежат в той степени, в какой они думали — особенно если они использовали хостинг WP Engine.&lt;/p&gt;
&lt;p&gt;Это не только considerably подорвало репутацию WordPress, но и поставило под сомнение саму концепцию открытого программного обеспечения.&lt;/p&gt;
&lt;p&gt;Никто не знает, чем закончится этот конфликт, но ясно одно — репутация и имидж WordPress серьезно пострадали.&lt;/p&gt;
&lt;p&gt;Я не стану защищать WP Engine, но действия Муленвега представляются совершенно несоразмерными предполагаемым нарушениям.&lt;/p&gt;
&lt;p&gt;Моя версия — в ближайшее время мы увидим форк WordPress для тех, кто захочет дистанцироваться от Муленвега. Я не желаю этого, но такой сценарий кажется почти неизбежным.&lt;/p&gt;
&lt;p&gt;Возможно, самое печальное, что WordPress, несмотря на свой возраст и количество причастных к его развитию людей, является посредственным продуктом. Система медленная, содержит множество ошибок и бесполезна без плагинов. То же самое можно сказать и о других проектах Automattic.&lt;/p&gt;
&lt;p&gt;WooCommerce существует уже более тринадцати лет, но до сих пор не имеет базового набора полей для вариаций/характеристик товара, что является обязательным требованием для Google Shopping.&lt;/p&gt;
&lt;p&gt;Jetpack — по сути мошеннический плагин, который только замедляет работу сайта. Jetpack критикуется за агрессивную монетизацию, когда ранее бесплатные функции начинают предоставляться за плату.&lt;/p&gt;
&lt;p&gt;Муленвегу стоило бы сосредоточиться на улучшении собственного программного обеспечения вместо уничтожения работы других. Возможно вскоре миллионам людей придется искать новый дом для своих веб-сайтов.&lt;/p&gt;
&lt;p&gt;Иногда я буду делиться здесь текстами в моем вольном переводе — теми, которые мне было интересно читать и которыми хочется поделиться с вами. &lt;a href="https://auresnotes.medium.com/"&gt;Ссылка &lt;/a&gt;на канал автора оригинального текста.&lt;/p&gt;
</description>
</item>

<item>
<title>Айсберг надежд: как фреймворк обещает всё</title>
<guid isPermaLink="false">32</guid>
<link>https://alexeyit.ru/all/aysberg-nadezhd/</link>
<pubDate>Tue, 10 Dec 2024 08:23:18 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/aysberg-nadezhd/</comments>
<description>
&lt;p&gt;За последний год в общении с клиентами все чаще возникает один и тот же сценарий: приходит компания с проектом b2b или b2c портала, который неплохо ложиться поверх Битрикс Управление сайтом, но в процессе общения нас просят, а давайте посчитаем стоимость проекта на коробке БУС и на фреймворке.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/downloadedImage-1.png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;При попытке углубиться в детали как на горизонте появился фреймворк, собеседники обычно объясняют свой выбор стандартным образом: «Пообщались с вашими коллегами. Проект будет сложным и масштабным, а фреймворк — быстрее, универсальнее и легче кастомизируется. Нам рекомендовали.».&lt;/p&gt;
&lt;p&gt;Даже нельзя сказать, что клиента обманывают или вводят в заблуждение — вполне возможно, что он обратился к команде, которая всю жизнь пишет микросервисные решения на фреймворке. И в целом, это правда. Однако порой ему не раскрывают вторую часть: что будет после. Это, пожалуй, и есть главная проблема — недосказанность и отсутствие у клиента достаточной квалификации, чтобы задать правильные вопросы.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Почему все думают, что решение на фреймворке обязательно будет эффективнее, чем коробочное решение.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Стоит отметить, что разговор обычно происходит в плоскости бэкенда, причем неважно, идет ли речь о Django, Laravel или Ruby on Rails. Дальше диалог развивается по одному из двух сценариев: либо мы начинаем считать дополнительную смету.&lt;/p&gt;
&lt;p&gt;Альтернативное решение почти всегда в 1,5 — 2,5 раза дороже, параллельно пытаемся объяснить потенциальные подводные камни такого решения.&lt;/p&gt;
&lt;h2&gt;Framework vs cms&lt;/h2&gt;
&lt;p&gt;В нашей практике речь чаще всего идет о проектах в e-commerce, где функционал практически идентичен. Для несложных проектов — каталог, форма заявки, интеграция с CRM — фреймворк действительно может быть оптимальным выбором. Однако ситуация меняется, когда планируется расширение функционала, уже имеющегося в готовом решении: скидки, товары с характеристиками, интеграции с логистикой, 1С, платежными системами.&lt;br /&gt;
Здесь возникают принципиальные вопросы. Во-первых, весь этот функционал придется разрабатывать с нуля или почти с нуля. Во-вторых, и это самое важное — нет гарантии, что новый код будет написан оптимально и работать быстрее, чем в коробочном решении.&lt;/p&gt;
&lt;p&gt;Представьте типичный сценарий: вы запустили проект на фреймворке, который работает молниеносно. Но вот вам понадобился модуль скидок с развернутым функционалом — фильтры для отбора товаров, различные условия, корректное отображение и сложение скидок и т. д. И внезапно ваш быстрый каталог начинает буксовать при каждом обращении к этому модулю, заметно снижая общую производительность портала.&lt;/p&gt;
&lt;h2&gt;Подводные камни&lt;/h2&gt;
&lt;p&gt;Такая ситуация типична почти для всех компонентов системы. Поэтому при выборе между коробочным решением и фреймворком стоит помнить несколько ключевых моментов:&lt;br /&gt;
&lt;b&gt;Первое:&lt;/b&gt; всю административную панель и функционал придется разрабатывать с нуля. По сути, это еще один клиентский интерфейс, только для администратора.&lt;br /&gt;
&lt;b&gt;Второе:&lt;/b&gt; на фреймворках существенно сложнее работать с модулями. Плохо написанный модуль может работать медленнее и менее стабильно, чем аналогичный модуль в готовом решении.&lt;/p&gt;
&lt;p&gt;Наша формула выбора предельно проста: если текущий и планируемый функционал проекта на 70% укладывается в возможности коробочного решения и не требует кардинальной ломки его логики — используем готовое решение. Это особенно актуально для проектов с нестандартной логикой, например, маркетплейсов с разделением заказа по поставщикам.&lt;/p&gt;
&lt;p&gt;Если же требуемая логика существенно отличается от коробочной более чем на 30% — выбор очевиден: необходим индивидуальный подход с разработкой на фреймворке.&lt;/p&gt;
&lt;p&gt;В целом это правило релевантно, но только для вэба, но и в целом почти для любой системы когда речь идет о написании с нуля и доработкам чего то готово.&lt;/p&gt;
&lt;p&gt;В технологическом выборе нет универсальных решений. Каждый проект уникален, и оптимальный выбор — результат глубокого понимания текущих потребностей и стратегии развития.&lt;/p&gt;
</description>
</item>

<item>
<title>Резервное копирование: двести тысяч единиц уже готовы</title>
<guid isPermaLink="false">29</guid>
<link>https://alexeyit.ru/all/rezervnoe-kopirovanie/</link>
<pubDate>Mon, 02 Dec 2024 09:32:36 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/rezervnoe-kopirovanie/</comments>
<description>
&lt;p&gt;Хочу поговорить о теме бэкапов и резервного копирования проектов. Так сложилось, что я учился на специальности «Комплексная защита объектов информатизации». Сейчас эта специальности нет существует, точнее есть, но в несколько в ином виде.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/clone.png" width="1024" height="1024" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Двести тысяч единиц уже готовы, еще миллион на подходе&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Нам рассказывали о построении защиты: как возводить периметр безопасности, защищать локальные сети, разбирать особенности сетевого трафика, принципы организации DMZ и многое другое. На практике, как и многим, большинство полученных знаний не пригодились. Однако одна ключевая мысль плотно засела в голову — принцип резервирования.&lt;/p&gt;
&lt;p&gt;Резервируй всё: каналы, серверы, мощности, бэкапы — словом, всё, что может отказать и имеет значимость для бизнеса.&lt;/p&gt;
&lt;p&gt;В нынешнее время, когда атаки на инфраструктуру стали обыденностью, а DDoS-атаки присутствуют практически на каждом втором проекте, тема резервного копирования как никогда актуальна. Если у вас нет бэкапов — стоит заняться этим немедленно, а лучше вчера.&lt;/p&gt;
&lt;h2&gt;Много / мало?&lt;/h2&gt;
&lt;p&gt;Резервных копий много не бывает. Копии проектов, баз данных и информации необходимо хранить максимально разнесено. Причина проста: при взломе доступа к одному хранилищу у вас должны остаться альтернативные источники.&lt;/p&gt;
&lt;p&gt;Минимально-оптимальной схемой резервирования предполагает наличие нескольких мест хранения которые взаимно не связаны. Во-первых, это копия на около-боевом сервере для быстрого отката. Во-вторых, сторонний сервер для регулярной выгрузки копий. И в-третьих, дополнительное физическое хранилище — жесткий диск или флешка — для архивации наиболее критичных данных.&lt;/p&gt;
&lt;h2&gt;Целостность&lt;/h2&gt;
&lt;p&gt;Критически важно проверять целостность бэкапов. Периодически не проверяя их, вы рискуете обнаружить при критической необходимости, что копии повреждены, неполны или содержат фрагментарную информацию. Рекомендуется не реже одного раза в квартал полностью разворачивать проект из резервной копии, чтобы убедиться в её корректности.&lt;/p&gt;
&lt;p&gt;Составьте регламент на эту тему. Включите в него максимально подробное описание процесса развертывания системы с использованием одного из мест хранения бэкапов. Опишите все шаги настолько подробно, чтобы даже человек, не имеющий предыдущего опыта в этом вопросе, смог разобраться и успешно выполнить задачу.&lt;/p&gt;
&lt;h2&gt;Период хранения?&lt;/h2&gt;
&lt;p&gt;Желательно иметь ежедневные копии за последнюю неделю, копии за предыдущую неделю, отдельную копию за две недели до текущего момента, копию на начало текущего месяца и копию за 2х месячной давности. Это может показаться избыточным и выглядеть как напрасная трата ресурсов. Однако когда что-то случится — будет поздно. О безопасности редко кто всерьёз задумывается, пока не произойдёт что то критичное.&lt;/p&gt;
&lt;h2&gt;Все просто&lt;/h2&gt;
&lt;p&gt;Ключевые рекомендации предельно просты. Бэкапы абсолютно необходимы, и лучше иметь больше резервных копий, чем меньше. Крайне важно хранить копии в разных местах, чтобы при взломе или аварии было маловероятно, что пострадают все хранилища. Регулярно проверяйте целостность бэкапов и обеспечьте хранение копий за различные периоды времени.&lt;/p&gt;
&lt;p&gt;Помните: безопасность — это не расходы, а инвестиция в стабильность вашего бизнеса. Пренебрежение резервным копированием может обернуться катастрофическими последствиями, потерей критически важных данных и репутационными рисками.&lt;/p&gt;
</description>
</item>

<item>
<title>Как сделать авторизацию на сайте: Новая надежда</title>
<guid isPermaLink="false">28</guid>
<link>https://alexeyit.ru/all/kak-sdelat-avtorizaciyu/</link>
<pubDate>Fri, 29 Nov 2024 11:14:24 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/kak-sdelat-avtorizaciyu/</comments>
<description>
&lt;p&gt;Банальная задача, изженная вдоль и поперек где только можно — это авторизация на сайта. Тренд постоянно меняющийся и придумывают все новые и новые способы.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/email.png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Все чаще я стал замечать лаконичный, я бы даже сказал гениальный способ — это одноразовые пароли через email. Максимально удобно, относительно безопасно.&lt;/p&gt;
&lt;h2&gt;Терминологический экскурс: Аутентификация и авторизация&lt;/h2&gt;
&lt;p&gt;Начнем с терминологии. Есть два термина, которые часто подменяют друг друга: аутентификация и авторизация.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Аутентификация&lt;/b&gt; — это процесс проверки личности пользователя, который подтверждает, что он действительно тот, за кого себя выдает. Для этого используются различные методы: логин и пароль, одноразовые коды, биометрические данные или физические устройства. Цель аутентификации — убедиться, что доступ получает именно тот, кто имеет на это право.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Авторизация&lt;/b&gt; — это процесс определения прав и уровня доступа пользователя к ресурсам системы после успешной аутентификации. Она отвечает на вопрос «что пользователь может делать?» и позволяет управлять доступом к данным, функциям или файлам в зависимости от роли, настроек или других условий.&lt;/p&gt;
&lt;p&gt;Разница проста: аутентификация проверяет, кто вы, а авторизация определяет, что вам разрешено делать. Например, ввод логина и пароля подтверждает вашу личность (аутентификация), а доступ к определенным разделам сайта зависит от ваших прав (авторизация).&lt;/p&gt;
&lt;p&gt;Процесс входа на сайт обычно включает два этапа — &lt;b&gt;аутентификацию&lt;/b&gt; и &lt;b&gt;авторизацию&lt;/b&gt;, поэтому его правильно называть аутентификацией с авторизацией или просто процессом входа (login process)&lt;/p&gt;
&lt;p&gt;Понимание терминов «аутентификация» и «авторизация» критично для разработки современных информационных систем. Эти процессы напрямую влияют на безопасность и удобство использования сервисов.&lt;/p&gt;
&lt;p&gt;Технологии входа постоянно развиваются, отвечая на растущие потребности пользователей в быстром и защищенном доступе к информационным ресурсам. Каждый новый метод — это попытка сделать процесс входа максимально простым, но при этом максимально защищенным.&lt;/p&gt;
&lt;h2&gt;Эволюция входа: Исторический экскурс&lt;/h2&gt;
&lt;p&gt;В начале развития web было классическое сочетание логин и пароль — до сих пор прекрасно используется на многих проектах. Но возникла проблема: пользователи забывали свои логины, что уменьшало конверсию на вход.&lt;br /&gt;
Тогда к логинам прикрутили email. Забыл логин или пароль — не проблема, восстанови через почту. В целом нормально, но не так удобно. Кто-то пошел дальше и полностью отказался от логина, по сути сделав его равным email. Уже проще — свой email точно не забудешь.&lt;/p&gt;
&lt;p&gt;Стоит сделать ремарку: в какой-то момент в браузерах появились менеджеры паролей, которые запоминали данные за пользователя. Это безумно удобно, при условии синхронизации с разными устройствами пользователя.&lt;/p&gt;
&lt;h2&gt;Безопасность vs Удобство&lt;/h2&gt;
&lt;p&gt;Email и пароль — замечательный способ, но нельзя быть до конца уверенными, что действия из аккаунта действительно выполняет его владелец. Есть сферы, где это критично: банкинг, финансы, здоровье и другие области, чувствительные к безопасности данных.&lt;/p&gt;
&lt;p&gt;На фоне этого появлялись разнообразные способы двухфакторного входа с контрольным вопросом, звонком и т. д., но это совершенно другая история. Нужно искать далее.&lt;/p&gt;
&lt;p&gt;Процесс входа с парой логин/email и пароль накладывает на систему дополнительные требования: организация отдельной регистрации, процесс восстановления доступа с контрольными строками и прочее.&lt;/p&gt;
&lt;h2&gt;Альтернативные методы входа&lt;/h2&gt;
&lt;p&gt;Набирал популярность тренд аутентификации через SMS. Вводишь номер, приходит SMS, вводишь одноразовый пароль — и вошел. Без пыли, без постоянных паролей — очень удобно.&lt;/p&gt;
&lt;p&gt;Но есть проблема — это дорого. SMS стоит денег, провайдеры хотят денег. Чтобы быть уверенным, что SMS дойдет, нужно покупать подписку у каждого провайдера связи. Цена входа одного пользователя улетает в космос.&lt;/p&gt;
&lt;p&gt;Звонки казались еще дороже, но оказалось — нет. Вводишь номер, тебе поступает звонок, последние 4-6 цифр это  и есть пароль. Иногда робот диктует код, и нужно поднимать трубку. В целом нормально, но при звонке приходится быстро перепечатывать код, что не всегда удобно и очевидно что от тебя хотят.&lt;/p&gt;
&lt;p&gt;Сейчас спамеров все сильнее контролируют, поэтому SMS и звонки все реже проходят, создавая дополнительные барьеры для пользователя. Стоимость доставки и доходимость заставили искать новые методы. Стоимость конечно можно снижать за счет протягивая, сохранения жизнь сессиям пользователей, но это как подорожник при переломе ноги.&lt;/p&gt;
&lt;p&gt;Стоит отметить, используют комбинации методов. Одноразовый пароль через смс далее постоянный пароль и т. д.&lt;/p&gt;
&lt;h2&gt;Возвращение email: Новая надежда&lt;/h2&gt;
&lt;p&gt;Король вернулся. Email снова на коне. Организация максимально простая — одно окно ввода email, никакой регистрации, восстановления доступа не требуется. Если email нет — создаем в базе, если есть — высылаем пароль.&lt;br /&gt;
Шаблон email в этом случае примитивен, но имеет два варианта. Выслать контрольную строку с авторизацией или код для входа. Метод со ссылкой еще более простой, так как в интерфейсе нам нужно только окно ввода email и все.&lt;/p&gt;
&lt;p&gt;Лично мне безумно удобно пользоваться. Почта всегда под рукой на телефоне. Кто скажет иначе — я возражу, что сейчас невозможно почти пользоваться телефоном, не введя email и на Apple, и на Android.&lt;br /&gt;
Ты уже наверняка сталкивался с данным подходом, его например внедрила figma.&lt;/p&gt;
&lt;p&gt;Технический механизм email-авторизации гораздо сложнее, чем кажется на первый взгляд. Генерация одноразового токена включает в себя сложные криптографические алгоритмы, учитывающие множество параметров безопасности.&lt;/p&gt;
&lt;p&gt;Современные системы используют многоуровневую защиту: ограничение времени жизни токена, привязку к устройству и IP-адресу, механизмы защиты от повторных попыток входа. Это позволяет существенно снизить риски несанкционированного доступа.&lt;/p&gt;
&lt;p&gt;Выбор метода входа — это всегда компромисс между безопасностью и удобством. Чем проще процедура регистрации, тем выше вероятность, что пользователь завершит процесс и останется в системе.&lt;/p&gt;
&lt;p&gt;Каждое дополнительное действие при входе увеличивает риск того, что потенциальный пользователь откажется от использования сервиса. Современные разработчики стремятся минимизировать барьеры входа, создавая максимально простые и интуитивные механизмы авторизации.&lt;/p&gt;
&lt;h2&gt;Вход через социальные сети: Еще один вариант&lt;/h2&gt;
&lt;p&gt;Нельзя не упомянуть методы входа через сторонние приложения — Яндекс, VK, Тинькофф и другие. Но если смотреть правде в глаза, в глубине души нельзя быть уверенным, что один или несколько методов покроют всех пользователей. Найдется тот самый пользователь, у которого этого нет, а почта есть у всех. Наверное.&lt;/p&gt;
&lt;h2&gt;Популярность&lt;/h2&gt;
&lt;p&gt;По субъективному мнению, топ методов входа на сайт по популярности может выглядеть следующим образом&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Логин/email + пароль&lt;/strong&gt; — самый распространенный способ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Через социальные сети&lt;/strong&gt; — удобство и скорость делают этот метод популярным, особенно в B2C.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Одноразовый код по email&lt;/strong&gt; — активно используется в e-commerce и для временных доступов.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Через телефон (SMS)&lt;/strong&gt; — особенно популярен для подтверждения личности в банках и сервисах доставки.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Приложения-аутентификаторы&lt;/strong&gt; — становится стандартом для безопасной двухфакторной аутентификации.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Без паролей (passwordless)&lt;/strong&gt; — растет в популярности благодаря простоте использования.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;QR-коды&lt;/strong&gt; — часто встречаются в банковских приложениях и корпоративных системах.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Биометрия&lt;/strong&gt; — активно внедряется в мобильных приложениях и устройствах.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Авторизация через мессенджеры&lt;/strong&gt; — пока используется редко, но набирает популярность в некоторых нишах.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Сертификаты или токены&lt;/strong&gt; — востребованы в корпоративных и высокозащищенных системах.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В ближайшее время я ожидаю смещение акцентов в пользу методов без паролей (passwordless), которые предлагают упрощение процесса авторизации и высокую безопасность.&lt;/p&gt;
&lt;h2&gt;Сравнительная таблица&lt;/h2&gt;
&lt;p&gt;1 — минимальная оценка (сложно, неудобно, редко используется).&lt;br /&gt;
5 — максимальная оценка (очень удобно, легко внедрить, популярно).&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;p&gt;&lt;strong&gt;Метод&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;&lt;th&gt;&lt;p&gt;&lt;strong&gt;Удобство&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;&lt;th&gt;&lt;p&gt;&lt;strong&gt;Простота реализации&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;&lt;th&gt;&lt;p&gt;&lt;strong&gt;Безопасность&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;&lt;th&gt;&lt;p&gt;&lt;strong&gt;Популярность&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Логин/email + пароль&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Через телефон (звонок/SMS)&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Через социальные сети&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Одноразовый код по email&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;QR-код&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Биометрия&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;2&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Через мессенджеры&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;2&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Приложения-аутентификаторы&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Без паролей (passwordless)&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;4&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Сертификаты или токены&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;3&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;2&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;5&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;&lt;p&gt;2&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2&gt;Итого&lt;/h2&gt;
&lt;p&gt;Если у вас сервис связанный с b2b и даже b2c, рекомендую к внедрению. Мы уже начали внедрение для некоторых своих клиентов и в скором времени соберем данные о том насколько это метод эффективен.&lt;/p&gt;
&lt;p&gt;Технологии идентификации продолжают развиваться высокими темпами. Биометрические методы, блокчейн и квантовые технологии постепенно становятся реальными инструментами защиты информации.&lt;/p&gt;
&lt;p&gt;В ближайшие годы мы можем ожидать появления более совершенных систем аутентификации, которые будут использовать комплексные методы распознавания личности: анализ поведенческих характеристик, многофакторную проверку и интеллектуальные системы безопасности.&lt;/p&gt;
</description>
</item>

<item>
<title>Saas vs Self-Hosted: Что выбрать?</title>
<guid isPermaLink="false">12</guid>
<link>https://alexeyit.ru/all/saas-vs-self-hosted/</link>
<pubDate>Sun, 08 Sep 2024 16:40:46 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/saas-vs-self-hosted/</comments>
<description>
&lt;p&gt;Сегодня хочу поделиться с вами своими мыслями и опытом по вопросу выбора SaaS или self-hosted решения? Я прошел через этот выбор не раз и не два, и хочу рассказать вам, какие подводные камни встречаются на этом пути.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/kong.png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Сразу хочу заметить, что выбор очень сильно зависит от размеров компании, команд, стадии развития и других факторов. Если вы маленький стартап или небольшой бизнес, то SaaS вероятно будет лучшим выбором. А если вы крупная корпорация, то выбор по сути уже не стоит — вам, скорее всего, понадобится комбинация обоих подходов с уклоном в self-hosted решения.&lt;/p&gt;
&lt;p&gt;Но давайте разберемся подробнее, что к чему, ведь большинство из нас находится где-то посередине этого спектра.&lt;/p&gt;
&lt;p&gt;Для начала, давайте разберемся, о чем вообще речь. SaaS (Software as a Service) — это когда вы платите за подписку на готовое облачное решение. Вроде как удобно: заплатил — и пользуйся. Self-hosted, с другой стороны, это когда вы берете софт под свой контроль, устанавливаете его на свои сервера и сами им управляете. Звучит сложнее, но у этого подхода есть свои преимущества.&lt;/p&gt;
&lt;p&gt;У себя в компании мы взяли курс на self-hosted решения и стараемся отказываться от SaaS по мере возможностей, но, тем не менее, эти решения все еще занимают значительную часть используемого нами ПО. Почему так?&lt;/p&gt;
&lt;h2&gt;Преимущества SaaS, или почему это так соблазнительно&lt;/h2&gt;
&lt;h3&gt;Быстрый старт.&lt;/h3&gt;
&lt;p&gt;Помню, как мы внедряли нашу первую CRM. С SaaS-решением это заняло буквально пару дней. Нажал кнопку, пару настроек — и вуаля, система готова к работе. Никакой мороки с серверами, настройками и прочих нюансов.&lt;/p&gt;
&lt;h3&gt;Экономия на старте.&lt;/h3&gt;
&lt;p&gt;Когда ты только начинаешь бизнес, каждая копейка на счету. SaaS позволяет начать использовать крутые инструменты без огромных начальных вложений. Платишь помесячно — и порядок.&lt;/p&gt;
&lt;h3&gt;Масштабируемость&lt;/h3&gt;
&lt;p&gt;Растет бизнес — растут потребности. С SaaS это не проблема: нужно больше места или пользователей — просто меняешь тариф. Никаких головных болей с апгрейдом железа или покупкой новых лицензий.&lt;/p&gt;
&lt;h3&gt;Автоматические обновления&lt;/h3&gt;
&lt;p&gt;Честно говоря, я обожаю эту часть. Просыпаешься утром, а тут — бац! — новые фичи в твоем любимом сервисе. И ничего делать не нужно, все само.&lt;/p&gt;
&lt;h3&gt;Работа отовсюду&lt;/h3&gt;
&lt;p&gt;В нашей компании половина сотрудников работает удаленно. С SaaS это вообще не проблема — залогинился через браузер, и ты в деле, хоть с пляжа.&lt;/p&gt;
&lt;h3&gt;Поддержка 24/7&lt;/h3&gt;
&lt;p&gt;Когда у тебя нет собственного IT подразделения (а у многих малых бизнесов его нет), техподдержка SaaS-сервисов — это просто спасение.&lt;/p&gt;
&lt;p&gt;Но не все так радужно в мире SaaS. Есть и обратная сторона медали.&lt;/p&gt;
&lt;h2&gt;Недостатки SaaS, или почему мы начали смотреть в сторону self-hosted&lt;/h2&gt;
&lt;h3&gt;Ограниченная кастомизация&lt;/h3&gt;
&lt;p&gt;Бывало, сидишь и думаешь: «Вот бы в этом отчете кнопка была здесь, а это поле — вон там». Но нет, в SaaS ты пользуешься тем, что дают. Иногда это реально бесит.&lt;/p&gt;
&lt;h3&gt;Зависимость от интернета&lt;/h3&gt;
&lt;p&gt;Однажды у нас отключили интернет на полдня. Все, приехали — работа встала. С self-hosted такого бы не случилось.&lt;/p&gt;
&lt;h3&gt;Безопасность данных&lt;/h3&gt;
&lt;p&gt;Я параноик? Возможно. Но мысль о том, что все наши данные хранятся где-то «в облаке», иногда не дает мне спать спокойно.&lt;/p&gt;
&lt;h3&gt;Неожиданные ограничения&lt;/h3&gt;
&lt;p&gt;Помню, как мы уперлись в лимит хранилища на одном SaaS-сервисе. Чтобы его увеличить, пришлось переходить на тариф, который был нам вообще не нужен по функционалу. Деньги на ветер!&lt;/p&gt;
&lt;h3&gt;Сложности с миграцией&lt;/h3&gt;
&lt;p&gt;Решили мы как-то сменить одно SaaS-решение на другое. Боже, какой это был ад с переносом данных! Никогда больше.&lt;/p&gt;
&lt;h2&gt;Преимущества self-hosted, или почему мы все больше смотрим в эту сторону&lt;/h2&gt;
&lt;h3&gt;Полный контроль&lt;/h3&gt;
&lt;p&gt;Знаете, есть что-то успокаивающее в мысли, что все твои данные хранятся на твоем собственном сервере. Ты сам решаешь, как все настроить и защитить.&lt;/p&gt;
&lt;h3&gt;Кастомизация по полной&lt;/h3&gt;
&lt;p&gt;Хочешь добавить новую фичу? Вперед! С self-hosted решениями ты можешь подкрутить систему под себя как душе угодно.&lt;/p&gt;
&lt;h3&gt;Независимость&lt;/h3&gt;
&lt;p&gt;Никаких внезапных изменений в политике провайдера, никаких неожиданных повышений цен. Ты сам себе хозяин.&lt;/p&gt;
&lt;h3&gt;Потенциальная экономия в долгосрочной перспективе&lt;/h3&gt;
&lt;p&gt;Да, начальные затраты выше. Но если посчитать на длинной дистанции, часто выходит дешевле, особенно если у тебя много пользователей.&lt;/p&gt;
&lt;h2&gt;Но и у self-hosted есть свои минусы:&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Высокие начальные затраты Серверы, лицензии, настройка — все это стоит денег. И немалых.&lt;/li&gt;
&lt;li&gt;Нужны специалисты Без толкового айтишника тут никуда. А хорошие спецы стоят дорого.&lt;/li&gt;
&lt;li&gt;Ответственность за все Обновления, безопасность, бэкапы — все на твоих плечах. Иногда это реально выматывает.&lt;/li&gt;
&lt;li&gt;Сложности с масштабированием Нужно больше мощностей? Готовься к новым затратам и головной боли с настройкой.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Так что же выбрать?&lt;/h2&gt;
&lt;p&gt;Честно? Нет универсального ответа. В нашей компании мы используем микс из SaaS и self-hosted решений. Для каких-то задач удобнее и выгоднее SaaS, для других — self-hosted.&lt;/p&gt;
&lt;h2&gt;Вот несколько советов из моего опыта:&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Рассматривайте варианты. Есть масса бесплатных self-hoste решений, да возможно, они хуже saas, но их можно дорабатывать&lt;/li&gt;
&lt;li&gt;Интеграции. Перед внедрением, оцените насколько новый сервис интегрируем с текущими.&lt;/li&gt;
&lt;li&gt;Комьюнити. Бери решение где шире распространение, если возникнут сложности — вы сможете найти единомышленников.&lt;/li&gt;
&lt;li&gt;Стек и API. Смотрите свой стек или api должно быть открытым со всеми возможностями.&lt;/li&gt;
&lt;li&gt;Оцените свой бюджет. Если денег в обрез, начните с SaaS.&lt;/li&gt;
&lt;li&gt;Подумайте о безопасности. Работаете с чувствительными данными? Лучше self-hosted.&lt;/li&gt;
&lt;li&gt;Оцените свои технические возможности. Нет айтишников? SaaS будет проще.&lt;/li&gt;
&lt;li&gt;Подумайте о будущем. Планируете быстрый рост? SaaS легче масштабировать.&lt;/li&gt;
&lt;li&gt;Проанализируйте свои бизнес-процессы. Нужна глубокая кастомизация? Смотрите в сторону self-hosted.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В конце концов, главное — это то, насколько выбранное решение помогает вашему бизнесу. Не бойтесь экспериментировать и менять подход, если чувствуете, что текущий вариант не оптимален.&lt;/p&gt;
</description>
</item>

<item>
<title>Как работает капча с галочкой?</title>
<guid isPermaLink="false">6</guid>
<link>https://alexeyit.ru/all/kak-rabotaet-captcha-s-galochkoy/</link>
<pubDate>Sun, 25 Aug 2024 15:53:27 +0300</pubDate>
<author></author>
<comments>https://alexeyit.ru/all/kak-rabotaet-captcha-s-galochkoy/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://alexeyit.ru/pictures/downloadedImage.png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Почему роботы не могут просто нажать кнопку «Я не робот»?&lt;/h2&gt;
&lt;p&gt;Привет, друзья! Сегодня поговорим о том, с чем сталкивается каждый из нас в интернете — о загадочных галочках «Я не робот». Казалось бы, что может быть проще? Но не всё так очевидно, как кажется на первый взгляд. Давайте разберемся, почему эти маленькие квадратики так важны и как они на самом деле работают.&lt;/p&gt;
&lt;h2&gt;reCAPTCHA: эволюция защиты от ботов&lt;/h2&gt;
&lt;p&gt;Помните старые добрые времена, когда нас заставляли вводить искаженный текст, чтобы доказать, что мы не роботы? Эти головоломки назывались CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart). Звучит как название рок-группы, правда?&lt;/p&gt;
&lt;p&gt;Но времена меняются, и на смену этим мучительным тестам пришла reCAPTCHA — продвинутый потомок от Google. Суть та же — отличить человека от бота, но методы стали хитрее и, что важно, менее раздражающими для пользователей.&lt;/p&gt;
&lt;h2&gt;Почему роботы не могут просто нажать на галочку?&lt;/h2&gt;
&lt;p&gt;Спойлер: могут! Дело в том, что современные боты настолько продвинуты, что могут делать практически всё, что и человек в интернете. Они играют в Runescape, управляют целыми фермами аккаунтов в соцсетях и, да, могут нажимать на любые кнопки. Но есть нюанс...&lt;/p&gt;
&lt;h2&gt;Секрет в том, как мы нажимаем&lt;/h2&gt;
&lt;p&gt;Главная фишка reCAPTCHA не в том, что вы нажимаете, а в том, как вы это делаете. Вот несколько хитростей:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Скорость реакции: Боты слишком быстры и эффективны. Мы, люди, медлительны и непредсказуемы. Система ищет именно эту человеческую «неэффективность».&lt;/li&gt;
&lt;li&gt;Траектория движения мыши: У роботов она идеально прямая, у нас — как пьяный матрос на палубе в шторм. Каждое движение уникально и непредсказуемо.&lt;/li&gt;
&lt;li&gt;Паузы и колебания: Мы можем остановиться, почесать нос, отвлечься на кота. Боты так не делают (пока что). Эти маленькие перерывы — признак человечности.&lt;/li&gt;
&lt;li&gt;Использование тачпада: Если вы на ноутбуке, ваши шансы пройти тест взлетают до небес благодаря хаотичности движений. Тачпад — лучший друг reCAPTCHA!&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Визуальные головоломки: когда галочки недостаточно&lt;/h2&gt;
&lt;p&gt;Если система сомневается, вас могут попросить найти все светофоры на картинке или выбрать изображения с мотоциклами. И знаете что? Даже продвинутый ИИ иногда путается в этих заданиях!&lt;/p&gt;
&lt;p&gt;Cloudflare писали, даже самый продвинутый ИИ все еще испытывает трудности с выделением конкретных объектов из загроможденного или размытого изображения. А вот для нас, людей, это обычно не проблема. Так что когда вас просят отличить велосипеды от мопедов на размытых картинках, знайте — вы участвуете в тесте, который современный ИИ пока не может пройти.&lt;/p&gt;
&lt;h2&gt;Невидимая слежка: когда CAPTCHA становится шпионом&lt;/h2&gt;
&lt;p&gt;Некоторые сайты пошли еще дальше и используют «невидимую» CAPTCHA. Она анализирует ваше поведение в интернете, историю браузера и даже движения мыши. Немного жутковато, согласитесь?&lt;/p&gt;
&lt;p&gt;Google даже разработал систему reCAPTCHA Enterprise, которая оценивает вашу «человечность» по шкале. Прямо как серия «Чёрного зеркала», только в реальности! Эта система использует легкодоступную информацию, чтобы определить, человек вы или бот.&lt;/p&gt;
&lt;h2&gt;Плюсы и минусы невидимой CAPTCHA&lt;/h2&gt;
&lt;p&gt;С одной стороны, это удобно — не нужно постоянно доказывать, что ты не робот. С другой — возникают вопросы о приватности. Ведь система собирает довольно много данных о нашем поведении в сети.&lt;br /&gt;
Google утверждает, что это помогает сделать пользовательский опыт более гладким. Многих раздражают постоянно всплывающие CAPTCHA, которые прерывают работу. Эта система позволяет получить доступ к сайтам без утомительных тестов, одновременно защищая их от массовой активности ботов.&lt;/p&gt;
&lt;h2&gt;Что дальше?&lt;/h2&gt;
&lt;p&gt;Интересный факт: последние версии ChatGPT, говорят, уже могут проходить даже продвинутые тесты Тьюринга. Это значит, что грань между человеческим и искусственным интеллектом в онлайн-активности становится все более размытой.&lt;/p&gt;
&lt;p&gt;Похоже, скоро нам понадобится новая система, чтобы отличать людей от всё более «человечных» ботов. Возможно, будущие версии CAPTCHA будут еще более изощренными или, наоборот, перейдут на совершенно новый уровень, который мы пока не можем себе представить.&lt;/p&gt;
&lt;h2&gt;Итог&lt;/h2&gt;
&lt;p&gt;Так что в следующий раз, когда будете ставить галочку «Я не робот», помните: вас проверяют не на способность нажать на квадратик, а на вашу уникальную человеческую неэффективность и непредсказуемость. Разве это не прекрасно?&lt;/p&gt;
&lt;p&gt;Эти маленькие тесты — отражение постоянной гонки между разработчиками систем безопасности и создателями все более умных ботов. И мы, обычные пользователи, оказываемся прямо в центре этой технологической битвы, просто пытаясь зайти на любимый сайт.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;P.S. А вы знали, что название CAPTCHA — это на самом деле аббревиатура? Полностью оно расшифровывается как «Completely Automated Public Turing test to tell Computers and Humans Apart». Попробуйте сказать это три раза подряд быстро — отличный тест на человечность!&lt;/p&gt;
&lt;/blockquote&gt;
</description>
</item>


</channel>
</rss>