<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>IT Blog — Андрей Салмин</title>
    <link>https://andrewsalmin.com/blog/index.html</link>
    <description>Интересные факты из аналитики, разработки, автоматизации и AI</description>
    <language>ru</language>
    <atom:link href="https://andrewsalmin.com/blog/feed.xml" rel="self" type="application/rss+xml" />

    <item>
      <title>Идемпотентность в автоматизации: почему повторный запрос не должен дублировать платёж</title>
      <link>https://andrewsalmin.com/blog/idempotency/index.html</link>
      <guid>https://andrewsalmin.com/blog/idempotency/index.html</guid>
      <pubDate>Tue, 01 Sep 2026 00:00:00 +0500</pubDate>
      <category>Автоматизация</category>
      <description>Сеть оборвалась после того, как сервер списал деньги, но до того, как ответ дошёл до клиента, — и retry рискует задвоить операцию. Разбираем идемпотентные HTTP-методы, идемпотентные ключи и UNIQUE-ограничение на примере Python и SQLite.</description>
    </item>

    <item>
      <title>Write skew: гонка, которую не ловит REPEATABLE READ</title>
      <link>https://andrewsalmin.com/blog/write-skew/index.html</link>
      <guid>https://andrewsalmin.com/blog/write-skew/index.html</guid>
      <pubDate>Thu, 27 Aug 2026 00:00:00 +0500</pubDate>
      <category>Базы данных</category>
      <description>Аномалия, которая проходит сквозь REPEATABLE READ и SNAPSHOT ISOLATION без единой ошибки, потому что транзакции пишут в разные строки. Разбираем на примере дежурных врачей, почему нужен настоящий SERIALIZABLE и как его обходят на практике.</description>
    </item>

    <item>
      <title>Транзакции в SQL: как перевод между счетами ломается без ACID</title>
      <link>https://andrewsalmin.com/blog/sql-transactions/index.html</link>
      <guid>https://andrewsalmin.com/blog/sql-transactions/index.html</guid>
      <pubDate>Thu, 20 Aug 2026 00:00:00 +0500</pubDate>
      <category>Базы данных</category>
      <description>Два UPDATE, которые должны выполниться вместе, но выполняются по отдельности — источник половины багов с «пропавшими» деньгами. Разбираем ACID на примере перевода денег, уровни изоляции и проблему потерянного обновления.</description>
    </item>

    <item>
      <title>Парадокс Симпсона: как общая статистика может говорить обратное</title>
      <link>https://andrewsalmin.com/blog/simpsons-paradox/index.html</link>
      <guid>https://andrewsalmin.com/blog/simpsons-paradox/index.html</guid>
      <pubDate>Fri, 14 Aug 2026 00:00:00 +0500</pubDate>
      <category>Аналитика</category>
      <description>Иногда общая статистика показывает, что один вариант хуже другого. Но если разделить данные на важные сегменты, вывод может полностью измениться. Это и есть парадокс Симпсона — одна из самых опасных ловушек при интерпретации данных.</description>
    </item>

    <item>
      <title>Как понять, что задачу можно распараллелить</title>
      <link>https://andrewsalmin.com/blog/parallel-vs-sequential/index.html</link>
      <guid>https://andrewsalmin.com/blog/parallel-vs-sequential/index.html</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 +0500</pubDate>
      <category>Разработка</category>
      <description>Не каждую медленную программу нужно запускать в нескольких потоках. Разбираем главный критерий распараллеливания, разницу между I/O- и CPU-задачами и пример с ThreadPoolExecutor.</description>
    </item>

    <item>
      <title>Почему корреляция не означает причинность</title>
      <link>https://andrewsalmin.com/blog/correlation-vs-causation/index.html</link>
      <guid>https://andrewsalmin.com/blog/correlation-vs-causation/index.html</guid>
      <pubDate>Fri, 31 Jul 2026 00:00:00 +0500</pubDate>
      <category>Аналитика</category>
      <description>Два показателя могут двигаться вместе и иметь почти идеальную статистическую связь. Но это ещё не означает, что один показатель вызывает другой. Разбираемся, как возникают ложные выводы и как проверять причинность.</description>
    </item>

    <item>
      <title>Почему среднее значение может врать: среднее, медиана и выбросы</title>
      <link>https://andrewsalmin.com/blog/mean-vs-median/index.html</link>
      <guid>https://andrewsalmin.com/blog/mean-vs-median/index.html</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 +0500</pubDate>
      <category>Аналитика</category>
      <description>Разбираем, почему среднее значение может искажать картину при выбросах, чем оно отличается от медианы и как с помощью Python и графиков выбрать подходящую метрику.</description>
    </item>

    <item>
      <title>Комбинаторика покера: почему фулл-хаус реже флеша, хотя интуиция обещает обратное</title>
      <link>https://andrewsalmin.com/blog/poker-probability/index.html</link>
      <guid>https://andrewsalmin.com/blog/poker-probability/index.html</guid>
      <pubDate>Thu, 16 Jul 2026 00:00:00 +0500</pubDate>
      <category>Вероятности</category>
      <description>Считаем вероятности всех покерных комбинаций честным перебором 2 598 960 рук на Python, сверяем порядок редкости с интуицией и проверяем, как оценка Monte Carlo сходится к точному значению.</description>
    </item>

    <item>
      <title>Статистика хоккея: почему аутсайдер побеждает фаворита чаще, чем в баскетболе</title>
      <link>https://andrewsalmin.com/blog/hockey-goals/index.html</link>
      <guid>https://andrewsalmin.com/blog/hockey-goals/index.html</guid>
      <pubDate>Thu, 09 Jul 2026 00:00:00 +0500</pubDate>
      <category>Вероятности</category>
      <description>Моделируем голы в хоккее и очки в баскетболе распределением Пуассона на Python и считаем, во сколько раз аутсайдер чаще побеждает фаворита при одинаковом относительном разрыве в классе команд — сначала в одном матче, потом в серии плей-офф.</description>
    </item>

  </channel>
</rss>
