
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>ROXL&#39;s Blog - Random Online eXperiment Lab</title>
      <link>https://roxl.net/ru/blog</link>
      <description>Automating. Saving time. Making the world better.</description>
      <language>ru-ru</language>
      <managingEditor>therawlex@gmail.com (Artem Krivoshchekov)</managingEditor>
      <webMaster>therawlex@gmail.com (Artem Krivoshchekov)</webMaster>
      <lastBuildDate>Sat, 08 Aug 2026 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://roxl.net/ru/tegi/cactusplay-marketplace/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://roxl.net/ru/blog/backend/analytics-counters-should-not-live-in-theme-files</guid>
    <title>Счётчикам аналитики не место в файлах темы</title>
    <link>https://roxl.net/ru/blog/backend/analytics-counters-should-not-live-in-theme-files</link>
    <description>Сниппет трекинга, вставленный в шаблон, исчезает при следующем обновлении темы, соперничает со страницей за браузер и удваивает цифры, если его вставили дважды. У всех трёх проблем одно лечение.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>wordpress</category><category>php</category><category>javascript</category><category>analytics</category><category>performance</category><category>privacy</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/backend/delivery-as-a-consequence-of-payment</guid>
    <title>Пусть выдача будет следствием оплаты, а не задачей, которую кто-то выполняет</title>
    <link>https://roxl.net/ru/blog/backend/delivery-as-a-consequence-of-payment</link>
    <description>Ручная выдача цифровых товаров ограничена рабочими часами, а от повторной отправки её защищает только внимательность. Перенос выдачи на события заказа меняет гарантии системы, а API не даёт второму каналу превратиться во вторую реализацию.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>woocommerce</category><category>wordpress</category><category>php</category><category>automation</category><category>rest-api</category><category>e-commerce</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/backend/derived-queue-resumable-email-campaigns</guid>
    <title>Очередь надо выводить, а не хранить: возобновляемые рассылки</title>
    <link>https://roxl.net/ru/blog/backend/derived-queue-resumable-email-campaigns</link>
    <description>Массовая рассылка, упавшая на середине, либо запускается заново, и все получают письмо дважды, либо ведётся курсором, который устаревает. Есть третий вариант: вычислять, кому ещё нужно письмо, вместо того чтобы это записывать.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>wordpress</category><category>mysql</category><category>sql</category><category>cron</category><category>email</category><category>queues</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/backend/pricing-a-catalogue-against-an-upstream-store</guid>
    <title>Как назначать цены по чужому магазину, которым вы не управляете</title>
    <link>https://roxl.net/ru/blog/backend/pricing-a-catalogue-against-an-upstream-store</link>
    <description>При перепродаже ваши цены зависят от того, что делает с ценами кто-то другой. Запрос при загрузке страницы роняет магазин вместе с источником, ночная выгрузка устаревает. Середина - кэш, за которым стоит стратегия выбора цены.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>woocommerce</category><category>wordpress</category><category>php</category><category>caching</category><category>pricing</category><category>api</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/backend/support-widget-that-knows-who-it-is-talking-to</guid>
    <title>Виджет поддержки, который уже знает, с кем разговаривает</title>
    <link>https://roxl.net/ru/blog/backend/support-widget-that-knows-who-it-is-talking-to</link>
    <description>Сниппет чата, вставленный в шаблон темы, работает до обновления темы, до первой правки настроек и до момента, когда виджет начинает добавлять запрос к базе на каждой странице. Три небольших решения закрывают всё это.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>wordpress</category><category>woocommerce</category><category>php</category><category>caching</category><category>support</category><category>freescout</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/backend/taking-payment-through-someone-elses-gateway</guid>
    <title>Как принимать оплату через шлюз, оформленный на другой сайт</title>
    <link>https://roxl.net/ru/blog/backend/taking-payment-through-someone-elses-gateway</link>
    <description>Когда платёжный шлюз оформлен на другой сайт, покупатель уходит платить, а результат вам надо как-то узнать. Разбираем два способа, которыми такая интеграция обычно ломается: неаутентифицированный колбэк и две записи о заказе, расходящиеся со временем.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>woocommerce</category><category>wordpress</category><category>php</category><category>payments</category><category>hmac</category><category>webhooks</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/cybersecurity/social-login-duplicate-accounts-race-condition</guid>
    <title>Почему соцвход плодит дубли аккаунтов и как это чинит таблица-замок</title>
    <link>https://roxl.net/ru/blog/cybersecurity/social-login-duplicate-accounts-race-condition</link>
    <description>Колбэк OAuth может прийти дважды на один вход, и наивный обработчик создаст два аккаунта одному человеку. Разбираем, почему так происходит, почему проверка «есть ли такой пользователь» не помогает и почему помогает занятие кода авторизации.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>wordpress</category><category>oauth</category><category>openid</category><category>authentication</category><category>woocommerce</category><category>race-condition</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/cybersecurity/two-factor-codes-for-shared-accounts-woocommerce</guid>
    <title>Как отдавать магазину сменяемые коды 2FA и не разнести секрет по системе</title>
    <link>https://roxl.net/ru/blog/cybersecurity/two-factor-codes-for-shared-accounts-woocommerce</link>
    <description>Когда выдача заказа зависит от кода, который меняется каждые тридцать секунд, читать его с телефона не масштабируется. Как открыть текущие коды магазину и операторам, не размазывая TOTP-секрет по системе.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>woocommerce</category><category>wordpress</category><category>totp</category><category>two-factor</category><category>rest-api</category><category>security</category><category>cactusplay-marketplace</category>
  </item>

  <item>
    <guid>https://roxl.net/ru/blog/cybersecurity/wordpress-plugin-dependency-conflicts-php-scoper</guid>
    <title>Два плагина, одна библиотека, сломанный сайт: изоляция зависимостей на сборке</title>
    <link>https://roxl.net/ru/blog/cybersecurity/wordpress-plugin-dependency-conflicts-php-scoper</link>
    <description>Плагины WordPress везут собственные vendor-каталоги, а PHP загружает ту версию, которая зарегистрировалась первой. Почему из-за этого ломается соседний плагин и почему единственное работающее решение - переименование пространств имён на сборке.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <author>therawlex@gmail.com (Artem Krivoshchekov)</author>
    <category>wordpress</category><category>php</category><category>composer</category><category>php-scoper</category><category>captcha</category><category>plugin-development</category><category>cactusplay-marketplace</category>
  </item>

    </channel>
  </rss>
