<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>cgvictor</title><generator>teletype.in</generator><description><![CDATA[Про IT, управление, разработку и маркетинг. Важные моменты, которые я счел нужными записать, чтобы потом поделиться. Считайте это блокнотом.]]></description><image><url>https://img2.teletype.in/files/14/6d/146d366e-03fa-44fc-93ae-df805b6d7f45.png</url><title>cgvictor</title><link>https://cgvictor.ru/</link></image><link>https://cgvictor.ru/?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/cgvictor?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/cgvictor?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 29 Apr 2026 23:32:44 GMT</pubDate><lastBuildDate>Wed, 29 Apr 2026 23:32:44 GMT</lastBuildDate><item><guid isPermaLink="true">https://cgvictor.ru/phantom-needs</guid><link>https://cgvictor.ru/phantom-needs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/phantom-needs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Не надо «учить рынок жить»</title><pubDate>Mon, 20 Apr 2026 13:47:57 GMT</pubDate><category>Маркетинг</category><description><![CDATA[Рассказывать людям, как им надо жить — дорого и за свой счёт. Затрат много, толку мало. Стартаперские грабли, но не только.]]></description><content:encoded><![CDATA[
  <p id="rY9b">Рассказывать людям, как им надо жить — дорого и за свой счёт. Затрат много, толку мало. Стартаперские грабли, но не только.</p>
  <hr />
  <p id="07oS">Когда ты стильный модный молодежный — это чешет самолюбие. Ведь старые унылые методы для старпёров, чего они понимают в новомодных веяниях. Тем более, новизна позволяет почувствовать себя на переднем крае и даже выдумать себе «голубой океан», а остальные топчутся на месте и переворачивают старое сено лопатой. <em>Не то, что мы!</em></p>
  <p id="0kkV">Дальше обычно выясняется, что всякое новое и экспериментальное люди не очень любят. Особенно когда речь идёт про свои деньги. И свои риски.</p>
  <p id="f90u">Почему-то оказывается, что ведётся на новизну и прорывные пропозиции куцый 1% аудитории. А для того, чтобы из 1% стало минимум 5% — надо влить какую-то тонну бабла в собственный маркетинг, ну или подождать лет десять, пока само настоится. Ждать неохота, кушать хочется. </p>
  <p id="y5Uy">Когда/если дождешься, впереди планеты всей уже снова почему-то будешь не ты, поскольку есть ребята, у которых и ресурсов и возможностей (было) больше.</p>
  <hr />
  <p id="VhhY">В чем грабли: это <strong>попытка выдумать себе рынок</strong>. Его там на заданный момент — нет. <em>Поня-я-яатно, что в перспект-и-иве</em>, если всё сделать правильно, если звёзды сложится и ветер будет в нашу сторону, то <em>потенциально</em> вроде бы вот там вырисовывается какая-то ниша, спрос и даже клиент.</p>
  <p id="PUe1">Но пока его там нет. А есть 20-30 «если», написанных на бумажке в столбик. Ну да, шанс ненулевой, говоря математически. </p>
  <p id="3Yjv">Но денег там нет. И спроса нет. И потребности нет. И клиента нет. <br />Есть влажные фантазии.</p>
  <hr />
  <p id="zsF0">Поэтому я говорю (и буду говорить), что созданием себе рынка под прорывные инновации заниматься не нужно, и весьма вредно. Потому что дорого и рисково. Когда я говорю «дорого», это означает кратно дорого, на порядки дороже, чем если бы вы <s>вместо фантазирования</s> пошли в поля, и посмотрели какие у рынка существующие потребности, и как они решаются прямо сейчас. Где там, возможно, не хватает вас.</p>
  <p id="fLcK"><strong>Создание спроса там, где его нет и не было — это пиздецки дорогое развлечение.</strong></p>
  <p id="IDpW">Да, это возможно, если говорить формально. Если у вас многозначные маркетинговые бюджеты, запас терпения, и следом ожидание прибылей такое, которое перекроет с запасом сожженные камазы с баблом. Мы говорим о таком бюджетировании, которое способно перекроить отдельно взятую отрасль. Потому что не очень верится в ситуацию, когда существующая реальная отрасль безвыходно ничего не делает, сидит и <em>ждет, когда вы ее осчастливите</em> очередным горе-стартапом.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yKNW">За примерами далеко ходить не надо: похороненный Apple Vision, который на поверку оказался никому на практике не нужным — все эти вопросы и рабочие задачи давно и успешно решаются без него. Метавселенная Цукерберга, которая стоила миллиарды, и ориентировалась на придуманный (для инвесторов) спрос и потребность в ней. Обратите внимание, какие там были бюджеты.</p>
    <p id="Jsoo">Сгребем пошире: сотни и тысячи «аи-ассистентов», затраты на внедрение которых и сопутствующий процессный геморрой не перекрывают косты. Технические девайсы с «ориентацией на широкую аудиторию», которым не суждено было стать чем-то большим, чем игрушки для гиков. </p>
  </section>
  <p id="wZ2h">Ну и конечно, революционные сервисы онлайнового характера, куда влито NNNk инвесторских денег, чтобы получить аудиторию в тысячу early adopters и поиметь себе головняков. Появляются, исчезают, жизнь идёт.</p>
  <hr />
  <p id="5KZ3">Основных вопроса как минимум два. <br />И я рекомендую себе их периодически задавать</p>
  <ul id="R2iA">
    <li id="iv0j">как живые люди описанную проблему/задачу решают прямо сейчас?</li>
    <li id="ojL8">где именно сейчас, в связи с этой проблемой, живёт платежеспособный спрос?</li>
  </ul>
  <p id="0N7F">Чаще всего выясняется, практически, что (даже) если проблема/задача не выдуманная, она как-то решается имеющимися средствами или — важно — их комбинацией. Скорее всего, по массе, это всех устраивает: экономические системы стремятся к равновесию. Неидеальное решение, которое работает, всегда лучше инновационного которое никто не пробовал (и даже не видел).</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6er3">Оговорка про платежеспособность здесь также не случайно. Можно прийти к аудитории, сказать — «хотите мы все ваши проблемы счас решим?» и ответ будет «да». Чего ж нет, когда какие-то васяны предлагают. </p>
    <p id="qBJC">В то же самое время, постановка вопроса «хотите мы ваши проблемы решим за $1000/месяц» уже совсем не настолько радужная; васяны хотят денег, вдобавок еще какую-то суету навести и рисков принести с собой. Оно нам надо? Да вряд ли.</p>
  </section>
  <p id="wKGo">Пока нахаляву — ну сходите, рискните, дело ваше.</p>
  <hr />
  <p id="fMv7">Аналогично параллельно в маркетинге, выдумать себе целевую аудиторию в полтора землекопа, и туда увлеченно целиться — означает остаться без денег. Возможно, было бы прикольно ориентироваться <a href="https://cgvictor.ru/premium" target="_blank">на клиентов</a> которые насквозь прогрессивные, говорят с вами на одном языке, живут на тех площадках на которых вам удобно, и суммы меньше миллиона относят к ошибкам округления. </p>
  <p id="HqgW">Вот только у вас их нет. А там, где они есть — стопудово и без вас тесно.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="pzGj">Это означает, что если хочется денег — вы пойдете не туда, куда сами себе выдумали, а туда, где живет ваша аудитория. </p>
    <p id="3l8b">Старпёрская, инертная, непрогретая, занятая своими делами и как-то использующая свои старпёрские непрогрессивные штучки. И будете её в чем-то убеждать, причем будете убедительны. </p>
    <p id="JAzS">Иначе (альтернативно) можете сходить нахуй, с комфортом фантазий и с инновациями, но за свой счёт.</p>
  </section>
  <p id="LKeV">Проверочный маркер: если надо кому-то убедительно доказывать, какие вы крутые, нужные и инновационные — что-то идёт не так. Решение конкретной очевидной проблемы, и закрытие реальной потребности на вменяемых условиях, если никто никому в процессе не пиздит — это обычно shut up and take my money. Еще и в очередь выстроятся. Крутое решение — ну, продемонстрируй.</p>
  <p id="TScJ">Если же почему-то картина другая, убедитесь что вы не затираете фантазии в первую очередь самому себе, даже в порядке добросовестного заблуждения.<br />Это не страшно, просто дорого.</p>
  <hr />
  <p id="Svsv">Говоря о рецептах: тесты, тесты, <a href="https://cgvictor.ru/trust-nobody" target="_blank">тесты</a>. </p>
  <p id="x5p0">В стартаперской среде есть даже упражнение, <em>сначала</em> попробовать продать собственный продукт по описанию, оценки, предзаказы, а уже только <em>потом</em>, на основании полученной информации, что-то с этой нишей делать. Market first. Но это же не-инновационно, сталкивает с жесткой реальностью, да и жопа болит.</p>
  <p id="l85n">Интереснее играться и вливать бюджеты в никому (по факту) не пригодившиеся фантазии. Первые 40 лет детства самые сложные.</p>
  <p id="wCsa"><strong>Hope that helps</strong>.<br /></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/scrum-2026-update</guid><link>https://cgvictor.ru/scrum-2026-update?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/scrum-2026-update?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Обновление скрам-гайда</title><pubDate>Mon, 13 Apr 2026 13:09:06 GMT</pubDate><category>Разработка</category><description><![CDATA[Стало проще, и полезное добавилось. Для общего развития пригодится. Будете хотя бы понимать, где скрам, где не скрам.]]></description><content:encoded><![CDATA[
  <p id="DxE8">Стало проще, и полезное добавилось. Для общего развития пригодится. Будете хотя бы понимать, где скрам, где не скрам.</p>
  <p id="TJV7">Все еще не рекомендую брать скрам и прикручивать к себе «на изоленту», потому что SCRUM это цельная методология — в смысле неделимая, хотя и достаточно несложная. Добавлять — можно. Выкидывать части — нельзя, они несущие, их там и так немного.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7mVl">The Scrum framework is immutable. While implementing only parts of Scrum is possible, the result is not Scrum. </p>
    <p id="gxeG">Scrum exists only in its entirety and functions well as a container for other techniques, methodologies, and practices.</p>
  </section>
  <p id="CaAe">Думаю, с этим моментом разберётесь, я уже несколько раз подробно об этом писал.</p>
  <p id="4djV">Авторы <a href="https://scrumguides.org/scrum-guide.html" target="_blank">обновили гайд</a>. Давайте ближе к делу: что поменялось-то.<br />От наиболее значительного к остальному, на мой вкус.</p>
  <hr />
  <h3 id="EmWl">Цель продукта</h3>
  <p id="XLM5">Добавилось описание product goal. Предполагается, что итерации/спринты мы еще оцениваем по части того, насколько они приближают нас к цели. Соответственно, можно сравнить импакт, и постараться взять куски работы чутка полезнее. </p>
  <p id="JuQV">Позволяет, в теории, изменить приоритеты так, чтобы уйти от всяких пустопорожних фрикций и «работы ради работы». Никто не говорит, что работа ненужная, просто в выборе фокусировки берем наиболее значительное.</p>
  <h3 id="5ggW">Цели у каждого этапа</h3>
  <p id="1iM6">Они были, их просто нормально прописали. Теперь у продуктового беклога общая цель — это product goal, у беклога спринта — это sprint goal, у инкрементов/кусков работы это Definition of Done.</p>
  <p id="bHeh">Все три — это именно артефакты. Они должны быть описаны, их можно посмотреть, почитать и потрогать. Соответственно, ожидание практического выхода, и обязательства в этой связи — то есть, коммитменты — также существуют именно в такой привязке (к PG, SG и DoD). Нельзя и неполезно коммититься на какие-то абстракции и фантазии: замучаетесь мерить.</p>
  <h3 id="cOFQ">Планирование спринта</h3>
  <p id="di35">Кроме вопросов «что делаем?» и «как делаем?» добавился третий вопрос «нахера делаем?», в смысле Why. Не в метафизическом смысле, а чего конкретно нам это дает из Product Goal и почему хотим сейчас именно это.</p>
  <p id="DQhg">Why хорошая штука, которая позволяет нормально прописывать ADR (architecture decision records): что сделано, почему, как выбирали, и почему выбрали именно это.</p>
  <h3 id="8erU">Овнер и менеджер тоже часть команды разработки</h3>
  <p id="GOux">Раньше было логическое отделение: вот типа люди от планирования, руководство, овнер и менеджер/мастер — а вон у нас рукопахари. Теперь нет, они все у нас Dev Team, иногда даже со смежными ролями. Все в одной лодке, ответственности у них общие.</p>
  <p id="siwW">Есть еще малое замечание, что человек который вносит значительный вклад в разработку, обсуждения или планирование, прям на техническом уровне — тоже считается частью команды разработки <s>пофиг что он там себе сам считает</s>. И к нему можно применять те же процессы и механики, для единообразия.</p>
  <p id="FThv">Это раскрывает вопрос «совмещения ролей». Хотите — совмещайте. Лишь бы делалось в полном обьеме.</p>
  <p id="V4Oh">Овнер и с/мастер и все остальные т.к часть scrum team, «предельный» размер увеличен ST до 10 человек. Но это вообще пофиг, это ограничение всегда было рекомендательным и само-очевидным, много людей = больше бардак.</p>
  <h3 id="GPna">Сокращение обязательных частей</h3>
  <p id="tZxC">В основном перенесли устоявшиеся «жесткие» механики в часть рекомендательных. Например, протокол ежедневной планерки — да планируйте вы там как хотите, главное чтобы был ответ на вопрос «что у нас происходит» и «что мы собираемся сделать прямщас». </p>
  <p id="uU9c">Классическую скрам-планерку (что делал, что сделал, что буду делать, где затыки и кто мне нужен?) это не отменяет, но если вам удобнее по-другому, да кто бы спорил.</p>
  <h3 id="ZJXn">Само-управление вместо само-организации</h3>
  <p id="ORAJ">Убрали лишний формализм. Не важно, как команда организована и структурно выглядит, лишь бы она нормально управлялась и работа делалась. Также на откуп команде отдали вопрос, кто конкретно над чем работает — выберите сами, не кипятите голову.</p>
  <p id="XQkV">Это достаточно удобно, потому что прошлый скрам сильно пробуксовывал когда есть зависимости команд или проектные микро-команды, постоянные или ситуативные. Теперь просто формируйте как больше нравится.</p>
  <h3 id="JEtm">Убрали привязки к циклу разработки</h3>
  <p id="XHB0">Разделение на проектирование, тестирование, сбор требований, системный блок итп теперь опциональное. Видимо потому что не везде было это применимо и в общем смысле избыточно.</p>
  <hr />
  <h2 id="qprO">Основная цель</h2>
  <p id="xazk">Самое важное нововведение, единственное в своей весовой категории. Цель нужна для того, чтобы прикидывать и измерять её достижение. Вообще или в моменте. Остальные ее свойства именно сам скрам никак не затрагивает — например, оправданность, важность, ценность и так далее. </p>
  <p id="HMW2">С точки зрения скрама, цель поставлена и первична, а дальше вы танцуете предложенные итерации механики и методологии, чтобы как-то поживее и поэффективнее до этой цели дойти.</p>
  <p id="jLRh">Как соотносятся задачи в Product Backlog с основной целью — зона ответственности Product Owner.</p>
  <p id="tuxo">Product теперь прописан более конкретно. Как механизм (который вы строите), который приносит заявленную ценность. You need <a href="https://cgvictor.ru/build-an-engine" target="_blank">to build an engine</a>.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kkv5">A product is a vehicle to deliver value. It has a clear boundary, known stakeholders, well-defined users or customers. A product could be a service, a physical product, or something more abstract.</p>
  </section>
  <p id="xSDc">Из всего этого логически вытекает, что цель должна быть конкретной и измеримой. Конкретность определяется ценностью и набором изменений; а конкретнее по тексту, даже целевым состоянием: «a future state of the product which can serve as a target». Набор изменений от «сейчас» до «зашибись» собираются в product backlog.</p>
  <p id="ee3S">Измеримость интереснее. Нужны либо цифры, либо наборы критериев. И в общем-то если спросить меня, то я тоже горячо рекомендую именно этого придерживаться.</p>
  <ul id="Jebq">
    <li id="AQan">«захватить мир» — херовая цель, потому что вы нормально это не измерите (даже в моменте), а конкретики нет</li>
    <li id="p3kJ">«захватить мир к октябрю» — не сильно лучше</li>
    <li id="UYGL">«получить вот тут показатель лучше конкурента» — уже что-то. Потому что измеримо, хотя и относительно</li>
    <li id="qTIO">«получить вот тут рост показателя на X» — измеримость появляется, можно сравнивать одно с другим</li>
    <li id="9SS4">«сделать вот такие и вот такие фичи» — конкретно, но не измеримо (потому что сделать можно по-разному)</li>
    <li id="1SKF">«сделать фичи по списку и получить вот такую целевую метрику» — конкретно, измеримо, но не факт что одно будет связано с другим</li>
    <li id="5DYl">«сделать AA чтобы получилось XX (достигаем вот этого), сделать BB чтобы YY (будет вот так)» — еще получше, появились связи, их проще дебажить и оценивать</li>
    <li id="Vaef">«сделать в продукте вот этот список, чтобы по нему последовательно получить вот такие улучшения, чтобы общие метрики стали вот такими» — уже близко к рабочему варианту, нормас (есть гипотеза, есть план, есть показатели)</li>
  </ul>
  <p id="GkT1">Нигде не заявлено, что у вас не может быть несколько целей. Или что их нельзя менять в процессе. Методология гибкая, если вы в процессе понимаете, что надо менять планы — меняйте планы, тут вам не вотерфолл. </p>
  <p id="8BZ2">Ограничения — <strong>на одну итерацию цель должна быть зафиксирована</strong> (это раз), и <strong>продукт должен быть один</strong> (это два).</p>
  <p id="THk8">С несколькими продуктами скрам работает херово. Фокусировка микрокоманды разваливается. Этот момент был, и он не поменялся.</p>
  <p id="Is9I"><strong>Hope that helps</strong>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/flow-goldratt-chain-supply</guid><link>https://cgvictor.ru/flow-goldratt-chain-supply?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/flow-goldratt-chain-supply?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Технологические карты, оптимизация цепочек и немного Голдратта</title><pubDate>Tue, 07 Apr 2026 17:32:52 GMT</pubDate><category>Разработка</category><description><![CDATA[Недавно вспомнили про такую штуку аж в двух (несвязанных) местах. Надо набросать базы, она нам потом пригодится.]]></description><content:encoded><![CDATA[
  <p id="mFZE">Недавно вспомнили про такую штуку аж в двух (несвязанных) местах. Надо набросать базы, она нам потом пригодится.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="uTKF">Ситуации, когда вам нужна «прям вчистую» технологическая карта, как самостоятельное явление — не настолько обширные. Это все-таки явление из большого производства, и из мира физических производственных цепочек (где с ТК жить хорошо и комфортно). Но знать надо, и познакомиться нелишне.</p>
  </section>
  <ul id="7dr4">
    <li id="Bcx4">Во-первых, инструмент под задачу, мало ли где пригодится. Инструмент хороший, имеет свои плюсы.</li>
    <li id="crXG">Во-вторых, кое-где ситуативно использовать можно, даже в нашем богомерзком айти.</li>
  </ul>
  <hr />
  <h2 id="mado">Технологическая карта</h2>
  <p id="5PKb"><strong>Технологическая карта</strong>, в производственном смысле — документ, который описывает 1) отдельно взятый технологический процесс, а также 2) его ресурсные потребности и результаты.</p>
  <p id="P9SE">С точки зрения <strong>процесса</strong> (1) — это разновидность flow diagram или, для простоты, тупо <a href="https://cgvictor.ru/tactical-tools" target="_blank">инструкция</a>. Что у нас в процессе происходит, как именно это должно происходить, какие есть шаги, этапы и так далее. Зарубежная терминология так и оперирует общим термином process flow diagram, с дальнейшими уточнениями не особо парится.</p>
  <p id="pTY1">С точки зрения <strong>ресурсов</strong> (2) интереснее. Для ТК принято четко формализовывать, что у нас является потребностью (для выполнения процесса), в количественном и качественном смысле; и что мы на выходе получаем, когда наш процесс будет выполнен, по любому из описанных вариантов.</p>
  <p id="D16B">Наглядный пример, для вашего базового понимания — кулинарный рецепт приготовления <s>черничного пирога</s>.</p>
  <ul id="c535">
    <li id="qIKk">вот такие ингредиенты нам потребуется взять, по списку, с заданными характеристиками</li>
    <li id="0K8N">вот такие операции над ними провести, вот в таком порядке</li>
    <li id="h55K">вложить туда вот такое количество ресурсов (человеко-время, энергия)</li>
    <li id="1leo">применить вот такой инструментарий, по списку</li>
    <li id="fVvr">получить на выходе вот такой результат, вот в таком количестве</li>
  </ul>
  <p id="lAeM">Эта штука детерминирована, по модели черного или белого ящика. Именно в максимальной детерминированности лежат все ее последующие плюсы — потому что технология. Какой-то умный человек описал процесс вот так, мы ему верим (или проверяем), и описанный процесс по этому конкретному flow проходит именно вот так. Креативить не надо и даже вредно, <a href="https://cgvictor.ru/tech-control" target="_blank">технология вмешательств не любит</a>.</p>
  <hr />
  <p id="Ys2z">С точки зрения <strong>процесса</strong>, методика ТК (то есть flow) дает нам описание процесса. Основное полезное качество — <strong>повторяемость</strong>. Соедини вот так ресурсы и исполнителя, получишь выход вот таком обьеме. Запусти два описанных процесса в параллель, получишь вдвое больше. Измени кратно количественные показатели — и, если процесс допускает, получишь кратно увеличение выхода (но тут есть нюансики). Сам процесс описан, и фундаментально не изменится.</p>
  <p id="Gz29">С точки зрения <strong>ресурсов</strong>, методика ТК дает нам <strong>функцию</strong>. Как из одного получить другое. Взял 3 яйца, применил 20 минут человеко-времени и 1 нагретую сковороду, получил 200 граммов яичницы. С точки зрения процесса, мы имеем функцию <code>process([resources...])=&gt;result[]</code>. А это уже математический аппарат. С этим можно далее работать, оптимизировать, скейлить, строить цепочки и играть во всё остальное процессное лего.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="KwOY">Кому хочется попробовать на практике, незамедлительно отсылаю в любое физическое производство из реального мира (вошла свинья, вышли сосиски) или любой онлайновый аналог.</p>
    <p id="PVIB">Симуляторов производственных цепочек навалом — но аккуратно, Factorio может стоить вам месяца жизни.</p>
  </section>
  <p id="n5P3">В реальном мире сам по себе процесс не столь важен, и в основном очевиден (т.к инструкция). Красота появляется тогда, когда мы рассматриваем цепочки процессов. Выход одного является входом другого, и так до тех пор, пока мы в конце нашей <a href="https://cgvictor.ru/build-an-engine" target="_blank">производственной линии</a> получим требуемый нам результат.</p>
  <ul id="76JY">
    <li id="da8Y"><code>логистика(100 рублей денег, 1 час человека)</code> = 10 яиц из магаза</li>
    <li id="Cj9U"><code>кухня(3 яйца, 20 минут человека, оборудование)</code> = 200 гр яичницы</li>
    <li id="NhCw"><code>выдача(200 гр яичницы, 5 минут человека, чистая тарелка)</code> = 100 рублей в кассу</li>
    <li id="XrsF"><code>клининг(тарелка, 5 минут человека)</code> = чистая тарелка</li>
  </ul>
  <p id="8qSh">превращается количественными методами в производственную цепочку:</p>
  <ul id="9jx9">
    <li id="zPAY"><code>логистика (100р, 1:00)</code> + <code>(3*кухня (3я, 0:20))</code> + <code>(3*выдача (200гр, 0:05, 1т))</code> + <code>(3*клининг (1т, 0:05))</code> = <code>[300 рублей, 1 лишнее яйцо]</code></li>
  </ul>
  <p id="kahe">или, сворачиваем:</p>
  <ul id="pD1T">
    <li id="UgpF"><code>бизнес(100 рублей, (1:00+1:00+0:15+0:15 = 2:30 времени))</code> <br />= <code>[300 рублей, 1 лишнее яйцо]</code></li>
  </ul>
  <p id="SX16">Вот у нас получился <strong>механизм</strong>, который из денег и времени разных человеков делает чуть больше денег, и даже немножко запаса.</p>
  <p id="cYpV">Формально, мы могли бы расписать полную технологическую карту всей свёртки, но это не является обязательным. Нам нормально и с четырьмя отдельными, и с ними даже лучше, потому что гранулярность процессов (по отделным технологическим картам) позволяет к ним применить больше полезных штук. То есть — количественные методы.</p>
  <hr />
  <h2 id="tQ9k">Количественные методы</h2>
  <p id="Xzhv">Количественные методы нам позволяют нашу умозрительные (пока что) построения изучать, обкладывать всякими полезными штуками, и даже оптимизировать. <em>Без необходимости вживую гонять эксперименты</em> на живых процессах, чтобы мерить результат; это базовое положительное свойство работы с любыми <a href="https://cgvictor.ru/tactical-tools" target="_blank">моделями</a>, они нам жизнь упрощают.</p>
  <p id="G0bH">Что тут у нас: во-первых, ограничения по <strong>flow и цепочке</strong></p>
  <p id="xLsr">В упомянутом тупом примере вы не сможете поставить этап выдачи прежде этапа кухни (производства), потому что вам тупо нечего готового отдать. Но если у вас есть показатели запаса, выдача может работать самостоятельно пока запас не кончится.</p>
  <p id="nA5z">Во-вторых, количественный <strong>скейл</strong>, с его возможностями и выявляемыми ограничениями</p>
  <p id="7tSN">Этап логистики можно скейлить до какого-то предела, например за 1:00 час времени притащить не 1 коробку (10я) ресурса, а 10 коробок — за бОльшие деньги, но за тот же час. Тогда мультипликаторы (3*) дальше по цепочке теоретически можно увеличить тоже в 10 раз. А практически — исходя из располагаемого времени.</p>
  <p id="HKlf">Это важный момент: <em>упираемся мы всегда в меньший constraint</em>. Если у нас фура с ресурсами, а времени людей под процессы больше не стало — выход у вас все равно количественно упрётся в самое слабое звено, отдельной техкарты или функции по ней. Бутылочное горлышко.</p>
  <p id="2gSr">В-третьих, <strong>параллельность</strong> и возможности внутри получившегося flow (сложного, собранного нами из отдельных простых ТК)</p>
  <p id="c4FV">Может выдача работать в параллель с кухней, или с клинингом? Да, может, если вы можете распараллелить потребление ресурсов. Если у вас ровно одна бабушка Маша и на готовке, и на выдаче, и на мойке — то скорее всего нет. Если это разные люди — то да. А если людей меньше чем процессов, то мы можем поиграть во взаимозаменяемость: пока торговать нечем, кто-то бежит в магазин с выдачи, там все равно нечего делать.</p>
  <p id="FbcO">В-четвертых, <strong>циклы</strong>. Переиспользование ресурсов с выхода на вход дает вам <em>автономную систему</em>. Если есть, где брать всё необходимое.</p>
  <p id="Ggxr">Вот мы на выходе получили 300 рублей, а на входе было 100. Давайте мы из них возьмем еще 100 и запустим цепочку по кругу. Цепочка потребляет у нас 2:30 человеко-времени, значит за рабочий день 8 часов можно уложить ее 3 раза без параллельностей. Это даст нам при 3*100=300 рублей затрат итоговые 900 рублей в кассе. Если за оставшиеся 600 рублей у нас исполнитель (как ресурс времени) готов 1 день несложно поработать, значит наше <em>ресурсное планирование</em> вчерную сходится.</p>
  <p id="CwBU">Производственные <strong>ограничения</strong>, включая неявные</p>
  <p id="93JC">В варианте одного исполнителя всё линейно выполняется. Если я хочу параллелить кухню, то рано или поздно N человек в ней начнут друг другу мешать. Значит, нам надо исследовать и усложнять конкретную техкарту кухни, вводить туда наличие свободного оборудования. </p>
  <p id="4CQ9">Это новые constraints, в начальной задаче их не было, потому что нам было пофиг — а вот теперь появились.</p>
  <hr />
  <h2 id="xzP9">Голдратт и балансировка</h2>
  <p id="8m8T">Вот теперь пора добавить чутка мат.статистики. У нас для каждой техкарты и процесса есть два типа ресурса по определению:</p>
  <p id="cbbM">— показатели запаса, N единиц чего-то<br />— показатели потока, N единиц чего-то / на время</p>
  <p id="vkC5">Затраченное время человека — это тоже показатель потока, единица работы / на время. Вы не сможете взять 0:20 минут одним куском, их надо потратить. Но вы можете их <em>запасти</em> в готовом продукте. Запасенное время и прочие показатели потока чаще всего создают добавленную стоимость, органически — потому что время можно потратить и запасти, но <a href="https://cgvictor.ru/most-valued" target="_blank">нельзя купить</a> готовой кучкой.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="0JO2">Когда мы в институте путали П/З и П/П, святой человек Сергей П. фигачил нам по голове различными предметами.<br />Подход одобряю, он полезный.</p>
  </section>
  <p id="NSsy">Почему здесь Голдратт. Потому что основной практический смысл его «теории ограничений» сводится к тому, что вся конструкция и цепочка будет подчиняться тому единственному ограничению, которое определяет максимальную скорость потока (или расходования показателей потока, что одно и то же).</p>
  <p id="LvZI">Давайте я из цепочки чисто математически вытащу элемент «логистики» (З показатели запаса, П потока):</p>
  <p id="YvjL"><code>логистика(3, П) <br />= бизнес(З, П) — 3*кухня(З, П) — 3*выдача(3, П) — 3*клининг(П)</code></p>
  <p id="ubQ7">Но показатели потока, которые про время, нам придется сжечь в любом случае; время пройдет без нас. Значит, чтобы уравнение сошлось в ноль, «логистика» в левой части обязана точно так же нести всю разницу затрат потокового показателя. И то, что требуется для её процесса, и те побочные затраты, которые содержатся в «П» второй части уравнения.</p>
  <p id="iCya"><code>логистика (3, П + побочные_затраты)</code></p>
  <p id="hMEZ">Сколько их? Зависит от гомогенности показателя (чьё там было время в показателях потока). Если показатель гомогенный, то мы украли у соседних процессов ровно тот же 1:00 час, пока они простаивали и ждали нашу логистику. Если они запараллелены все, то одну логистику ждали аж три показателя, каждый по часу — мы впустую сожгли 3:00 часа рабочего времени людей.</p>
  <p id="Um0G">В правой части есть слагаемое «бизнес», т.к мы математически его перекинули; и да, бизнес как цепочка тоже стоял и ждал 1:00, мы потратили не 3:00, а 4:00. Сначала звучит немного нелогично, но вспомните про недополученную прибыль, которую за час вся цепочка могла бы принести. Прибыли нет, а время цепочки потрачено.</p>
  <p id="DnAS">Стоимость этого несчастного часа «логистики», когда все всех ждали, будет составлять (100 р ее затрат + 1:00 ее времени + 4:00 потерь) = 100р + (600/8*5) = 475 рублей. Это я еще время линейное посчитал, из прикидки выше. Неплохо так, еще ничего не сделали, пользы не принесли, а затрат = почти на весь день выручки.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="g7Tj">Несложно показать, что балансировка и нахождение максимума сложной функции сведется к полной утилизации каждого процесса по потоку, то есть по времени.</p>
    <p id="8sJa">Каждый компонент цепочки должен быть нагружен на 100%. <br />Больше — плохо, упираемся в ограничения. <br />Меньше — плохо, тратим время и кто-то кого-то ждет.</p>
  </section>
  <p id="45yZ">Для нормализации можно считать поток по времени, можно считать деньги/время, можно считать ресурс/юнит (о, <a href="https://cgvictor.ru/unit-economy" target="_blank">юнит-экономика</a> приехала). Неважно, в чем считаете, лишь бы единообразно и одинаково.</p>
  <p id="cM3h">Для балансировки цепочек по Голдратту есть три самых популярных направления: они есличо не самые оптимальные (обычно локальный оптимум), но самые наглядные.</p>
  <ul id="FIDw">
    <li id="bDSj">барабан (<strong>drum</strong>): согласно потреблению З и П в каждом процессе и каждой ТК, нормализуем выход по времени. Сколько нам нужно тратить всего, что нам требуется, в идеальной картине мира и полной загрузке. Поскольку время общее, нормализованное, мы можем посчитать поток и время в пересчете на любой его кусок — например, на час, или на день. Появляется оптимальный <em>ритм</em> работы цепочки и производства (поэтому «барабан»), в котором производительность максимальна. А дальше соотв пытаемся к нему прийти и устремиться.</li>
    <li id="Fd4e">буфер (<strong>buffer</strong>): для каждого процесса и каждой ТК у нас есть запас ресурса, который мы запасти <em>можем</em>. То есть, показатели запаса. Тогда затраты показателей потока, в первую очередь время, у нас ограничены только течением времени. Таким образом, в конкретном отдельном процессе будет совершаться работа, пока есть ресурсный запас. Это прикольная модель, потому что 1) мониторинг запаса дает значительную гибкость и 2) есть расширенные варианты, типа <em>цветного буфера</em>, когда можно размазать потребности по запасам по скорости расходования. Базовая оптимизация — достичь ресурсного оптимума запасов (с учетом их стоимости) по отношению к дельте времени отдельных процессов и/ли простоев.</li>
    <li id="MQak">веревка (<strong>rope</strong>): метод обратной оптимизации по выходу и затраченному (планируемому) времени: из примера выше, если мы хотим получить 1 готовое блюдо в час X, то нам надо начать чесаться за 2:30 раньше и обеспечить всё необходимое к (T-2:30) или ранее. Если хотим 900 рублей в кассе за день, то все необходимые ресурсы должны быть доступны/свободны на начало дня в нужном обьеме. Начиная с «логистики», поскольку требование по выходу «тянет» за собой последовательно все нужные ресурсы и результаты, и придёт в нее, как в стартовый процесс. Поэтому «веревка» (иногда «канат»), за который мы тянем.</li>
  </ul>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Pv8t">Важная оговорка: Голдратт вчистую работает только как умозрительная модель. Хотя и весьма полезная. </p>
    <p id="YDmy">Попытка впихнуть его «втупую» прямо в процессы, если у вас что-то сложнее яичницы, принесет вам изрядный ряд граблей — имейте совесть, концепции скоро 50 лет, современные практики ушли далеко вперед. И жизнь сложнее (см про VATI-процессы). </p>
    <p id="7TNB">Но чисто для формирования правильного понимания в голове — Голдратт весьма полезен.</p>
  </section>
  <hr />
  <h2 id="IOTs">Где подвох</h2>
  <p id="5f9A">Подвох в красивой и стройной модели «техкарты и цепочки» лежит там, где процессы и реальный мир в стройную картину не вписываются. Карта не_равна территории, теория не_равна практике. Что-то пошло не так, техкарта не выполнилась, цепочки не запараллелились, кто-то кого-то ждёт, всё встало раком и смотрит грустно.</p>
  <p id="y2hG">Больше всего стройную картину ломают <a href="https://cgvictor.ru/into-unknown" target="_blank">исследовательские задачи</a> и <a href="https://cgvictor.ru/unusual" target="_blank">непонятные вопросы</a>. Потому что они в техкарту не вписываются, инструкция не работает.<br />Как только объемы затрат любого ресурса где-то могут стать не-фиксированными и не-прогнозируемыми — вся ваша балансировка идёт лесом, циферки по факту не те.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="PzfI">Именно поэтому я практически везде (в текстах) призываю разделять классы задач: непонятное и исследовательское обязано жить отдельно и своей собственной жизнью. По другим правилам. Там уже не конвейер, там другие методы (и идеальных нет).</p>
  </section>
  <p id="JWSR">Но вместе с этим, как на любом большом производстве вы можете заметить, допустима ситуация когда конвеерно-цепочный подход — неоптимальный, но прогнозируемый и балансируемый — живет отдельно; а исследовательская и оптимизационная часть фигачит в параллель. Если формализовали какое-то решение — оцениваем и внедряем в конвейер. Если формализовать не смогли — окей, тупим и жжем ценные ресурсы, пока остальные тупые процессы разгребают буфер запасов (например). <a href="https://cgvictor.ru/process-green-yellow" target="_blank">Цветастая схемка</a> тоже примерно об этом.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="gYv1">Применительно к айти, конвейера и голдратта у вас почти никогда не будет. И про <a href="https://cgvictor.ru/why-not-kanban" target="_blank">чистый производственный канбан</a> можете сразу забыть. Потому что много где есть допущения, непонятки, и нетиповые фрагменты. </p>
    <p id="mhDj">Пока оно всё ни фига не детерминировано, то и оценки будут вида «хз и пол-батона», подход мутный, ситуативный и скейлится так себе. </p>
  </section>
  <p id="tkFD">Но. Вы можете вынести тупые понятные под-процессы в техкарты, и уже на их основании собирать сложные цепочки — которые где-то внутри кастомные и штучные, а где-то типовые и быстрые. Вот это как раз делается, и это удобно.</p>
  <p id="ZUe0">Например: у нас есть процесс разруливания херни. Он по определению исследовательский и нетиповой: сколько той херни бывает в жизни. Но мы вполне можем описать под-процесс <em>оценки херни</em>: потратить суммарный час времени <a href="https://cgvictor.ru/zakp" target="_blank">вот этих</a> ключевых специалистов, и на выходе получить документ, внутри impact map, оценка рисков и 2-3 плана обработки. Потратить еще час, и выбрать + расписать один из планов, которые берем в работу. </p>
  <p id="5yf9">Задачи оценки и выбора вполне укладываются в технологическую карту просто по определению: вот ресурсы, вот результаты.</p>
  <hr />
  <p id="yKjP">Еще из подхода с техкартами можно взять поиск и формализацию узких мест. Если у нас какие-то куски процессов, инструкций и техкарт <em>количественно</em> не вывозят — значит, именно туда мы пойдем <em>качественно</em> смотреть, анализировать и улучшать в первую очередь. Потому что это наша самая дорогая боль в терминах ресурсов, и мы ее вполне можем померить. </p>
  <p id="uYi2">Поймем как мерить, как улучшать, и как заинтегрить улучшенное — так и сделаем. Пока не сделали, работаем по старому, пофиг что неоптимально, spice must flow, механизм простаивать не имеет права. </p>
  <p id="tCkM">Пока нечего даже мерить, управление (и улучшение) будет идти по принципу «кто громче орёт», или вообще <a href="https://cgvictor.ru/better-evolution" target="_blank">тупым</a> перебором, а нам такое не надо.</p>
  <p id="D87m">Пока хватит. <strong>Hope that helps</strong>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/starter-pack-txg</guid><link>https://cgvictor.ru/starter-pack-txg?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/starter-pack-txg?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>За что хвататься первым? (TxG)</title><pubDate>Mon, 06 Apr 2026 14:27:49 GMT</pubDate><category>Рецепты</category><description><![CDATA[Вытаскиваю из живого ревью проекта. Какие три вопроса следует адресовать, и что конкретно получить, прям с самого начала анализа и погружения в разруливание бардака.]]></description><content:encoded><![CDATA[
  <p id="m7oM">Вытаскиваю из живого ревью проекта. Вот есть проект, проект живой в продакшне, в проекте абсолютно точно бардак.</p>
  <p id="3Vt3">Какие три вопроса следует адресовать, и что конкретно получить, прям с самого начала анализа и погружения в разруливание бардака.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Jusg">Подчеркну: мнение моё, не обязательно верное.</p>
  </section>
  <p id="V4It">Я не могу палить детали проекта (NDA, как обычно), это live чужой зарубежный проект, но могу поделиться подходом. Как бы я это делал, и почему так.</p>
  <hr />
  <h2 id="nBAW">Первое: команда</h2>
  <p id="0gVm">Любой проект и продукт, вообще что угодно в этом мире, делают <a href="https://cgvictor.ru/people-so-people" target="_blank">люди</a>. Вот с людей и начнем. Какие у нас есть роли, какая у людей специализация. Какие зоны ответственности и экспертиза. Какой опыт. Как они принимали решения, и как собираются это делать в моменте — то есть, как устроена логика принятия решений в их голове и в существующей ситуации.</p>
  <p id="wnOW">Есть ли у нас кто-то, кто принимал ключевые решения (какие? почему такие?), есть ли у нас вообще люди с экспертным знанием технического визионера «вот это мы будем делать вот так»? <em>Потому что именно их решения сделали всю конструкцию такой, какая она есть сейчас.</em> Это не хорошо и не плохо, пока что, потому что вот есть система — живая и работает, значит их технические решения и опыт вполне себя оправдали.</p>
  <p id="Ysm8">Лично мне потребуется для начала понять, с кем и как мы тут работаем. В то же время, с обратной стороны, <em>люди должны тоже привыкнуть к практике и мысли, что кто-то задает им вопросы</em> и — важно — искренне хочет их выслушать и услышать ответы. Правильных и «неправильных» ответов и вопросов на этом этапе не бывает (и об этом тоже надо людям донести).</p>
  <p id="v8Uy">Есть ли люди и команды, которым недостает экспертного знания, людей, возможностей? Каких, в какой связи и в какой сфере?</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="hk3J">Есть ли какие-то части системы, где «лучше не трогать» и <a href="https://cgvictor.ru/see-no-fear" target="_blank">швабра держит</a> потолок — иными словами, высокорисковые части, про которые знает команда (первый вопрос все еще про людей, а не про технику). </p>
    <p id="ZnBk">Какие-то слепленные части где на красных глазах (чьих) и бессонных ночах принимались какие-то ситуативные решения? </p>
    <p id="92U4">Как это всё <a href="https://cgvictor.ru/flow-control-feedback" target="_blank">проверяется</a>, кем и в каких случаях?</p>
  </section>
  <p id="8q3N">В какую часть системы (и команды) потребуется для начала заглянуть поглубже и найти понимание с людьми — <em>Саша М, привет!</em> — чтобы лучше понимать логику и контексты. Что от кого можно ожидать, а что, напротив, нам не светит?</p>
  <p id="BzBm"><strong>Что надо получить</strong>: ключевые акторы, зоны ответственности, важные и ключевые куски экспертизы. Записная книжка со списком, кто что знает и куда ходить (куда все ходят) в сложных случаях. </p>
  <p id="Wywx">Потому что нам туда придется ходить. Зачем додумывать недостающее, если (для начала) можно просто пойти и спросить.</p>
  <hr />
  <h2 id="Lt0v">Второе: структура системы</h2>
  <p id="hF0X">Если со старта заявлено, что у нас бардак — логично, что актуальной документации или вовсе нет, или она не актуальная ни разу, или она где-то живет какими-то кусками. <em>Если бы было всё просто и круто, меня бы не позвали</em>. </p>
  <p id="RjjD">Но все-таки: какие у нас есть хотя бы очевидные части большой системы? Из чего она состоит, как внутри себя взаимодействует, чем торчит наружу. </p>
  <p id="dPBs">Есть ли у нее различные варианты, окружения, рабочие площадки / развернутая инфраструктура, какая. Как эти части были спроектированы — даже если они отрастали «естественным путем», все равно у него была какая-то логика и потребность. Если есть неочевидные решения, какой за ними бекграунд и идея, как так получилось — обычно тут расскажут важное.</p>
  <p id="79VN">Как в системе передаются знания о ее частях и решениях? Любой ответ годится. Вслух, в чатах, в вики, в ADR. В исходном рабочем коде, наконец. Кто выступает источником знаний, кто потребителем — и в каких ситуациях.</p>
  <p id="wfjO">Операционная поддержка системы как организована, кем, и как выполняется? Есть ли процессы и инструменты относительно применения обновлений (выкатки изменений, деплоя), средства контроля на инфраструктуре? Чья она, кстати, в чьей зоне ответственности.</p>
  <p id="Hrkb">Как организовано управление изменениями. Как технические решения и рабочие артефакты становятся частью рабочего контура. Кем они оцениваются, проверяются на качество и на соответствие требованиям (есть ли review и какой). Какой вообще путь от абстрактной хотелки до конкретного живого финального изменения.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="AXG6">Если у нас «нет документации», это точно не катастрофа. Потому что вот, у тебя есть живая работающая система, максимально честный источник правды — потому что она живая и работает. А поскольку она работает, вот с нее и будем начинать.</p>
  </section>
  <p id="3cKn"><strong>Что надо получить</strong>: карта системы, или хотя бы «рисунок карты» (ц). Неидеальную, но уже стартовую модель взаимосвязей. С огрызками знаний и их источников, в тех местах где они есть. Чтобы потом дополнять недостающее и синхронизировать с реальностью (и прояснять мутные моменты, там-то всё важное и выяснится).</p>
  <hr />
  <h2 id="A31Y">Третье: метрики и наблюдаемость</h2>
  <p id="V8ZS">Как конкретно в любой момент мы узнаём (или должны узнать), что наша система работает нормально, и всё с ней хорошо?</p>
  <p id="ncA7">Есть ли у нас какие-то инструменты для общей оценки этого факта. Мониторинг, алертинг, метрики производительности. Куда это всё смотрит, на какие данные полагается. В каком объеме. Есть ли там бизнесовые измерения (количество пользы в минуту), или это чисто технический мониторинг.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6LZv">Для любого абстрактного изменения, как мы принимаем решение и как понимаем, стало нам жить лучше, или стало хуже? </p>
  </section>
  <p id="epsK">Кроме бизнесовых метрик, есть ли какие-то части системы которые должны остаться живыми и работоспособными вообще в любой умозрительной ситуации — ? Как мы это узнаём? Есть ли SLA и граничные значения, что мы себе позволить можем, что не можем.</p>
  <p id="4l7h">Как и в каких частях нашего зоопарка принимается решение о бизнес-приоритетах. Приоритет фич, приоритет стабильности, приоритет перфоманса, или (часто) какая-то мешанина из всего этого, с внутренней взвешенной балансировкой. Какой балансировкой, почему именно такой.</p>
  <p id="34Cv"><strong>Что надо получить</strong>: по-хорошему инструментарий для оценки работоспособности — когда/если <a href="https://cgvictor.ru/change-factor" target="_blank">пойдем ломать</a>, будем это делать не вслепую. В плохом случае ничего этого нет но, для старта, мы уже будем знать, «где конкретно этого нет» и значит надо прикрутить/сделать/заполучить. В совсем плохом варианте мы все равно получим список узких мест и бутылочных горлышек, которые ни фига не наблюдаемые, но объективно важны — потому что там болит. А это уже <a href="https://cgvictor.ru/better-evolution" target="_blank">весьма дофига</a> для старта.</p>
  <p id="54ie">Метрики, особенно бизнесовые, тесно связаны с бизнес-требованиями. Которые разумеется есть, и которые (также разумеется в бардаке) хрен где описаны. И это хорошая точка, чтобы начать их собирать в кучу, прописывать и нормально формулировать.</p>
  <hr />
  <p id="Y3wq"><strong>Hope that helps. </strong></p>
  <p id="6iRr">Если ребята разрешат, может еще что-то вводное-стартовое из их проекта вытащу, для наглядного примера.</p>
  <hr />
  <hr />
  <p id="mDzG">upd: TxG не общепринятая аббревиатура, это просто я себе так пометил статью чтобы потом по проекту найти.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/gdpr-2026-7</guid><link>https://cgvictor.ru/gdpr-2026-7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/gdpr-2026-7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Про GDPR, практика (7):  британский ICO и платная регистрация</title><pubDate>Mon, 30 Mar 2026 13:29:59 GMT</pubDate><category>Рецепты</category><description><![CDATA[Британский регулятор хочет денег. Если вы там есть, платить скорее всего придется. Вопрос за что, и сколько; давайте смотреть.]]></description><content:encoded><![CDATA[
  <p id="4a0D">Британский регулятор хочет денег. Если вы там есть, платить скорее всего придется. Вопрос за что, и сколько; давайте смотреть.</p>
  <hr />
  <p id="uh9e">Британский регулятор (ICO) который выступает как орган для GDPR UK, уже какое-то время назад (2019) ввел механизм регистрации. Реестр реестров, ага.<br />Там есть <strong>fee</strong>, в смысле деньги, которые надо этому самому ICO ежегодно заплатить.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Wquf">В 2026 вот с мест доносится, что начали народу приходить «письма счастья». О том, что надо бы регистрацию, и взносики будь добр занести в кассу. </p>
  </section>
  <p id="dXrh">— Размер взносиков от 5000 руб до 376 000 руб (от 52 до 3763 в фунтах), в год.<br />— Штрафы соизмеримые, до 400 000 руб (до 4000 в фунтах). Не запредельно, но все равно неприятно.</p>
  <p id="g29o">То есть, когда я <a href="https://cgvictor.ru/gdpr-2026-1" target="_blank">ранее писал</a> о том, что бегать и показываться европейскому регулятору <em>вроде как по своей инициативе не надо</em> — получается, для UK-юрисдикции это не так. <strong>Надо идти, регаться и платить денег.</strong></p>
  <hr />
  <h2 id="PYfk">Кого касается</h2>
  <p id="gxp1">Тех, кто зарегистрирован как компания в UK. </p>
  <p id="3fWr">Тех, кто просто в евросоюзе, вроде как (пока) не касается. Тех, у кого клиенты из UK при этом, вроде бы тоже не касается, но если вы работаете на UK-рынке, бизнесовый регулятор UK (не ICO) может убедительно попросить открыть представительство. </p>
  <p id="n6q7">И вот тогда будет касаться точно.</p>
  <h2 id="BKR8">Где описано</h2>
  <p id="eRIH">Нормальным языком вот тут <a href="https://ico.org.uk/for-organisations/data-protection-fee/faqs-data-protection-fee-payment-and-online-registration/" target="_blank">https://ico.org.uk/for-organisations/data-protection-fee/faqs-data-protection-fee-payment-and-online-registration/</a></p>
  <p id="Lyv0">Юридическим языком вот тут <a href="https://www.legislation.gov.uk/uksi/2018/480/contents/made" target="_blank">https://www.legislation.gov.uk/uksi/2018/480/contents/made</a> и вот тут (изначальный документ) <a href="https://www.legislation.gov.uk/uksi/2018/480/made/data.pdf" target="_blank">https://www.legislation.gov.uk/uksi/2018/480/made/data.pdf</a>. </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="4yf0">Within the first 21 days of each charge period a data controller must pay a charge to the Information Commissioner, determined in accordance with regulation 3</p>
  </section>
  <p id="PLjq">Ценник с 2019 года поменялся в сторону увеличения. </p>
  <h2 id="R2SW">За что платим</h2>
  <p id="DdTo">За то, чтобы регулятору было что кушать. Больше никаких содержательных плюшек оплата тарифа для заплатившего не несет.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="GBgS">It is the law to pay the fee, which funds the ICO’s work, but it also makes good business sense because whether or not you have paid could have an impact on your reputation.</p>
    <p id="8jX2">Being listed as a fee payer on the ICO’s website sends a strong message to all those seeking to do business with you: it shows that you are aware of your data protection obligations, and that you run a tight ship.</p>
    <p id="9vyT">If you need to pay and do not pay, you could be fined up to £4,000. Between May 2021 and January 2022, we issued 126 monetary penalties to organisations that have not paid the data protection fee.</p>
  </section>
  <p id="4LIP">Детский сад, короче. <br />С вас чисто хотят денег, потому что могут по закону.</p>
  <h2 id="kAyS">Кто должен платить</h2>
  <p id="GYRN">Если коротко — все, кто обрабатывает информацию о физиках (включая своих же клиентов) любым электронным образом.</p>
  <p id="3r4u">Подпадает даже тупо сбор и каталогизация. Отдельной строкой у них везде прописана видеозапись: даже если у вас на машине с развозкой стоит видеорегистратор — это уже CCTV и все вытекающие последствия.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="aMnY">Using information electronically means using any kind of device to handle information. This includes: surveillance equipment (recording or not recording); computers; smart phones; laptops; tablets; and cloud systems. It also covers things like digital cameras, emails, messaging apps, call logs, and systems that record or store audio and video.</p>
  </section>
  <p id="tPYI">Про видеозапись у них какой-то больной вопрос, подробнее тут <a href="https://ico.org.uk/for-organisations/advice-for-small-organisations/cctv-and-dashcams/dashcams-and-uk-gdpr-what-small-businesses-need-to-know/" target="_blank">https://ico.org.uk/for-organisations/advice-for-small-organisations/cctv-and-dashcams/dashcams-and-uk-gdpr-what-small-businesses-need-to-know/</a></p>
  <h2 id="NFje">Сколько платим</h2>
  <p id="70CL">На вебсайтике можно протыкать опрос <a href="https://ico.org.uk/for-organisations/data-protection-fee/data-protection-fee-self-assessment/" target="_blank">https://ico.org.uk/for-organisations/data-protection-fee/data-protection-fee-self-assessment/</a></p>
  <ul id="9qEa">
    <li id="iN7l">Всякая мелкота обычно попадает в категорию за 52…78 фунтов (<strong>tier 1</strong>). Мелкота это если у вас оборот за год меньше 632000 фунтов или меньше 10 сотрудников. Для всяких представительств и локальных branches вроде бы нормально, вряд ли у вас вся контора зарегана в UK-юрисдикции (а если да, то зачем?)</li>
    <li id="Jvph">Если условия выше не выполняются, хоть одно, тогда <strong>tier 2</strong> и точно не менее 78 фунтов, но есть мелким шрифтом условия по характеру данных и их обработки. Для всякой медицины, юридической практики, кредитного скоринга и финансовых организаций — будет больше. Общие условия для tier 2 — до 36 млн фунтов годового оборота и до 250 сотрудников</li>
    <li id="bgRR">Все кто крупнее и в это не попал — <strong>tier 3</strong>, 3763 фунта в год.</li>
  </ul>
  <p id="i6Qq">Юридические и финансовые услуги (которые tier 2) где-то там прописаны. Коротко, legal or financial services = accountancy and auditing, consultancy, credit referencing, debt administration, insurance, or mortgage broking.</p>
  <p id="2CVF">Если несколько офисов и представительств: считается по тому, кто там из них data controller (то есть принимает решения об обработке данных), и сколько их. Обьединять несколько в один платеж, если они части одной конторы — точно можно. Разделять на несколько мелких, чтобы заплатить с каждого минималку — сложнее, но иногда тоже можно, надо им писать и показывать какие-то документы, которые определяют взаимодействие мелко-контор. Сам не подскажу, не пробовал.</p>
  <p id="QE79">Если вы зачем-то <strong>public authority</strong>, то тоже правила другие. Это про госконторы, организации здравоохранения, полицию и армию, различные советы и организации, регуляторка, общественный транспорт, fire and rescue, образовательные организации (включая частные). Скорее всего это не про вас, если что, юристы должны быть в курсе.</p>
  <p id="eHoH"><strong>Штрафы</strong>: если вы (по мнению регулятора) должны были платить, и за 12 месяцев не почесались, то надо будет И оплатить горчичник, И сам тариф. Насколько я могу видеть, размер штрафа регулятор выставляет соизмеримый платежу по предполагаемому tier. </p>
  <p id="H4M2">То есть если коротко, за просранные обязательства (за истекший год) надо будет заплатить в двойном размере — сам тариф + похожий на него штраф. Но заранее не узнаешь.</p>
  <p id="q946">Перед штрафом вам шлют Notice of Intent, и на реакцию дается 2 недели.</p>
  <h2 id="OSkW">Кому можно не платить</h2>
  <p id="BbUg">Есть список исключений. Но обычная нормальная коммерческая компания туда ни фига не попадает, даже если там один человек и продажа спичек через интернет. Хотя для таких fee будет минимальный (52 фунта = 5000 руб), регистрироваться и платить все равно придется.</p>
  <p id="an6Z">Если у вас некоммерческая организация (то есть, конкретно <strong>nonprofit</strong> по устанавливающим документам), то список правил такой:</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="HThp">— only process information necessary to establish or maintain membership or support<br />— only process information necessary to provide or administer activities for people who are members of the organisation or have regular contact with it;<br />— you only hold information about individuals whose data you need to process for this exempt purpose<br />— the personal data you process is restricted to personal information that is necessary for this exempt purpose.</p>
  </section>
  <p id="NEii">Безопасность и внутренние нужды сюда не входят (включая fraud prevention), а также сбор инфы с потенциально расширяемыми целями. Регулятор отдельно указывает, что даже видеокамера наблюдения сюда уже не подпадает. Мне кажется, это список для «чисто бумажных» нонпрофитов, которые даже реально не существуют физически в UK, а просто используют регистрационный адрес (они по закону обязаны).</p>
  <p id="O7aK">Оговорка про благотворительность тоже есть, специфика соединенного королевства, но надо быть в <strong>charity</strong>-реестрах.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="DpyB">A «charity» in England, Wales and Northern Ireland is an institution set up for charitable purposes only. In Scotland, it means a body entered in the Scottish Charity Register. This includes some schools such as multi academy trusts (MATs). </p>
    <p id="3z2c">For a full description of what qualifies as an exempt charity, see Section 1 of the Charities Act 2011 (a) or the Charities Act (Northern Ireland) 2008 (b).</p>
  </section>
  <h2 id="1KK6">Разводы и скам</h2>
  <p id="IJSr">Разумеется, у них в UK уже тоже отросли мамкины разводилы, которые пишут агрессивный скам на почту компаниям, и требуют чего-то оплатить, иначе атата и все земные кары.</p>
  <p id="aMaJ">Все письма, которые нормальные настоящие, должны исходить от <code>ico.org.uk</code>. Вся оплата — тоже, только на их вебсайте <a href="https://ico.org.uk/for-organisations/data-protection-fee/register/" target="_blank">https://ico.org.uk/for-organisations/data-protection-fee/register/</a></p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Nvju">There are some private companies who offer to complete the data protection fee payment on behalf of your organisation, often charging more than the standard cost. </p>
    <p id="95V5">Be aware that these agencies have no official standing or powers under data protection law, and there is no connection between them and the ICO — we recommend you pay the ICO directly.</p>
  </section>
  <p id="Jomd">Так что если вам пришли другие, левые васяны и чего-то хотят — скорее всего это говнопрокладка, которая хочет впарить вам свои «юридические сервисы» и тупо развести на бабло.</p>
  <h2 id="45v4">Что еще</h2>
  <p id="iaxQ">Из их гайдов следует, что если регулятор за вас схватился, вне зависимости от оплат-положений-оценок, вас еще и прогонят на общую оценку соответствия GDPR compliance. Наличие data policy, контактов, всех необходимых правил и так далее. </p>
  <p id="JATy">Лишний повод убедиться, что у вас там всё хорошо — или они хотя бы существуют. Ну, об этом фестивале я как раз в прошлых статьях писал.</p>
  <p id="44vU"><strong>Hope that helps</strong>.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="tF4N">Целиком</p>
    <p id="BXFc"><strong>— </strong><a href="https://cgvictor.ru/gdpr-2026-1" target="_blank">Про GDPR, практика (1): закон, регулятор, data policy</a></p>
    <p id="bq8y">— <a href="https://cgvictor.ru/gdpr-2026-2" target="_blank">Про GDPR, практика (2): консенты, запросы от дкома, identity check</a></p>
    <p id="U7xb">— <a href="https://cgvictor.ru/gdpr-2026-3" target="_blank">Про GDPR, практика (3): удаление данных, деперс, контент</a></p>
    <p id="bDaW">— <a href="https://cgvictor.ru/gdpr-2026-4" target="_blank">Про GDPR, практика (4): получение данных, изменение, гайдлайны</a></p>
    <p id="YjCn">— <a href="https://cgvictor.ru/gdpr-2026-5" target="_blank">Про GDPR, практика (5): реклама, куки, tag managers</a></p>
    <p id="9g6Q">— <a href="https://cgvictor.ru/gdpr-2026-6" target="_blank">Про GDPR, практика (6): байдизайны, DPIA, статистика и полезное</a></p>
    <p id="NK1p">— <a href="https://cgvictor.ru/gdpr-2026-7" target="_blank"><strong>Про GDPR, практика (7): британский ICO и платная регистрация</strong></a></p>
  </section>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/les-partyconf-retrospective</guid><link>https://cgvictor.ru/les-partyconf-retrospective?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/les-partyconf-retrospective?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>История Рунета: партизанские конференции, Лес, partyconf</title><pubDate>Wed, 18 Mar 2026 12:32:11 GMT</pubDate><category>Байки</category><description><![CDATA[История о том, как пара десятков людей в 2006-2009 собрались и зажгли. Сделали интернет и образование таким, которое вы знаете сейчас.]]></description><content:encoded><![CDATA[
  <p id="tsBv">История о том, как пара десятков людей в 2006-2009 собрались и зажгли. Сделали интернет и образование таким, которое вы знаете сейчас.</p>
  <hr />
  <p id="sKbd">Интернет умеет забывать. Движуха на несколько лет, в которой поучаствовали сотни людей, и которую знала (без преувеличения) половина Рунета, оптимистически канула в лету. Давайте соберу в кучу концепцию и вводные, чтобы хоть поисковики что-то находили. И почитать, конечно. Седая древность, лучи Си у врат Тангейзера, слёзы под дождем.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="JNVb">Ретроспективный обзор пойдет по остаткам <em>открытых </em>источников. Что-то узкоспециальное доставать не буду; непонятно, что делать с авторством и прайваси — потому что фотки хоть и открытые, но народ разрешения на репосты вроде как не давал. Как и на рабочие материалы. </p>
    <p id="gREs">Если копать глубоко, то материала хоть и по кускам, но в количестве: полноценно доставать и агрегировать архивы из ЖЖ, обоих фидиков, из вики и тулов — получается развесистое такое исследование. Полезно, но не сейчас.</p>
  </section>
  <h2 id="pJ1D">О чем это всё</h2>
  <p id="jHD6">Партизанские конференции и Лес. Интересный социальный (в основном, образовательный) проект инициативной группы, который вырос вокруг отраслевых конференций Рунета. И вокруг сообщества людей, которые так или иначе на тех конференциях (и в онлайне), естественно, пересекались. Основная цель — прикнести в тусовочку больше движухи; найти, выработать и проработать новые, перспективные форматы взаимодействий; притащить разнообразные игровые и проектные механики; побороться с тупняком и just for fun, конечно.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="aFLg">Мы говорим о периоде 2005…2015, а конкретно 2007-2009 в разрезе активной «лесной движухи». Это почти 20 лет назад, у некоторых там вон внуки уже. Делайте на это скидку. </p>
    <p id="JQdR">Многие из идей и концепций «того» времени успешно возродились и в 2015+, и в 2020 (например, западными движухами). А тогда все были молоды, верили в себя, прикольные штуки открывали и пробовали на зуб как в первый раз.</p>
  </section>
  <p id="r96L">Почему партизанские. Потому что это <strong>«формат в формате», когда на уже существующей площадке запускается внутренняя движуха</strong>, которая играет по своим правилам, запускает внутренние активности (и даже мета-активности, «активности про активности»), вводит параллельный основной конференции слой игры и обмена мнениями. </p>
  <figure id="Q25k" class="m_column">
    <img src="https://img1.teletype.in/files/c9/dd/c9dd9bbb-1190-4cca-89cb-79a421f83f4a.png" width="998" />
    <figcaption>Фоточка от Тио. Где найти лого Леса так, чтобы оно размещалось не на чьих-то си...? а, вот, на спине есть.</figcaption>
  </figure>
  <p id="8CVO">Что немаловажно, «партизанская конференция» <strong>живет как структура между разными конференциями и календарными событиями</strong>, координируясь в сети. Пересекается между собой, соответственно, на всех событиях, которые происходят в отрасли. Используя инфраструктуру и событийную сетку отраслевых конференций как собственную «жизненную среду» и экосистему, взамен обогащая происходящее собственным слоем смысла, и привнесенным содержанием. Дополнительный «горизонтальный» слой смыслов и взаимодействий. Ко всеобщему благу.</p>
  <h2 id="LBEE">Форматы</h2>
  <blockquote id="sboy">Группа, которая стала заниматься организацией партизанских конференций и мероприятий, где люди общаются с большим смыслом, чем предлагают обычные конференции. Для этого участники «Леса» придумывают новые формы обучения и групповой работы</blockquote>
  <p id="nGkA">Формат «междусобойчика и саморефлексии» для встреч и конференций — не новый. По сути, именно это происходит на любом большом мероприятии в рамках афтерпати, итоговых пьянок; внутри организаторской/мастерской группы, а также в сети. Где формируется отдельный слой обсуждений, мнений, рефлексии и длинный хвост выводов, последствий и смыслов. </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="dZw9">Если конференция — это обсуждение и диалог, то «обсуждение обсуждений» это уже мета-диалог. Рефлексия и вопросы «а чо это мы тут делаем, что мы куда несём, и как мы это делаем» — это уже мета-нарратив, нарратив о нарративе. Отсылок к мете вообще будет много, meta is so meta.</p>
  </section>
  <p id="2Mw4">Самый простой и понятный вариант, когда обмен мнениями и смыслами встроен в сам формат в тех же процессах — это <strong>баркемп</strong> (или барконф), т.н «барная конференция». Любой участник имеет право на вклад и мнение, обсуждения происходящего происходят тут же, программа и активности возникают в процессе, композиция происходящего происходит прямо на лету. </p>
  <p id="AdpY">Посетители перестают быть пассивными участниками в зрительском зале, хочешь — взаимодействуй, есть мнение — обсуждай, есть что сказать — скажи, есть вопрос на обсуждение — задавай, обсудите. Формат ограничен только локацией и таймингом, и определяется аудиторией, можно прямо в реальном времени.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="GaYx">Мета-слой, движуха-в-движухе также возникает в любой отраслевой тусовочке: потому что вот эти люди друг друга знают (уже знают), им есть о чем пообщаться. Состав этих людей повторяется из конференции в конференцию (отрасль широкая, но все равно конечная), лидеры мнений, умные люди, группы по интересам пересекаются между событиями, внутренние круги устойчиво складываются — вне зависимости от направления и тематики мероприятий. </p>
  </section>
  <p id="fG2i">У практически любого оффлайнового мероприятия также есть онлайновый слой обсуждений, который живет до события, и продолжает жить после — на тематических ресурсах, в чатиках, внутри компаний и бизнесов, across the universe. Даже больше, допустимо сказать, что без сложившихся сообществ людей, и без <em>уже существующих </em>интересов и цепочек нарратива самого оффлайнового мероприятия не получилось бы.</p>
  <p id="l5jD">Вдобавок, есть устойчивый запрос (и тогда, и сейчас) на движуху, на взаимодействия, на совместную деятельность и фундаментально <em>на смысл</em>. Причем смыслы у каждого свои, потребности тоже. В этом месте нужно отметить, что традиционный «оффлайновый» формат — докладчики, сетка, темы, слайды, зрительский зал — движухе и интересу не очень способствует. Неплохо, но мало: есть форматы и интереснее, и продуктивнее. </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="NE17">Классические слайды и «смерть через powerpoint» вчистую проигрывают активным механикам: мастерклассы, воркшопы, внутренние игры, совместный брейншторминг, «давайте пофантазируем», прочий креативный тимбилдинг. </p>
  </section>
  <p id="sJMw">Без кавычек, потому что задача team building как раз формирует более тесное взаимодействие, доверие, взаимопонимание.</p>
  <blockquote id="9pAf">Джаз-конференция — это когда группа людей собирается, чтобы заняться совместной деятельностью, требующей мастерства и импровизации.</blockquote>
  <p id="WoSd">Интересная и полезная движуха (на фоне слайдов-докладчиков) убедительно притягивает в себя других участников; новые мысли, мнения, новые обсуждения, новые знакомства, друзья, общие эмоции. Совместные эмоции, занятия и «общий опыт» вообще офигенно строят из бульона новые сообщества, полезные и приятные знакомства, направления совместной работы, пространства для идей и мнений, новые смыслы. Еще и все довольны.</p>
  <figure id="Ytyo" class="m_column">
    <img src="https://img2.teletype.in/files/96/e5/96e57ce5-dcd0-402c-81a8-8efe0f759fd3.png" width="1083" />
    <figcaption>Фото от Тио, снова спина, КИБ 2008</figcaption>
  </figure>
  <p id="JTYu">Интересно, полезно, весело. А минусы будут? Надо брать.<br />Что было в части практической.</p>
  <hr />
  <h2 id="DASN">Хронология (2007-2009)</h2>
  <ul id="dv35">
    <li id="RYMP">2005-2007: сама идея, обсуждения в ЖЖ. Место старта — профильные айтишные, рекламные и маркетинговые сообщества в ЖЖ, та же адвёртка-два-ноль,</li>
    <li id="VlkU">2007: появляется Фидик (friendfeed), куда далее перекочевал с идеями значительный пласт аудитории — потому что формат ЖЖ уже тогда всех надоел</li>
    <li id="ewNH">2007 блок онлайновых дискуссий по игро-моделированию и игротехнике</li>
  </ul>
  <p id="5OPA">Важная <a href="https://www.kommersant.ru/doc/1086935" target="_blank">публикация в Коммерсанте</a> 2008 (о, живая ссылка!) про то, что вообще происходит.</p>
  <p id="jSQu"><strong>Дальше сами конференции — <a href="http://metaver.pbworks.com/w/page/53661116/%D0%9B%D0%B5%D1%81%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D0%B8%202007-2009%20(%D0%BA%D0%BE%D0%BF%D0%B8%D1%8F)" target="_blank">эпоха Леса</a></strong></p>
  <ul id="MZzT">
    <li id="SKE6">2007 Гугло-конф</li>
    <li id="z5uB">2008 айКонф</li>
    <li id="gmG7">2008 КИБ</li>
    <li id="uVME">2008 SocialExp</li>
    <li id="HssV">2008 iCamp</li>
    <li id="3jXM">2008 iСМИ</li>
    <li id="OWME">2009 ОК2009 (КИБоРИФ, РИФоКИБ)</li>
    <li id="bXDI">2009 iCamp</li>
  </ul>
  <p id="84yl">На этих оффлайновых событиях и площадках был кусок Леса. Пророс. Где-то в формате «официального» трека и куска программы, где-то явочным порядком «поверх» существующих активностей и треков. Летние конференции отдельная история, потому что пространства для движухи там было чисто органически много. Лето же. Игрища пообкатывать, ману подсобрать, развлечения прожить.</p>
  <p id="OnVo">Дальше движуха разделилась на несколько направлений-веток. И по контенту, и по форматам, и по мастерским группам. Метавер как явление постарается быть организующим звеном для всего, что происходит, но с переменным успехом (для него самого).</p>
  <ul id="jdRH">
    <li id="PVSU">2011 Стартап-школа</li>
    <li id="1067">2011 БФП Лето (проекты «школы Потанина» выступили основным драйвером в этот период)</li>
    <li id="R6BE">2011 Otus, Educamp, ЛША (тут я не следил)</li>
    <li id="kxCo">2012 БФП Зима</li>
    <li id="EOFh">2012 БФП Лето</li>
  </ul>
  <h3 id="EjgZ">Материалы: где почитать и куда копать</h3>
  <p id="hvPJ">— почивший сайт Леса, partyconf, про который <a href="https://web.archive.org/web/20161005215602/http://partyconf.ru/" target="_blank">сейчас помнит вебархив</a><br />— <a href="http://metaver.pbworks.com/" target="_blank">вики-хоронилище Метавера</a>, которое сейчас живое (пока живое)<br />— сайты отраслевых конференций, тоже вебархив<br />— архив Фидика, но там вы без бутылки не разберетесь; формат фидика очень «рваный», а контексты считай утеряны</p>
  <p id="lmlw">А вот пересечение (от Дениса Бескова) с Олегом Буниным и про Product Camp, как идею, со своей хронологией 2007-2011: <a href="https://beskov.substack.com/p/product-camp-russia-bc74d0f358d1" target="_blank">Как в России появился первый Product Camp</a></p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="OyXG">Формат не-конференции, а баркемпа хорошо совмещался с принципами движения ОМГ ЛЕС, которое организовывало так называемые «лесные», а по факту — партизанские, неофициальные, неформальные стихийные конференции.</p>
  </section>
  <h3 id="I3JT">Конкретно про Метавер (мета-университет)</h3>
  <blockquote id="921i">Метавер был объединением нескольких мастерских групп, занимавшихся созданием, тестированием и внедрением различных форматов групповой работы и группового мышления. Его основная работа проходила с 2009 по 2013 год, затем мастерские группы разошлись, и Метавер как коллаборация завершился, и остался только как этап истории.</blockquote>
  <p id="49Md">— <a href="http://metaver.pbworks.com/w/page/53661116/%D0%9B%D0%B5%D1%81%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D0%B8%202007-2009%20(%D0%BA%D0%BE%D0%BF%D0%B8%D1%8F)" target="_blank">хронологический</a> блок<br />— <a href="http://metaver.pbworks.com/w/tags/show?tag=%D0%9B%D0%B5%D1%81" target="_blank">лесное</a><br />— <a href="http://metaver.pbworks.com/w/tags/show/%D1%88%D0%BA%D0%BE%D0%BB%D0%B0%20%D0%91%D0%A4%D0%9F" target="_blank">потанинское</a><br />— блок <a href="http://metaver.pbworks.com/w/browse/#view=ViewFolder&param=%D0%9C%D0%B5%D1%82%D0%B0%D0%B2%D0%B5%D1%80%D1%84%D1%8C" target="_blank">концепций</a></p>
  <p id="qDky">Разберётесь. Конкретно про Метавер, из того, что я помню: на этапе 2009+ контента стало много, идей стало много, внутрянка мастерской и игротехнической работы пошла в отдельных направлениях, отдельных мастерских группах. Встал вопрос авторства, на который до этого всем ранее было плюс-минус пофиг. Материалы Метавера под открытой GNU Public, но это <em>не значит, что все материалы открытые</em>. Появился и NDA, и сегментация по направлениям. Поэтому тут я ссылаюсь только на открытое.</p>
  <blockquote id="yPoV">Важно: помещение существующих материалов в банк [Метавера] осуществляется только с согласия всех владельцев этих материалов.</blockquote>
  <hr />
  <h2 id="6pFL">Базовые идеи</h2>
  <p id="tJGK">Сохраненный <a href="https://web.archive.org/web/20161026222834/http://partyconf.ru/?page_id=27" target="_blank">оригинал</a>. Дальше уже в моем переложении.</p>
  <figure id="jIAF" class="m_original">
    <img src="https://img3.teletype.in/files/a6/b1/a6b1df8c-1876-4e7f-83a3-90906d46d0a5.png" width="612" />
    <figcaption>Contribute! От Тио.</figcaption>
  </figure>
  <h3 id="gecN">Кооперация</h3>
  <p id="CqBI">Всё происходящее = командная работа, как базовая идея. Просто прийти почиллить и поглазеть — сложно, и ломает формат. Зато тем, кто внутри командного взаимодействия, вот тем точно хорошо и клёво. Здесь же отрастает «Contribute or GTFO», как контраст с «пассажирами» основной площадки конференции. Пришел — вносишь вклад, помогаешь другим, выбираешь себе роль, <em>отыгрываешь</em>.</p>
  <p id="f3NS">Термин contribute or gtfo принес (кажется) Урбан, по аналогии с «tits or gtfo». Подробнее есть <a href="https://web.archive.org/web/20240418080353/https://teambook.ru/patterns/contribute-or-gtfo" target="_blank">у Кости</a>:</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="DdbY">Ты приходишь к группе и, вникнув в ситуацию, что-то делаешь. Группа смотрит на твое действие и пытается понять: это contribute или нет, результат улучшается, группе к цели двигаться помогает? Если не contribute, не улучшает и не помогает, то лучше уйти.</p>
    <p id="e0XV">Предлагаешь — спасибо!<br />Добавляешь к продукту группы — замечательно!<br />Критикуешь и предлагаешь что-то взамен — хорошо!<br />Просто критикуешь и не даешь решения — пшёл к черту!</p>
  </section>
  <p id="m9aP">Ну, это честно. Хотя и непросто.</p>
  <h3 id="31js">Мана</h3>
  <p id="wc47">Маной в данном случае именуется запас креативной, созидательной «энергии». Для всех участников движухи. Которая заряжает, мотивирует, глаза какие-то зажигает, способствует движухе (раз) и неплохо так вытаскивает из уныния и бытовухи (два). И которую из оффлайна можно с собой унести, то есть батареечку свою зарядить, голову от шелухи очистить. </p>
  <p id="ff9U">Несложно заметить, что всё это про психологию, про эмоции, и про Чиксентмихаевский «поток». Acceptable.</p>
  <blockquote id="VYmO">Мана — это энергия, которая дает нам силы действовать. Важно, что этой энергией можно делиться, передавая ее друг другу.</blockquote>
  <p id="XftV">Про ману, экологию и проблематику <a href="http://metaver.pbworks.com/w/page/52312780/%D0%9B%D0%B5%D1%81%253A%20%D0%9C%D0%B0%D0%BD%D0%B0%D1%84%D0%B5%D1%81%D1%82" target="_blank">можно почитать тут</a></p>
  <h3 id="fAwJ">Обучение</h3>
  <p id="WNSY">Смысл «пространства в пространстве», как минимум на этапе 2007-2009 был — показать новые возможности, новый формат, новые подходы. К коллаборациям, к движухам, к самой конференции как событию. </p>
  <p id="Gy1X">То есть, помимо учебно-образовательного слоя самой отраслевой конференции (о чем она там была), есть слой мета-образовательный «как мы это делаем, и зачем мы это делаем». Удачное берём, осмысливаем и тиражируем; неудачное отбрасываем. Повторить.</p>
  <blockquote id="CoNI">Лес — это пространство для общения, знакомства и обмена знаниями. Поэтому сам Лес не делает проекты, их делают люди, которые разделяют лесные ценности. Если создатели того или иного проекта считают, что проект получился благодаря Лесу, то на страницах и обложках подобных проектов появляется марка Леса</blockquote>
  <h3 id="Zo7O">Конференция живого действия</h3>
  <p id="68TS">И в концепции, и формате, в основе лежит активность. Участвуй, создавай, обсуждай, предлагай, критикуй, помогай, делись, радуйся, рассказывай, показывай, дай попробовать. Если не получается — притворись, что получается, включи фантазию, <s>снимись с ручника</s>. Fake it till you make it. Правил нет, судей в общем-то тоже нет, а фейерверк кроме тебя никто не зажжет.</p>
  <blockquote id="zhxd">Нас всех заколебали трепачи. Нам самим надоело «просто трепаться». Нам не нравится заниматься «мета-деятельностью». Нам нравится действовать. Лес — это практика малых дел.</blockquote>
  <p id="Cm0p">Сюда же про «темп» и скорость движухи.</p>
  <blockquote id="B39F">Нам нравится скорость. Мы не любим воду. Темп — это само по себе круто. Нам нравится успевать много. Мы понимаем, что каждому из нас отпущено всего по 70 стандартных российских человеко-лет и не хотим их тратить на разную фигню.</blockquote>
  <h3 id="osM8">Диалог и люди</h3>
  <p id="2DLc">Без людей ничего не взлетит, камон. Так что взаимодействовать надо, общаться надо; ртом, буквами, действиями или пантомимой — тут уже сами разберетесь. Еще важно не только говорить, но еще и слышать всех остальных партнеров по несчастью.</p>
  <p id="xG6y">Слой «про людей» еще на раннем этапе оброс внутренней этикой, которая важная. Которая определяет комфортное и безопасное пространство для диалога и для идей. Здесь же про ролевые модели (кто в какой роли выступает), фрейминг и контекст (какие правила определяют то, что мы делаем, а какими прямо сейчас можно пренебречь), как происходящее внутри игрового фрейма потом переносится в реальную жизнь (рефлексия, материалы, идеи, построенные связи и знакомства).</p>
  <h2 id="WWFy">Leave your trace</h2>
  <p id="dNi2">Сложно сказать за каждого из участников и организаторов, кто там что себе вынес. Можно предположить с уверенностью, что движухи было много, эмоций было много, идей и концепций было… не то, что много, а даже <em>в избытке</em>. </p>
  <p id="9oFP">Если говорить про взаимодействия, фан и совместный опыт — точно дофига.</p>
  <p id="slBV"><strong>Фоточки</strong> (пока их не забыл интернет)<br />— от Тио (<a href="https://flickr.com/photos/allileja/albums/72157604286315482/" target="_blank">гуглоконф</a> 08, <a href="https://flickr.com/photos/allileja/albums/72157605315309656/" target="_blank">Судак</a> 08, <a href="https://flickr.com/photos/allileja/albums/72157604759910012/" target="_blank">лесное</a> 08, <a href="https://flickr.com/photos/allileja/albums/72157604608740774/" target="_blank">КИБ</a> 08, <a href="https://flickr.com/photos/allileja/albums/72157610969522732/" target="_blank">iСМИ</a> 08, <a href="https://flickr.com/photos/allileja/albums/72157621881378046/" target="_blank">iCamp</a> 09, <a href="https://flickr.com/photos/allileja/albums/72157617290539489/" target="_blank">OK2009</a>)<br />— от Джинджер (<a href="https://www.flickr.com/photos/jinger_elle/albums/72157617250858578" target="_blank">OK2009</a>, <a href="https://www.flickr.com/photos/jinger_elle/albums/72157622485412139" target="_blank">ВВЦ</a> 09, <a href="https://www.flickr.com/photos/jinger_elle/albums/72157621760867129" target="_blank">iCamp</a> 09, <a href="https://www.flickr.com/photos/jinger_elle/albums/72157607115339983/" target="_blank">Лосево</a>, <a href="https://www.flickr.com/photos/jinger_elle/albums/72157605991568297" target="_blank">лесное</a>)<br />— от Яны (<a href="https://www.flickr.com/photos/teinett/galleries/72157622252990073/" target="_blank">выборка</a>)</p>
  <p id="qJkq">У меня нет морального права выкладывать чужие фоточки прямо сюда, особенно с персоналиями и контентом, но если вы там были — сходите по ссылкам, посмотрите на довольных людей <s>хоть где-то</s>, вспомните исторические вайбы. Зеленые банданы это вам не просто так.</p>
  <p id="52Mf"><strong>Видео</strong> вот кое-что OK2009 достано из архива Митрича (Женя Калинин): <br /><a href="https://www.youtube.com/watch?v=EKlwCLqoqkE" target="_blank">Синий Диван</a>, <a href="https://www.youtube.com/watch?v=pDHKQNCBKNs" target="_blank">Расшарь свое туду</a>, <a href="https://www.youtube.com/watch?v=L-eZl_YI2e4" target="_blank">TEDx Россия</a>, <a href="https://www.youtube.com/watch?v=hY1IjZuuVNY" target="_blank">Атлас Будущего</a>, <a href="https://www.youtube.com/watch?v=vxP21IIK7Eg" target="_blank">Игра в артефакты</a>, <a href="https://www.youtube.com/watch?v=8lHIs2FtRKI" target="_blank">Тобе и Али</a>, <a href="https://www.youtube.com/watch?v=kK7JbATwfaw" target="_blank">Дедушко</a>…</p>
  <blockquote id="UX51">К сожалению, сдерживаться не было уже никаких сил, а истории об обиде от Рамблера и о кошке Симке, о личном кредо и о неработающем ноутбуке послужили идеальным триггером для выхода всего накопившегося за секцию блицев и за предыдущие полтора дня тоже.</blockquote>
  <p id="nPFP"><em>Я даже убрал про «Порно 2.0», хотя у Митрича есть :)</em></p>
  <p id="ipl1">Даже если вас там не было — все равно сходите посмотрите фоточкоф. Большинство из всех этих людей сделали Рунет таким, который он у нас есть сейчас. Не поголовно отцы-основатели, но эти имена вы скорее всего знаете.</p>
  <figure id="NHC7" class="m_column">
    <img src="https://img4.teletype.in/files/32/cc/32ccdffd-7351-414d-8081-6ce195a39f79.png" width="1026" />
    <figcaption>Джинджер, iCamp2009</figcaption>
  </figure>
  <p id="0Akh">Кстати <a href="https://web.archive.org/web/20170702105337/http://partyconf.ru/?page_id=12" target="_blank">про имена</a>. Порядок какой попало. Если кого забыл, напишите. Если кого перепутал, никнеймы, изменившиеся фамилии — тоже (тк давно это было).</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="sbNx">Алексей Волков (Урбан, urbansheep), Алина Зотова (Тио, allileja), Константин Коломеец (kolomeetz), Алексей Кулаков (Ланс, lance), Александра Лавреньтева (lavale), Татьяна Лукиных (jinger), Женя Калинин (meatreach, Митрич), Яна Москвина (teine), Дмитрий Песков (sartac), Михаил Кожаринов, Юрий Марин (aire), Геннадий Риманов, Илья Савчук, Дионис Сантин, Александр Устинов, Николай Яремко (kuso), Денис Бесков (denisbeskov), Николай Котов, Аня Иванова, Алекс Капранов (justdoitbaby)</p>
  </section>
  <p id="U0Zt">Урбана поставил первым, потому что вон он там в вики Метавера месяц назад ковырялся судя по логам, значит живой :)</p>
  <p id="mFeb">Своих фоточек с Тио тоже не нашел, надо в холодные бекапы лезть, но если ты это читаешь — привет тебе ;)</p>
  <h2 id="76P2">Игрища</h2>
  <p id="HTrE">Какие состоявшиеся игровые форматы вокруг Леса можно вспомнить.<br />Именно <a href="http://metaver.pbworks.com/w/page/52298201/_%D0%9A%D0%90%D0%A2%D0%90%D0%9B%D0%9E%D0%93%20%D0%98%D0%93%D0%A0%D0%9E%D0%92%D0%AB%D0%A5%20%D0%A4%D0%9E%D0%A0%D0%9C%D0%90%D0%A2%D0%9E%D0%92%20%D0%9B%D0%B5%D1%81%D0%B0" target="_blank">из числа уверенно сложившихся</a> и обкатанных (в целом игр было кратно больше).</p>
  <ul id="Eipk">
    <li id="EnMf">обмен бейджами (отрефлексировать ролевые модели, поменяться ролями, построить диалог с нуля)</li>
    <li id="vX5u">игра в будущее (форсайтинг, форкастинг)</li>
    <li id="r1Ma">проектирование продуктов (идеальный продукт, абсурдный продукт)</li>
    <li id="5BPX">спринт-конференции (5 min, печа-куча), блиц-доклады</li>
    <li id="anOr">игра в мемы (построение коммуникации, синтез диалога вокруг поставленной задачи)</li>
    <li id="v3ag">сад граблей (прогнозирование-проектирование, обкатка подходов)</li>
    <li id="0D61">игра в переходы (это видоизмененные «метаморфозы»)</li>
    <li id="PxUm">тематические зоны (гладильня, рыдальня, говорильня, газон итп)</li>
    <li id="tuPm">лесная книга (вирусное «собери мысль из надписей и людей»)</li>
  </ul>
  <p id="u3k9">Часть игрищ намеренно вводились как стартовые и «вирусные», чтобы народ перестал тупить, включил эмоции и включился в игру на базовом уровне. Получил свой кусочек фана и вкусную печеньку эмоционального вознаграждения. </p>
  <p id="nsTr">Здесь же первый входной check: может ли человек выйти из тупняка и хоть в чем-то поучаствовать; либо он пришел на конференцию статистом и косит под узоры на обоях. Распознавалка свой-чужой.</p>
  <blockquote id="40z4">Я ищу таких как я, сумасшедших и живых, сумасшедших и больных. <br />А когда я их найду, мы уйдем отсюда прочь, мы уйдем из зоопарка.</blockquote>
  <figure id="Bh2q" class="m_retina">
    <img src="https://img2.teletype.in/files/94/d4/94d492ab-dd19-475f-8d88-953e385daa08.png" width="683.5" />
    <figcaption>Джинджер. Карты будущего.</figcaption>
  </figure>
  <hr />
  <h2 id="zipd">Сложности</h2>
  <p id="PJyU">Во-первых, <strong>это всё надо делать</strong>. Проектировать, участвовать, жечь время, жечь нервы, тащить ответственность. Поддерживать остальных. Это ни фига не просто; в моменте зажечь человека прикольной идеей и движухой — не столь сложно, сложно делать это месяц-два-три, чтобы заводилы, авторы и организаторы не ушли в бытовуху и не засахарились там в ежедневной рутине. Много работы, причем на 2/3 скучной, рутинной и обязательной. Рутину люди не любят, у них обычно и своей хватает.</p>
  <p id="FNmv">Во-вторых, либо всё это <strong>насквозь некоммерческое</strong> (и вывозится на морально-волевых за психологическое подкрепление), либо надо изобретать что-то про деньги и компенсации (а это сложно). Этот момент хорошо знают организаторы различных некоммерческих фестивалей и ролевых игр: ты людям ничего кроме невещественных подкреплений дать в общем-то не можешь, а будешь требовать от них вполне осознанную, качественную и даже срочную работу; на уровне не просто среднерыночном, а очень даже его превосходящем. Денег нет, стимулов мало, «уволить» кого-то нельзя. Требовать сложно. Можно убеждать, вовлекать, заинтересовывать. Это весьма высокие требования к управленческим и к личным качествам.</p>
  <p id="Ekgs">В-третьих, <strong>конфликты</strong>. Люди друг другу разные, не всем со всеми комфортно, не у всех совпадают взгляды на мир. Внутри игры можно раскидаться через ролевые модели и фрейминг; но на долгосроке и в пространстве реального мира неизбежно будут расхождения — хоть по тематическим вопросам, хоть по бытовым. В моменте конфликты и острые края надо оборачивать фасилитацией (и успешно это делать); на долгосроке — все равно, кто-то кому-то <em>будет чуточку более свой</em>, чем все остальные. А это сегментирование, это разделение тусовочки.</p>
  <figure id="CLZ3" class="m_column">
    <img src="https://img3.teletype.in/files/22/7f/227f49fe-7fd3-4353-9106-c635b78e7459.png" width="750" />
  </figure>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="RNnj">Важно отметить повторно, что подход к движухе во многом повторяет а) некоммерческие фестивали и б) полигонные игры живого действия. Это корректная параллель. И даже люди совпадают. </p>
    <p id="4j9M">Потому что навык собрать что-то эмоциональное, веселое и драйвовое, в полях, из говна и палок, из группы разношерстных людей, без денег, в жесткие сроки, на голом интересе и чтобы никто не ушел обиженным — это важный, комплексный и сложный навык. </p>
    <p id="QcrV">Таких людей немного, большинство из них знакомы и общаются. Зато если ты это умеешь, шило в заднице тебя долго не отпустит.</p>
  </section>
  <p id="LhfS">Здесь должна быть байка, как ирландский microsoft набрал себе полный офис русских толчков по приколу, но как-нибудь в другой раз.</p>
  <p id="yqkS">++ забавное от Митрича принесли: <a href="https://meatreach.livejournal.com/263367.html" target="_blank">главное впечатление от КИБа — многообразие форматов</a> (КИБ 2008)</p>
  <hr />
  <h2 id="scrZ">Контейнеризация</h2>
  <p id="pINa">Интересная модель, почему лично я вспомнил про всю ту движуху — это модель контейнеризации и «партизанщины». </p>
  <ul id="YkBA">
    <li id="7K6O">Есть ряд оффлайновых и предсказуемых площадок-хостов. У них есть место, локация, люди, инфраструктура. Там что-то происходит, с заранее заданными форматами. Сетка мероприятий кратко- и средне-срочная. Время и место жестко заданы, контент и agenda подбираются по вкусу, исходя из возможностей.</li>
    <li id="kSVL">Есть сама движуха, которая онлайновая, в смысле виртуальная. Она существует в информационном поле. У нее есть люди, идеи, контент и повестка дня. Краткосрочных оффлайновых событий нет (потому что для них достаточно онлайна, вы в одном чатике/фидике сидите). Зато есть потребность в чем-то существенном, на средне- и долгосрочном горизонте. Постоянной площадки нет, оффлайна нет. Время и место, следовательно, никак не заданы (их надо подбирать и искать), зато контент и agenda примерно понятны и формализуемы в конкретный момент времени.</li>
  </ul>
  <p id="Coq0">Это дает нам модель взаимовыгодного существования (и даже симбиоза) одного с другим. У сообщества нет заданной фиксированной площадки, выбирай любую, синхронизируй место и формат. Одна конференция, другая. Хоть все сразу и в параллель. </p>
  <p id="lMuD">Уместна аналогия с контейнеризацией и облачными сервисами: захотел — поднял оффлайновую конференцию прямо сейчас в заданной точке мира, на подходящей под руку инфраструктуре, написал на бумажке свое название, собрал людей, пообщались получили свой фан (а площадка получила людей и свой профит). Дальше вам эта площадка не нужна, «сдул» сервис, понадобится снова — снова «поднимешь», на подходящих мощностях.</p>
  <ul id="uw2F">
    <li id="D7Bu">оффлайновая площадка получает себе аудиторию, темы, движ и закрывает потребность в контенте, проходимости, чеке итп</li>
    <li id="kAfH">онлайновая движуха получает себе площадку (из числа доступных на выбор) в календаре, по мере необходимости и аппетитов, на подходящих «прямо сейчас» условиях <s>и не заводит свой бар</s></li>
  </ul>
  <p id="FH8W">Где кепку бросил, там сегодня дом.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="pNUd">Партизанский в данном случае не значит «паразитический», этика важно, надо чтобы и инфраструктура получала свою ценность. </p>
    <p id="xzMk">Как правило, это люди, это какой-то чек (если речь идет про заведения), это аренда площадей (коворкинг или заведения). Это доступ к материалам, это возможность расширить и свою аудиторию тоже. Не в последнюю очередь актуален хантинг, если тематики отраслевые и коммерческие. </p>
    <p id="LcNO">В общем, об условиях и взаимовыгодных профитах «на берегу» договориться можно.</p>
  </section>
  <p id="hcZr">Про этику <a href="http://metaver.pbworks.com/w/browse/#view=ViewFolder&param=%D0%9B%D0%B5%D1%81%D0%BD%D0%B0%D1%8F%20%D1%8D%D1%82%D0%B8%D0%BA%D0%B0%20%D0%B8%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0" target="_blank">развесисто читать тут</a></p>
  <hr />
  <h2 id="rWJy">А чего я?</h2>
  <p id="VCKl">Давайте так: вокруг лесной движухи и вон тех людей я «рядом был», но всегда на расстоянии одного рукопожатия. Непосредственно сам я это не делал. Поэтому прямо сейчас моя позиция здесь тоже наблюдательная, архивно-ретроспективная. </p>
  <p id="wY0G">Если хочется чего-то узнать больше, то надо спрашивать вон тех людей, чтобы из первых рук, личные мнения, а не мой взгляд и неизбежные перевирания.</p>
  <p id="1j0G">Хотя, конечно, на нескольких мероприятиях был и поучаствовал.</p>
  <p id="Hupf">Поучаствовал мало, contribute or gtfo я не вывез. </p>
  <ul id="AjmT">
    <li id="JTrL">В тот период я активно (во-первых) занимался Microsoft и его конференциями, которых тоже было дохера, и вот которые я прям делал;</li>
    <li id="oTE9">следом (во-вторых) у меня большое пересечение с фестивально-ролевой тусовочкой, где тоже каждый сезон и несезон есть чем заняться, очень похожим по форме и по содержанию; </li>
    <li id="gOKc">в-третьих, некоторый синдром самозванца, помноженный на батарейку интроверта, помноженный на необходимость куда-то ездить — необходимого входного порога не переступил. Было и было.</li>
  </ul>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="brve">Какие-то из идей леса, баркемпов и описанные (сейчас) в метавере неизбежно (после 2008) использовались в последующих конференциях. Не самые знаковые, тк авторство, но все равно. </p>
    <p id="gxjz">Microsoft (как и Google) активно интересовался образовательной движухой, а первый опыт «онлайновой контейнеризованной» конференции MSFT пробовал в 2008 — Vortex, не очень удачно, хотя и прикольно; вся серия ReMIX несколько лет подряд, к которой я непосредственно лапы приложил; а еще мы с Любко значимся как авторы первой в истории ночной блиц-конференции Microsoft (в Угличе), за которую всем немножко стыдно <s>потому что не надо столько бухать</s>. </p>
    <p id="3aNs">Далее кое-что пробовали у Юры в ProfsoUX, кое-что было в IXDA, в IT Global Meetup (летние вайбы айКемпа).</p>
    <p id="pIIX">Кусочки я использовал у себя в ИТМО/iDM 2014-2016, на правах эксперимента. Дальше не стал (и так работало), хотя когда я ушел, знаю что ребята взяли некоторое себе в инструментарий.</p>
  </section>
  <p id="FIks">Но авторство все еще туда. <s>Лесом</s> в Лес.</p>
  <p id="2CqL">Если интересно в деталях, полистайте остатки Метавера, может что для себя покажется интересным.</p>
  <hr />
  <p id="AFhP">Спасибо что были вместе.</p>
  <figure id="y0Fw" class="m_column">
    <img src="https://img1.teletype.in/files/88/6d/886dc5a2-edaf-4e9a-9291-f842b490960b.png" width="1032" />
    <figcaption>Джинджер. Фоточки про фоточки. Meta is so Meta.</figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/no-regulation-tlg</guid><link>https://cgvictor.ru/no-regulation-tlg?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/no-regulation-tlg?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Провал регуляции системы (на примере Telegram)</title><pubDate>Thu, 12 Mar 2026 16:23:52 GMT</pubDate><category>Рецепты</category><description><![CDATA[Мой комментарий в одном из федеральных СМИ. Раскрою тему.
Почему лучше регулировать хреново, чем остаться без инструмента совсем.]]></description><content:encoded><![CDATA[
  <p id="F4tX">Мой комментарий в одном из федеральных СМИ. Раскрою тему.<br />Почему лучше регулировать хреново, чем остаться без инструмента совсем.</p>
  <hr />
  <p id="Nfy8">То, что у нас законодатель нацелился позапрещать популярный мессенджер — не новость.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="jJy4">Скажу сразу, спекулятивных выводов про политику, регуляторку и законодательство я постараюсь избежать, оставаясь нейтральным. Хотя конечно, мнение имею. </p>
    <p id="PsyR">Здесь рассмотрим саму ситуацию, как плохой, но ценный пример.</p>
  </section>
  <p id="yFdk"><strong>Что произошло</strong>. Помимо технических ограничений любого характера, которые мы уже видели ранее, регулятор рынка через ФАС выпустил актуальное разъяснение, что ведомство (ФАС) <a href="https://ria.ru/20260310/fas-2079705199.html" target="_blank">собирается</a> расценивать размещение рекламы в Tlg (медийной площадке) как нарушение закона «о рекламе» ч. 10.7 ст. 5. Со штрафами с рекламодателей. Задним числом, за прошедший год.</p>
  <p id="vDBl">Интент понятен, подкосить финансовые потоки. Мессенджер с рекламы зарабатывает. Авторы и владельцы каналов с рекламы зарабатывают. Типа, перестанут.</p>
  <p id="NuQv">С такими танцами никакой рекламодатель не пойдет легально размещаться, рискуя попасть на штрафы (до 500 000 руб). </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="A0pN">В отношении правоприменения «задним числом», для тех, кто год вполне себе рекламу размещал — легально, с erid — у меня цензурных слов нет. </p>
    <p id="t8Ua">Особенно прикольно тем, кто покупал какую-то мелкоту у авторов за $50, а попасть теперь рискует на пол-ляма. </p>
    <p id="pjsG">Но я обещал оставаться нейтральным.</p>
  </section>
  <hr />
  <p id="dpyU"><strong>В чем здесь беда</strong>. В том, что рынок, силами РКН, до этого момента был легальным. Контролируемым и регулируемым. Блогеров и владельцев каналов <a href="https://www.consultant.ru/document/cons_doc_LAW_482565/30b3f8c55f65557c253227a65b908cc075ce114a/#dst100105" target="_blank">обязали</a> пройти регистрацию и получить идентификатор. Размещать рекламу по заявкам рекламодателей, как гласит вводная о целях; забавно, что на момент написания статьи эта фраза до сих пор висит на госуслугах в уведомлении о проверке.</p>
  <p id="mJD7">Теперь получается, что такой возможности нет. <br />А есть риски, <a href="https://www.rbc.ru/technology_and_media/05/03/2026/69a9cbe89a79472079904d78" target="_blank">проблемы</a> и штрафы.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="J0V1">Означает ли это, что рынок перестанет размещать рекламу?</p>
    <p id="hv0Z">Нет, естественно не означает. </p>
  </section>
  <p id="64q8">Наиболее идиотское положение сейчас у тех, кто <a href="https://www.gosuslugi.ru/snet" target="_blank">пытался</a> «быть законопослушным» и выполнил все предписания — и все равно получил весь ворох озвученных проблем от регулятора. </p>
  <p id="HKnV">Тогда как часть каналов и авторов положила на это всё болт, теперь оказалась в выигрышном положении, и точно не подставила своих же рекламодателей под штрафы.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YTKd">Был регулируемый рынок? Не стало регулируемого рынка. Продолжать размещать какую-то рекламу, о которой знает регулятор, не будет продолжать ни один вменяемый участник.</p>
  </section>
  <p id="JbZW">Размещать рекламу рынок не перестанет, просто РКН+ФАС+ФНС из этой схемы теперь начисто вылетели. <strong>Нет на рынке регуляции</strong>. Можно размещать любую запрещенку. Можно любые условия. Можно любую юрисдикцию, включая иноагентов. Можно любую политоту. Кто запретит-то, если запрещаторы больше не имеют никаких инструментов влияния? И даже мониторинга.</p>
  <p id="5q2o">Раньше, кстати, это еще и 3% налогов с рекламы в бюджет давало.</p>
  <p id="jn27">Дальше оплата налом, криптой, серыми схемами, чем угодно — но только не официальными каналами, где их видит РКН-ФАС-ФНС. </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="KUrd">Всё это, конечно, очень «круто». Потому что неприятная мне политическая реклама, все азартные игры, адалт, гембла, беттинг, вся говнокрипта, вся украинская шиза, мгновенно и массово освободившуюся нишу займет, и любезно предоставленной возможностью воспользуется. </p>
    <p id="k5OQ">Спрос на всю эту ерунду был, оставался, и никуда не девался. За размещение в канале-миллионнике про-украинского говна (как и российского либерального), крипторазводов на деньги, скама, адалта, беттинга (даже белорусского), рекламодатель готов заносить прямо сейчас $5000 и более за один пост. </p>
    <p id="kmzp">И чем грязнее «реклама», тем расценки выше.</p>
  </section>
  <p id="ooAB">В том, что рекламодатели подобного рода готовы платить эти, и даже заведомо бОльшие деньги, лишь бы дорваться до ранее недоступной аудитории, у меня сомнения нет вообще никакого.</p>
  <p id="hQXA">Вопрос «какой мудак это придумал?» я тоже оставлю за скобками, это не суть важно пока что.</p>
  <hr />
  <p id="k7KG">То есть, ситуация прямо из экономического учебника. <strong>В попытке что-то там зарегулировать, регуляция и применение правил закончились</strong> как явление. Дальше горе-регулятор может сколь угодно много выдумывать, инструмента воздействия у него больше нет. Цепочки взаимодействий ушли мимо.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="0Z3v">Классическая «коррупция» в смысле обхода легальных инструментов, имеет ровно такие же корни и предпосылки. </p>
    <p id="jWwo">Если стороны сделки уже, заведомо, находятся в нерегулируемом (или криминализованном) поле, то дальше они вольны договариваться о чем угодно, на любых взаимовыгодных условиях, и повлиять на это законодателю и регулятору тупо нечем. </p>
    <p id="cOWc">Кто хочет договориться, договорится всегда.</p>
  </section>
  <p id="1Xwy">Выводить такие взаимодействия в «белую зону» обратно под регуляцию обычно пиздецки сложно и дорого. Не спасают не только штрафы, но даже массовые расстрелы (кроме шуток, есть пример Китая). Если регуляция и закон УЖЕ не работают, то они могут быть произвольной жесткости, сложности, хоть кары небесные; они УЖЕ не работают. </p>
  <p id="CZtK">Еще, что кратно хуже, «маленькое» нарушение правил далее тащит за собой большую криминализацию, <strong>одичание рынка</strong>. Участники уже вылетели из регулируемой плоскости, дальше можно творить любую дичь.</p>
  <p id="zTVG">Откажется от «запрещенки» владелец канала, которому прикрыли легальный доход целиком? Не откажется, а с чего бы, собственно. <br />Ты сам уже вне правового поля, запрещать тебя второй раз нечем.<br />А кушать хочется, вот чемодан бабла стоит.</p>
  <hr />
  <p id="XJWd"><strong>Что отсюда надо вынести</strong>: контроль (рынка), и регуляция чего угодно, имеет свою кривую гибкости. То есть, эластичности относительно инструмента и сдержек-противовесов. Это частный случай краевого минимума кривой <a href="https://en.wikipedia.org/wiki/Elasticity_(economics)" target="_blank">эластичности</a>, как у <a href="https://en.wikipedia.org/wiki/Laffer_curve" target="_blank">Лаффера</a>, по сути.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yyQb">Если «вылететь» за границы регуляции, то сама регуляция теряет смысл. Получаются не «неудачные условия», получается просто нерегулируемый механизм. </p>
    <p id="MZJs"><em>Слетает не только та часть регуляции, где регулятор накосячил (и даже попробует переобуться), слетает и становится неработоспособной вся регуляция в принципе.</em></p>
  </section>
  <p id="OrK7">Лучше все-таки хреновая регуляция, чем ее полное отсутствие.<br />Но тут как: кинжал хорош для того, у кого он есть.</p>
  <p id="H7wp">Это работает в любой регуляции мульти-акторной системы (где много игроков и поиск равновесия). Равновесие все равно найдется. Только регулятора там уже не будет.</p>
  <hr />
  <p id="vDha">Вот такой вам пример. <br />С мессенджером разберемся, а вот с некомпетенцией на местах уже хз.</p>
  <p id="G4VZ">Такие дела.</p>
  <hr />
  <hr />
  <p id="x8gj">О, куски интервью на морду Газеты/Сбера попали. Местами без контекста, но зато вместе с Клименко и Поповым (+Дуровым и Песковым), ебать компания конечно подобралась<br /><a href="https://www.gazeta.ru/tech/22636879/blokirovka-telegram.shtml" target="_blank">https://www.gazeta.ru/tech/22636879/blokirovka-telegram.shtml</a></p>
  <figure id="LV5A" class="m_column">
    <img src="https://img4.teletype.in/files/b7/c2/b7c20939-338f-4783-a1d2-8eb155f4f0e7.png" width="716" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/marketing-old-new</guid><link>https://cgvictor.ru/marketing-old-new?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/marketing-old-new?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Два стула маркетинговых кампаний</title><pubDate>Thu, 12 Mar 2026 12:35:52 GMT</pubDate><category>Маркетинг</category><description><![CDATA[Можно привлекать новых, можно удерживать старых.
Но не получится одними инструментами и механиками делать это одновременно.]]></description><content:encoded><![CDATA[
  <p id="ruYn">Можно привлекать новых, можно удерживать старых.<br />Но не получится одними инструментами и механиками делать это одновременно.</p>
  <hr />
  <p id="4voD">Ща будет база базишная, на уровне институтских курсов.<br />Но я упоминал ранее, а тут снова под руку вспомнили. Значит, надо.</p>
  <p id="vTKz">Рекламные кампании, и маркетинговые компании, в самом простом приближении принято делить на два больших класса.</p>
  <ul id="sGr6">
    <li id="RbGr">привлечение <strong>новой</strong> аудитории <br />(следом конверсия ее в деньги, в постоянную юзербазу и так далее)</li>
    <li id="judv">удержание <strong>старой</strong> аудитории <br />(борьба с вымыванием юзербазы, допродажи, повышение LTV)</li>
  </ul>
  <p id="thNT">Это ОЧЕНЬ тупое упрощение, есличо, я точно в курсе.<br />Но если вы хотя бы его понимаете, далее разбираться и всё усложнить, с пользой себе — не проблема.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="RqbA"><strong>Проблема вот в чем: одновременно эти две штуки работают очень херово.</strong></p>
    <p id="u8u2">Это разные задачи, разные механики, разные аудитории.</p>
    <p id="MCEe">Одной задницей на этих двух стульях сидеть обычно не получается.</p>
  </section>
  <p id="Pu31">Мы говорим в этом разрезе только о количественном факторе, и вот почему. Потому что у юзербазы есть эрозия. Аудитория ваша с течением времени неизбежно куда-то вымывается, остывает, охладевает в смысле маркетинговом, и вообще превращается в длинный хвост.</p>
  <p id="RMjd">Соответственно и цели в этих двух вариантах тоже разные</p>
  <ul id="BbMN">
    <li id="zsHh">мы привлекаем новую аудиторию, чтобы скомпенсировать эрозию и получить количественно плюс (в любых приятных показателях). <br />Эрозия -15%, привлекли +20%, в выигрыше 5%.</li>
    <li id="B47I">мы удерживаем старую аудиторию, чтобы уменьшить показатель эрозии, меньше терять (аналогично в любых приятных показателях). <br />Эрозия -15%, снизили до 10%, в выигрыше 5%.</li>
  </ul>
  <p id="ptig">Так вот, еще раз. Одновременно это не работает.<br />Вы, конечно, можете попробовать. Кто я такой, чтобы запрещать сливать ваши собственные бюджеты, ваще без проблем.</p>
  <hr />
  <p id="MtLv">Стратегия с «новыми» и захватом рынка ориентируется на <strong>acquisition</strong>-цепочку. Вот та самая AIDA, внимание-интерес-желание-действие. Воронки, каналы, грелки, связки. Конверсия обычно или в пользователя, или в деньги. Привлекать новых проще в той части, где о вас еще не знают, где есть возможность откусить себе кусочек аудитории — например, пачкой чуть более <a href="https://cgvictor.ru/multiple-offers" target="_blank">таргетированных офферов</a>, чем у конкурента.</p>
  <p id="shiv">Стратегия со «старыми» и удержанием ориентируется на <strong>retention</strong>-фазу. Вам не нужно никого привлекать, вам нужно наглядно убедить, что с вами всё еще зашибись. Работаем с Retention-Conviction-Satisfaction. Конверсия обычно идет либо в допродажи, либо в увеличение LTV (подписки, апгрейды), либо хотя бы в активное ядро аудитории, как вы его там меряете (да, CCU). Взаимодействовать <a href="https://cgvictor.ru/existing-client" target="_blank">со старыми проще</a> в том смысле, что а) вы про них уже много чего знаете, б) с ними есть коммуникация, в) кредит доверия и г) они уже хотя бы раз дали вам денег, например. И надо, чтобы продолжали.</p>
  <p id="RGkc">Это совершенно разные аудитории, цели, соответственно приемы, таргеты и механики.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="BW10">Если делать одновременно и то, и другое, чтобы хорошо — надо закладывать два бюджета (вместо одного), две рекламных стратегии, два больших направления работы.</p>
  </section>
  <p id="xagB">Если делать одновременно и то, и другое чтобы как попало с одним бюджетом и ограничениями — вы «не дожмете» и профакапите оба направления, практически могу гарантировать. Потому что необходимо не просто «делать», а переиграть других игроков на рынке. </p>
  <p id="YiGl">Если вы что-то там из себя вымучиваете, пытаясь натянуть сову на глобус чтобы воевать во все стороны разом, до точки принятия решения по обоим направлениям вы не дотянете. Вас переиграет <em>любой </em>конкурент, который сфокусировался на чем-то одном. Или любые два, по обоим направлениям, если у них свои стратегии были разные.</p>
  <p id="q8Zj">Считайте, что вы просто покормили маркетинг и слили бюджеты.</p>
  <hr />
  <p id="2zJb">Разделение, почему я про него пишу, обычно наглядное и тупое как угол дома.</p>
  <p id="HINd"><strong>Не надо быть гуру маркетинга</strong>, чтобы посмотреть на рекламную стратегию и спросить, а что мы с ее помощью делаем. На кого она рассчитана, чего достигает, как мы это меряем.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="XYKq">Если маркетинг на такой, достаточно простой вопрос, начинает что-то мычать и мять сиську — это значит, кто-то там просто не понимает, что он делает и куда воюет. А просто жжет бюджеты и получает заработную плату — это всем нравится, это прикольно и приятно.</p>
  </section>
  <p id="dVJI">В принципе, делать стратегически и то, и другое — глобально, как бизнес целиком — вы вполне можете. Но разными стратегиями, разными инструментами, разными кампаниями и разными метриками по ним. Иногда вообще разными командами маркетинга (а что, я такое даже видел удачное, когда RCS занимаются свои, а AIDA аутсорсеры). </p>
  <p id="wEPF">В такой схеме еще неплохо прикинуть, как вы собираетесь всё это грамотно считать, и не засирать друг другу каналы, но решаемо.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="AfZj">Здесь я должен поворчать про профпригодность маркетинга, конечно. Но давайте так: если вы набрали туда неофитов по объявлению, то и работать они будут как неофиты по объявлению. <a href="https://cgvictor.ru/stupidity-perimeter" target="_blank">Тупизна на периметре</a>. </p>
    <p id="oK9B">Это ни хорошо, ни плохо (а мне так вообще всё равно), но в данном случае это факт. Как вы будете с ним глобально жить — мне тоже пофиг, но попробуйте хотя бы отловить описанную проблему, если она вдруг у вас есть, и поработать над <strong>фокусировкой целей и задач</strong>.</p>
  </section>
  <hr />
  <p id="z0VS">Ситуацию, когда описанного разделения нет, я могу сходу придумать только в одном случае: если у вас <em>абсолютно одноразовая сделка</em>, вы клиента поймали по AIDA, потом друг друга забыли начисто. </p>
  <p id="zNAo">Нафига так делать в нормальной жизни, мне скорее непонятно (см про <a href="https://cgvictor.ru/existing-client" target="_blank">существующего клиента</a>, с ним комфортно и удобно), но мало ли, чего в мире бывает.</p>
  <p id="vszy">Даже у наемных убийц есть лояльные клиенты, повторные продажи и активная юзербаза. Не спрашивайте, откуда я это знаю.</p>
  <hr />
  <p id="Iv1z">Вот такой вам инструментик-рецепт. Хотя бы на подумать.</p>
  <p id="y9Uz"><strong>Hope that helps</strong>.</p>
  <hr />
  <hr />
  <p id="WAYd">Оооо, тут хороший вопрос вдогонку занесли<br /><strong>— а если у нас вилка и мы не вытягиваем, как выбрать?</strong></p>
  <p id="MGAZ">Справедливо. Я бы смотрел, где вы получите больше пользы и импакта</p>
  <p id="hFay">Обратите внимание на циферки сверху.<br />Можно привлечь +20% и получить +5% суммы. Можно снизить эрозию на 5% и получить, типа, тот же выигрыш.</p>
  <ul id="tnvI">
    <li id="LG9Y">если нам дешевле привлекать +20% и сразу их конвертить — не вопрос, делайте так. Особенно, если там маячит живой конверт, и возможность окучить какой-то важный кусочек рынка.</li>
    <li id="Wew8">если нам дешевле сохранять +5%, например на уже насыщенном рынке, то скорее всего это будет дешевле. У вас инструментов больше, и аудитория вот она, за ней не надо бегать и лить воронки.</li>
  </ul>
  <p id="o0mR">По себе скажу, что возможность «сохранить» и допрогреть существующих почти всегда несколько недооценена. Все почему-то бегут воевать за новых и биться за доли процентов конверсий (видимо так молодежь на курсах учат), когда прямо под ногами есть живые люди, с нормальной коммуникацией, конкретными задачами и с запасом лояльности. </p>
  <p id="JtCu">Я не говорю сейчас, что там прям обязательно золотое дно лежит; я говорю о том, что потенциальных вариантов игры там не меньше, а иногда даже больше <s>если глаза разуть и уши открыть</s>.</p>
  <p id="fvVH">Можно, в принципе, чередовать. Квартал или полгода поработали с acquisition, сняли цифры; следующий заход на retention и satisfaction, поработали лопатой там, сняли цифры, прикинули. А пока копаем, прошлый сегмент дорабатывает свой длинный хвост и копит системные эффекты. Но нужен план, и нужны метрики.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="RPYw">Еще вопрос, в чем мы меряем. Цифра по-юзерам может быть одна, цифра в-деньгах может быть принципиально другая. Цифра в случае CCU-based и подписочных моделей может быть вообще третья, там другие факторы включаются.</p>
  </section>
  <p id="LL9s">Рынков где можно пойти и тупо нарубить себе +20% юзербазы, не ввалив камазы бабла, и не продать при этом чьи-то органы — их не так много. Мало их. Но это если в людях мерить. Если в деньгах, то бывает всяко-разное (например, есть вкусная ниша, или нету, но оба варианта одинаково хреновые), но и эрозии «в деньгах» не взятые мной с потолка -15%, а поменьше. Короче, depends.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/jwt-tension</guid><link>https://cgvictor.ru/jwt-tension?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/jwt-tension?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Что не так с JWT (грабли)</title><pubDate>Wed, 11 Mar 2026 16:08:03 GMT</pubDate><category>Разработка</category><description><![CDATA[JWT, подписанный веб-токен, штука неплохая. Но на практике вылезают вопросы, которые с ним как-то надо решать. Не все решаются красиво. Инструментик не универсальный.]]></description><content:encoded><![CDATA[
  <p id="w2wD">JWT, подписанный веб-токен, штука неплохая. Но на практике вылезают вопросы, которые с ним как-то надо решать. Не все решаются красиво. Инструментик не универсальный.</p>
  <p id="HL8V">Статья <a href="https://cgvictor.ru/edge-cdn-max-flaw" target="_blank">про CDN и content policy</a> немного подогрела обсуждение (кстати, спасибо). И да, я о JWT высказываюсь не совсем в оптимистическом ключе. </p>
  <p id="O9M5">У него, как у подхода и метода, есть плюсы — иначе бы он не появился, но есть и минусы, и минусы неприятные. Это не просто «Витя старый хейтер и опять ворчит». Вот давайте по ним, по минусам и деталям, пробежимся.</p>
  <hr />
  <h2 id="Y8Gv">JWT, json web token</h2>
  <p id="sMuf">Что такое JWT: это подписанный кусок контента. Внутри него есть <a href="https://en.wikipedia.org/wiki/JSON_Web_Token" target="_blank">три куска данных, по стандарту</a>. В одном из них, в поле payload, лежит ваш набор данных. У набора данных (payload) есть набор «стандартных полей», но вы можете туда напихать свои, с произвольными ключами.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7Oms">Общая структура:</p>
    <p id="vBXq">— <code>header</code> определяет формат содержимого<br />— <code>payload</code> это ваши данные<br />— <code>signature</code> криптографическая часть, подпись</p>
  </section>
  <p id="tBkP">Токены открытые (если вдруг это новость), в большинстве случаев читаются кем угодно, расковыриваются по формату <a href="https://www.jwt.io/" target="_blank">простейшим образом</a>. </p>
  <p id="V7al"><code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30</code></p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="MYUX">— header = <code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9</code>, <br /><code>{&quot;alg&quot;: &quot;HS256&quot;,&quot;typ&quot;: &quot;JWT&quot;}</code></p>
    <p id="S1aT">— payload = <code>eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0</code>, <br /><code>{&quot;sub&quot;: &quot;1234567890&quot;,&quot;name&quot;: &quot;John Doe&quot;,&quot;admin&quot;: true,&quot;iat&quot;: 1516239022}</code></p>
    <p id="k8Dl">— signature = <code>KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30</code>, <br />это подпись с секретом <code>a-string-secret-at-least-256-bits-long</code>, <code>HMAC_SHA256(secret, base64urlEncoding (header) + &#x27;.&#x27; +base64urlEncoding (payload))</code></p>
  </section>
  <p id="vvOh">По узнаваемым «ey» и трем точкам итоговая структура запросто распознаётся «на глаз». Ну и читается чем попало, доступных библиотек сотни.</p>
  <ul id="QzL5">
    <li id="dc2g">Если вам нужно шифровать токены, чтобы не читалось кем попало, гуглить JWE, Json Web Encryption. Там пять полей вместо трех, тоже через точку, <code>header</code> определяет дальнейшее содержимое и его тип. Нам он тут пока не нужен, дальше разговор про простой, plain. </li>
  </ul>
  <hr />
  <h2 id="AEND">Содержимое, payload</h2>
  <p id="lJip">Основной смысл структуры — передать содержимое (payload). Стандартные поля могут присутствовать, но не обязаны; единственное ограничение состоит в том, что стандартные имена полей <em>рекомендуется</em> использовать по назначению из стандарта, не подменять значения чем-то другим. Если хочется запихать своё, добавьте свои собственные ключи полей, стандарт это никак не ограничивает.</p>
  <p id="ZIxp">— <strong>iss</strong>: кто выдавал токен. Issuer по стандарту должен быть читаемым названием, или вообще урлом, но если токены используются только внутри вашей инфры, вы можете использовать там примерно что угодно: например, ID вашей системы или числовой ключ.</p>
  <p id="cqrH">— <strong>sub</strong>: кому выдан. Subject это актор/принципал, которому лично выдан токен: чаще всего это либо лично пользователь (и его ID), или конкретная внешняя система (если актором выступает она, для server to server взаимодействий). Иногда и то, и другое.</p>
  <p id="RwdO">— <strong>aud</strong>: система, для использования которой предназначался токен. Если Audience задан, то он обязан ставиться/проверяться, и при выдаче токена, и при использовании. Если не задан, то такой токен выдан «кому попало», на предъявителя.</p>
  <p id="dfI0">— <strong>exp</strong>: до какого времени (unix timestamp) токен считается валидным. Всё что позже — отбрасывается, тк считается протухшим.</p>
  <p id="zQHa">— <strong>nbf</strong>: с какого времени токен валидный (unix timestamp). Обратное предыдущему, <em>до какого</em> времени токен использовать еще нельзя. Это полезно, когда в обороте есть несколько токенов, старый еще-рабочий, и новый еще-не-начавшийся.</p>
  <p id="2sft">— <strong>iat</strong>: когда выписан этот конкретный</p>
  <p id="zLAM">— <strong>jti</strong>: идентификатор именно этого токена. Полезно при ведении базы активных токенов и при проверках (пере-проверках).</p>
  <p id="wjnB">— <strong>kid</strong>: какой ключ использовался для генерации подписи этого токена и, следовательно, как получателю проверять его подпись (и чем).</p>
  <p id="fkNJ">— <strong>alg</strong>: что за механизм подписи использовался. Вы удивитесь, но это важно, и об этом поле часто забывают (ниже расскажу).</p>
  <p id="7fwe">Можно использовать другие поля payload для тех данных, которыми оперируют уже ваши системы.</p>
  <hr />
  <h2 id="YYiv">Подпись, signature</h2>
  <p id="FenK">Подпись никак не защищает данные от их читаемости. В 99% случаев вы столкнетесь с открытыми токенами, хотя формально есть варианты им payload зашифровать. Но это и не требуется.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="E4x5">Подпись показывает, что вот этот набор данных был помещен в токен тем, у кого был ключ secret. Потому что только с его помощью можно сгенерить подпись, которая будет валидной при проверке.</p>
  </section>
  <p id="SMo8">Если мы предполагаем, что ключ подписи действительно секретный, и был в наличии только у исходной системы, значит если проверка прошла успешно — источник данных тот, кому мы доверяем относительно авторства этих данных. Потому что больше никто бы не смог валидно подписать токен.</p>
  <p id="X3Xg">Симметричные алгоритмы хешей (HS256, HMAC_SHA256 из примера) не самый безопасный вариант в этом смысле. Потому что для создания подписи хеша, и для его проверки используется один и тот же secret, который должен в этом случае присутствовать и на системе-источнике, и на системе-приемнике. Поэтому для вариантов, которые предполагают хоть какую-то безопасность токена, сразу смотрим на семейства RS и ES.</p>
  <p id="Ai2m">— RS256, RS384, RS512 варианты асимметричной подписи с RSASSA-PKCS-v1_5<br />— ES256, ES384, ES512 варианты асимметричной подписи на ECDSA, на эллиптических кривых</p>
  <p id="EZR1">Для зануд, есть и другие:</p>
  <p id="Zx20">— PS256, PS384, PS512 варианты RSASSA-PSS в варианте probablistic (MGF1), подпись будет каждый раз разная, но все еще валидная (иногда это важно)</p>
  <p id="1C2j">— EdDSA (одно значение <code>alg</code>) и явное указание используемой э/кривой в поле <code>crv</code>. Возможные на практике значения = [Ed25519, Ed448]. Если вам нужна действительно промышленная криптография, нормальный вариант, потому что нет ряда изъянов из других вариантов, и все еще достаточно быстрый. </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="j4bM">В случае асимметричных вариантов, генерится пара ключей. Одним закрытым, секретным, на сервере, мы генерим подпись. Вторым открытым, на целевой системе, мы эту подпись проверяем. Второй ключ не дает возможности создать валидную подпись — только проверить существующую.</p>
  </section>
  <p id="cfSw">Вот это уже неплохой вариант. Открытый ключ, использованный для подписи, вы можете раскидать на произвольное количество сторонних систем; всем, кому надо с вашими токенами работать. Можно даже указать в KID какой ключ для этого конкретно токена использовался, а открытые ключи по KID сложить в общедоступное место. </p>
  <p id="ISyC">Целевая система получает токен, смотрит что там за ключ использовался, есть ли у нее открытая часть, и проверяет подпись. Если открытого ключа KID нет, значит надо пойти (безопасным образом) к источнику, и забрать открытую часть, провести проверку. Это мы уже на минималочках реализуем public key infrastructure.</p>
  <hr />
  <h2 id="yi2P">Нахера это всё?</h2>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="jo0P">Наличие подписанного кусочка данных, по которому мы явно можем: <br />а) прочитать содержимое <br />б) проверить авторство того, кто этот кусок данных сгенерил. </p>
    <p id="XATf">Без необходимости куда-то ходить. Универсальный паспорт, и JWT исторически используется именно в таком контексте.</p>
  </section>
  <p id="mVli">Что здесь хорошо, то есть плюсы:</p>
  <p id="sfjm">— <strong>все необходимые данные</strong> для чтения и проверки уже есть на целевой системе. Не надо бегать куда-то там в сеть, и проверять, что откуда взялось. В распределенной среде, в нагруженных системах итп, просто так в сеть куда-то там на каждый чих, на каждого юзера — не набегаешься. А здесь весь набор данных либо берется из токена, либо уже есть на целевой системе (ключ проверки).</p>
  <p id="a6nV">— стандарт сразу предполагает <strong>ограничения по времени</strong> использования, неплохо бы их применять. Конкретный токен выдается на ограниченное время.</p>
  <p id="Tb13">— <strong>внутрь токена в payload</strong> можно безопасным образом вшить результат каких-то «тяжелых» проверок: список ролей, возможностей, ключевых открытых данных юзера (user ID, screen name), внутренние идентификаторы. Подтвержденным, секурным образом. Если конечно их вообще можно передавать открытым текстом (помним, токен читается)</p>
  <p id="iH5W">— <strong>куча готовых механизмов</strong>, типовых и проверенных, которые скорее всего доступны на целевых системах. Для популярного софта, библиотек, реализаций. Третьи системы чаще всего не будут гореть желанием реализовывать под ваши задачи какой-то лютый кастом. А сама идея реализовывать industrial grade криптографические защиты руками обычно несёт много граблей by design, лучше взять готовые механизмы.</p>
  <p id="GO2v">Плюсы значительные, механизм неплохой.<br />Но есть и минусы.</p>
  <hr />
  <p id="PVQ9">Давайте сразу 2.5 простых, статических минуса тут обозначу:</p>
  <p id="bFpA">— <strong>объем</strong>. JWT это примерно полкило данных. На каждый запрос везде у вас начинает летать +0.5Кб, что может быть на высоконагруженных системах неприятно, хотя и не смертельно. (0.5кБ х 10000 rq/sec x 86400 сек) = 412 Гб трафика в сутки просто ради того, чтобы токены гонять. Хотя, если бы вы их не гоняли, еще неизвестно, существовал бы способ лучше.</p>
  <p id="G7hk">— <strong>криптография</strong>. Проверки подписей RSA и эллиптикой совсем не бесплатные, нагрузка по CPU будет вполне ощутимая, по сравнению с ее отсутствием. Значит, эджам придется тратить на это ресурсы и снижать скорость.</p>
  <p id="igC0">— <strong>ограничение размера</strong>. Впихнуть в JWT более 2 Кб обычно не удается, потому что растет объем передачи, и стандартные заголовки http и прочих транспортных протоколов уже начинают упираться в ограничения</p>
  <p id="v2TX">Чаще всего это неизбежное зло, но тем не менее.</p>
  <p id="Emcq">Далее проблемы интереснее. <br />Структурные, логические.</p>
  <hr />
  <h2 id="otUH">Проблема раз: украденный токен</h2>
  <p id="oWtT">Токен в такой схеме отчуждаемый. Мы его сгенерили на системе-источнике, куда-то выдали, в широкий мир кому-то там. Дальше он = вещь самостоятельная и автономная. Система-приемник ему верит; основным плюсом является то, что для проверок «никуда бегать не надо», как следствие — никто к источнику истины уже и не придет, пока токен не стухнет.</p>
  <p id="eX4L">Если кто-то как-то перехватил валидный токен, или злонамеренно выписал для юзера другой, валидный — любой токен всё еще считается валидным, пока совпадает подпись и проверяются границы его времени.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="qawU">Стандарты и гайды прямым текстом говорят, что верить «только токену» достаточно херовая практика, без дополнительных механизмов, но кто их читает.</p>
    <p id="dbTG">В современном ландшафте безопасности любые схемы аутентификации/авторизации, которые полагаются только на владение какой-то ключевой хренью — заведомо ломаемые. Я об этом <a href="https://teletype.in/@cgvictor/already-hacked" target="_blank">уже писал, и неспроста</a>. </p>
    <p id="ehwx">Спереть токен, который летает по сети и куда-то шлется устройством пользователя — схема ломается элементарно, если сломать это самое устройство.</p>
  </section>
  <p id="0Yih">Минус в этом случае в том, что система-получатель может даже не заподозрить подмены. Какая разница, токен и токен, подпись сходится. Вам внешнюю систему сломали, «на все деньги» об полный identity юзера, а система-источник об этом даже не узнает.</p>
  <p id="9Gof"><strong>Как решать</strong>: ну, как минимум, добавлять в токен дополнительные поля, которые что-то техническое про пользователя также содержат. Сетевые параметры, как вариант: IP, подсети, автономную систему. Географию, данные устройства. Какой-то более сложный фингерпринтинг. </p>
  <p id="h5t6">Чтобы целевая система могла <em>уже после чтения и получения токена</em>, проверки подписи, иметь возможность определить — нет, этот токен выдавался юзеру из московской подсети и вот такого устройства, а пришли к нам из Зимбабве и фингерпринт не тот; иди-ка ты, человек, принеси нормальный токен.</p>
  <hr />
  <h2 id="X03w">Проблема два: обновление токенов, refresh</h2>
  <p id="fak6">Выданный валидный токен рано или поздно устареет. Это неплохо.<br />То, что он устареет — означает, что нужно будет где-то брать новый.<br />Вот тут возможны вариантики.</p>
  <p id="RH6x">Можно конечно просто ничего не делать. Но. Система-приемник поняла, что токен ей не оч, юзера шлет нафиг. Юзер сам идет в систему-источник, проходит там заново все проверки. И это очень сильно рвёт цепочку взаимодействий, это «авторизация истухла посреди чего-то там», in a middle of something. </p>
  <p id="3WZU">Поэтому часто прикручивают другой механизм: механизм рефрешей. </p>
  <ul id="jw8n">
    <li id="ELpO">Один вариант, когда система-приемник может сама сходить, за юзера, в источник, и передать какой-то ключик, который позволит получить обновленный JWT, без необходимости фоллбека на «полный замес».</li>
    <li id="AqTv">Второй вариант, когда ключика refresh нет у системы-приемника, но есть где-то там у юзера, и общий механизм от лица юзера забирает этот ключик, чтобы JWT с его помощью обновить, и продолжить работу.</li>
  </ul>
  <p id="E1Ag">Нюансики в том, что — получается — мы верим какому-то ключику (?), который позволяет для пользователя получить полноценный валидный JWT. И в этой связи, несет собой <em>те же права и возможности, но и те же риски. Опа.</em> При этом, не защищен криптографически, внутренних данных для проверки себя самого — никаких не содержит, и вообще хрен знает что такое.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="66TH">Здесь проблема в том, как расп-здяйски к рефрешам обычно относятся. </p>
    <p id="59M7">JWT это секурно, даа. А рефреш рядом, который текстовая строка — забирай, отсылай, выписывай себе новый JWT, щедрая душа. </p>
    <p id="iXHo">Или «не себе», как в злонамеренном варианте происходит.</p>
  </section>
  <p id="hpJT"><strong>Как решать</strong>: операции с перевыпуском JWT, как по рефрешам так и по любому другому поводу, должны быть обвешаны проверками, логами, мониторингом и (желательно) не меньшим фингерпринтингом, как описано в «проблеме 1». Не меньшим, а возможно даже большим. </p>
  <ul id="6SX9">
    <li id="qyhr">Знаю реализации, например, когда рефреш выдает токен с заведомо меньшими правами (хочешь нормальный, используй полную схему). </li>
    <li id="e43j">Знаю реализации, где используется «цепочка рефрешей», когда нельзя использовать один рефреш более одного раза, и таким образом ситуация «спёрли» уже явно у кого-то не сработает, и вызовет вопросы. </li>
    <li id="uDq4">Знаю реализации, когда использование рефрешей ограничено не только per user, но еще и для целевой системы (одна система не может дергать рефреш одному юзеру чаще чем X).</li>
  </ul>
  <p id="JwQg">Еще рефреш не должен «жить вечно», иначе мы получаем бесконечный источник валидных токенов. Рефрешнулся, получил JWT, получил новый рефреш, снова рефрешнулся… кстати, как вы собираетесь это проверять?</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="2EKA">Почему нельзя «просто передай старый JWT, мы дадим тебе новый». </p>
    <p id="5nHD">Потому что если его сперли и вам обратно передали, нет вообще никакой дополнительной проверки владением, хоть чем-то, нужен дополнительный кусок паззла — в виде рефреша, а лучше чего-то большего.</p>
  </section>
  <p id="Jvjj">В этой связи также убедитесь, что у вас refresh или его аналоги нигде лишний раз по сети не летают, и наружу не торчат на каждый чих.</p>
  <hr />
  <h2 id="nFzj">Проблема три: отзыв токена per user</h2>
  <p id="Dmbt">Ситуация: юзер получил JWT, пошел с ним в систему-приемник. <br />Система его приняла.</p>
  <p id="9sUl">Дальше мы больше не хотим, чтобы этот юзер по этому токену как-то взаимодействовал. Для простоты — ну, тупо разлогинился.<br />Как вы собираетесь это делать?</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="EExu">Проблема вытекает из автономности и отчуждаемости токенов. Пока токен есть, система-приемник ему верит. Если верить надо перестать, или «можно верить», но надо перестать использовать — без дополнительных телодвижений как она об этом должна узнать? Коллизия.</p>
  </section>
  <p id="fdKX">Из коробки это не решается никак. Из практических вариантов — можно предусмотреть ряд проверок, например на старте работы одноразово, чтобы удаленная система таки сходила в источник, и спросила, не поменялась ли там чего. Это все равно неприятно операционно, лишние походы в сеть итп, но лучше одноразово чем на каждый чих.</p>
  <p id="1FKO">Можно предусмотреть на системе-приемнике выборочные проверки раз в rand (1, X), или проверки раз в квант времени. Токен живет сутки, но раз в 5 минут per user мы все равно будем переспрашивать источник, всё ли там норм вот конкретно с ним. Если на системе-приемнике есть кеш валидных JWT (а чаще всего он есть, так проще), то вот как раз по протуханию локального хеша мы а) перепроверяем криптографию подписи и б) переспрашиваем источник о статусе и об отзыве токена.</p>
  <p id="uPSB">На источнике для этих целей неплохо бы иметь revocation list. Список юзеров, авторизации которых мы больше не верим, по любой причине. Или обратный список, позволяющий узнать, а кому все-таки верить можно. </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="SPfs">Если решать совсем втупую, то per user на системе-источнике можно записать timestamp, с какого момента токены можно считать валидными. </p>
    <p id="MXj4">На ситуации «разлогин» пишем туда текущее время, и всё, что нам принесут с временем выдачи токена раньше указанной проставленной — сразу невалидное, сразу в топку.</p>
  </section>
  <p id="KtA6"><strong>Как решать</strong>: ну, вот описал направления, но это по любому отдельный механизм.</p>
  <p id="jGdM">Можно без него, если у вас JWT живут 1-5 минут, может и пофиг.<br />А может и не пофиг, лишние 5 минут жизни уже заведомо скомпрометированного токена и учетки — вполне позволяют успеть «наворотить дел».</p>
  <hr />
  <h2 id="fbBU">Проблема 4: отзыв токенов в принципе</h2>
  <p id="bW3J">Проблематика та же, что и в предыдущем вопросе (автономный токен считается валидным даже тогда, когда уже вроде бы не должен). Но вопросец пошире: как нам внутри нашей системы предусмотреть знание о том, что этот токен, или даже набор токенов, надо быстренько вывести из использования? Ситуаций несколько. </p>
  <ul id="m7Ko">
    <li id="2hPh">Если мы вдруг хотим перестать доверять юзеру, уже рассмотрели выше. Но у него может быть NN токенов, все валидные, а злоумышленник мог еще каких-то даже наполучать.</li>
    <li id="RfGM">Возможно, мы хотим перестать доверять авторизации не per user, а per audience, сделать невалидными все токены, которые выдавались на какую-то внешнюю конкретную систему. Audience конкретный, юзеров может быть произвольное количество.</li>
    <li id="QrWQ">Возможно, у нас тупо спёрли ключ подписи. Или мы нашли проблему в базовом механизме авторизации у себя, на системе-источнике. Следовательно, всем юзерам с каким-то признаком, и их токенам, мы больше доверять не можем; а в сторонних системах должны оперативно перестать это делать.</li>
  </ul>
  <p id="JDmi"><strong>Как решать</strong>. Ну, мы можем для объема токенов поменять ключ и подпись. Всё, что не пройдет проверку, сразу невалидное. Система-приемник об этом рискует не узнать (у нее закеширован старый ключ подписи), но если систем-приемников ограниченное известное количество, можно пойти и обновить руками. В вашей инфре.</p>
  <p id="SLmy">Но сразу минус: это ни фига не гранулярно. Поменялся ключ — всю юзербазу разлогинило и выкинуло. Где-то это оправданная мера, где-то не очень.</p>
  <p id="1ltj">Для более точного контроля можно использовать KID. Для конкретного токена указано, чем его проверять. Если у системы-приемника нет нужного открытого ключа, надо сходить секурно на master.host/keys/KID и забрать там нужный — а затем проверить. В принципе, вариант. Но вам еще надо указывать не только то, какие ключи <em>бывают валидными</em>, но и явно те, которые <em>стали невалидными</em>, иначе система-приемник будет иметь у себя закешированные, включая старый, и вы ничего так не достигнете.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CFHc">Есть механизм, когда в JWT системой-источником вшивается дополнительное поле, с какого момента у этого юзера в принципе сейчас выдавались валидные ключи. Не NBF у конкретного JWT, а вообще все, касательно всех JWT этого юзера. В предыдущей проблеме описан такой timestamp на бекенде, с аналогичными функциями. </p>
    <p id="AG0Z">Если система-приемник получает хоть один JWT, в котором в заданном поле написано время X, то эта система-приемник уже себе в кеше отмечает, что всё выдавалось что раньше X, для юзера использовать нельзя. </p>
    <p id="WZa0">Даже если придет юзер с валидным токеном, который был выдан ранее — всё, неа, вот конкретному юзеру надо свежее чем X, значит иди-ка ты получай новый.</p>
  </section>
  <p id="ceDM">Это неплохой механизм, тк достаточно несложный в реализации, а позволяет многое. Хотя и не идеальный.</p>
  <p id="9Foh">Можно не писать timestamp, а просто взять какое-то инкрементное возрастающее значение, знать его на системе-источнике per user, и писать внутрь токена. Технически почти ничем не отличается; всё, что получено системой-приемником со значением X, автоматически делает (для нее) невалидным всё полученное/получаемое ранее/позднее, что меньше X.</p>
  <ul id="GX3Q">
    <li id="Hhb4">резкий рост этого значения для одного юзера означает, что у нас идет цепочка разлогинов, и этого юзера (возможно) прямо сейчас ломают или даже сломали, у них race condition по токенам между передаваемыми значениями</li>
    <li id="an6C">резкий рост этого значения для пачки юзеров означает, что-либо одна из систем херово работает с авторизацией (и отправляет всех на перелогин), либо откуда-то утекла пачка валидных токенов</li>
  </ul>
  <p id="lJrr">И то и другое = алярма и повод идти смотреть.</p>
  <hr />
  <h2 id="pLh5">Проблема 5: кривая реализация</h2>
  <p id="ePGe">Для JWT есть ряд библиотек — это неплохо. Плохо то, что реализованы многие из них через жопу. Сторонняя реализация понятия не имеет о конкретно вашем применении и о схеме использования, а «по дефолту» многие штуки реализованы как попало, и это надо проверять. Прямыми руками. И не один раз.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="pADj">Самая популярная грабля — проверьте, что будет, если я руками соберу токен с заданным payload (скопировав его из валидного), и в поле ALG напишу NONE.</p>
    <p id="0XTx">Да, вот так вот просто. Это же валидный кейс, и библиотека о нем в курсе. И она его примет. Ахаха, то есть мяу.</p>
  </section>
  <p id="50cB">Варианты реализации «на хешах» (HS) просто использовать не надо (а надо не забыть отключить). Переключить ALG на хеши и поймать коллизию не то чтоб сильно невозможно, RS-подпись тоже подписывает хеш, чтоб попроще было, а коллизия на двух хешах ловится. Короче, ненужное отключаем.</p>
  <p id="S54l">С эллиптикой надо не использовать одну из заведомо проблемных кривых; свежие версии об этом знают, но вдруг.</p>
  <p id="eGH8">Проверки таймстампов означают, что эти таймстампы не должны принципиально отличаться на системах — как в силу расхождения конфигов, так и в силу «забытых» конвертаций таймзон.</p>
  <p id="0H4p">Если предполагается, что в системе-приемнике пользователь должен мочь нажать «выход», то надо уметь сказать об этом системе-источнику. И конкретный JWT далее не использовать, и старые JWT принудительно сделать неиспользуемыми, хотя бы по отношению к этой системе. Иначе тут же снова прилетит JWT от юзера, а он все еще валидный, вот считай что и не разлогинивался никуда.</p>
  <p id="9SDV">Выданные JWT и рефреши к ним, в системе-источнике, придется и хранить и логировать. Чтобы понимать, что у вас на периметре происходит, чего там за сессии у юзера, куда он ходил, где у него актуальные права итп. Мониторингом этого всего обвешать, тк если у вас у юзера вдруг вместо 1 JWT стала 1000, значит кого-то хакнули, или хотя бы на полпути.</p>
  <p id="VlOA">В общем, проверять придется много.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="oNUk">Еще момент. Убедитесь, что у вас системные административные средства для работы с JWT не полагаются исключительно на этот самый JWT, как на механизм авторизации… понимаете шутку юмора, да? </p>
    <p id="5vQi">Когда что-то пошло не так, и вам надо пойти ковыряться в проблемах безопасности, авторизации и прочего касательно JWT, вы в свои же средства никак не попадете, потому что они используют всё то, что конкретно сейчас не работает. </p>
    <p id="MIcI">Или наоборот, вам что-то поломали касательно JWT — и управление поломанным, чтобы найти концы, также сразу скомпрометировано, потому что больше никаких проверок там не было.</p>
  </section>
  <hr />
  <p id="5lIc">Блок про сравнение пока не знаю, хочу дописать сюда или нет.</p>
  <hr />
  <p id="GRKP">В общем, есть список вопросов, которые надо решать, если вы его используете для проверок доступа. Никто не говорил, что удобно.</p>
  <ul id="aRaY">
    <li id="7mMD">полностью stateless jwt = размеры, сложности с обновлением (неуправляемый кеш)</li>
    <li id="ZfmO">stateful jwt = все равно ходить в какие-то другие системы, перепроверять данные</li>
    <li id="jezi">механизм отзыва надо придумывать</li>
    <li id="fz67">механизмы обновлений надо придумывать, а типовые (refresh) имеют слабости</li>
    <li id="nrTP">все равно должен использоваться совместно с чем-то еще</li>
  </ul>
  <p id="OWiQ">Не надо требовать от технологии того, чего в ней вообще-то не обещали.<br />Просто транспортный механизм для payload, с подписями, не более.</p>
  <p id="qj3A">Пока что так,<br /><strong>Hope that helps</strong>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://cgvictor.ru/edge-cdn-max-flaw</guid><link>https://cgvictor.ru/edge-cdn-max-flaw?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor</link><comments>https://cgvictor.ru/edge-cdn-max-flaw?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cgvictor#comments</comments><dc:creator>cgvictor</dc:creator><title>Открытые ссылки медийки в MAX (про edge CDN)</title><pubDate>Fri, 06 Mar 2026 13:54:19 GMT</pubDate><category>Рецепты</category><description><![CDATA[Как делать правильно. Неправильно — когда медиа-контент мессенджера (социалки) доступен по прямой ссылке, и типа ее никто не знает.
Позволю себе оттоптаться по популярной теме, с решением.]]></description><content:encoded><![CDATA[
  <p id="27qs">Как делать правильно. Неправильно — когда медиа-контент мессенджера (социалки) доступен по прямой ссылке, и типа ее никто не знает.<br />Позволю себе оттоптаться по популярной теме, с решением.</p>
  <hr />
  <p id="iprx">Медиа-хайп вокруг популярного печально известного мессенджера в очередной раз пополнился дыркой, или «дыркой»: хранение и отдача медийки реализована по ссылкам, которые доступны снаружи из открытой сети.</p>
  <p id="qfCe">Ссылка выглядит так: <code>i.oneme.ru/i?&amp;fn=ресайз&amp;r=композитный_хеш</code></p>
  <p id="DY3G">Результат — ну, например, вот такой: <br /><code>https://i.oneme.ru/i?&amp;fn=w_1440&amp;r=BTEFHNxXjmuR0N2Fir9SuMMRpSFWLfO_ieehECYcyBCPMsJPkexaioi5pUNQOIf47xc</code><br />Эта ссылка <a href="https://i.oneme.ru/i?fn=w_1440&r=BTEFHNxXjmuR0N2Fir9SuMMRpSFWLfO_ieehECYcyBCPMsJPkexaioi5pUNQOIf47xc" target="_blank">доступна</a> прямо сейчас, безо всякой авторизации, всему интернету.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="AKmi">Кто-то исходную картинку внутри «защищенного мессенджера» разместил, или переслал. Картинка легла на медиа-сторадж, и отображается (самим мессенджером) по вот такой ссылке. Как-то же ее надо отображать, ну.</p>
  </section>
  <p id="txQ1">С одной стороны, подобрать вот этот самый хеш, без подготовки, достаточно сложно. Хотя и не сказать, что невозможно (об этом позже).</p>
  <p id="b75P">С другой стороны, вся «защита» строится на том, что получить тот самый целевой адрес <em>вроде бы</em> можно только в самом мессенджере. Если тебе картинку переслали, ты его знаешь. Если нет — удачи подобрать.</p>
  <p id="XTAZ"><strong>Так ли это? Нет, не так. Вот эту картинку я же как-то узнал, а?</strong><br />Она точно не моя, мне ее никто не слал, у меня даже того мессенджера нет.</p>
  <hr />
  <p id="sfpz">Проблема общая в том, что любая ссылка в интернете = штука открытая. Интернет так работает. </p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="2dbc">Ссылку, то есть урл запроса, видите вы, видит ваш клиент (мессенджера), это окей. </p>
    <p id="aCvu">Ссылку видят все промежуточные узлы, которые роутят запрос, на любом уровне — да, у нас есть HTTPS шифрующий трафик, но есть и нюансики. </p>
    <p id="X3QO">Готовую ссылку видит ваш браузер — и, например, шлёт «на индексацию», как регулярно делают пидорасы из Гугла и Яндекса. </p>
    <p id="OgGZ">Ссылку видит всё, что в этом браузере живет — все расширения, адблоки, плагины и прочий зоопарк. И так далее.</p>
  </section>
  <p id="3Hlm">То есть, она уже не только «не секретная» — она уже совсем-совсем не секретная. И <strong>ее можно не подбирать, достаточно взять из логов готовую, работающую.</strong></p>
  <ul id="bE4T">
    <li id="6Ihy">С одной стороны, сервис вроде как нигде явно не обещал секретных ссылок.</li>
    <li id="rLET">С другой стороны, переписка кого-то с кем-то в мессенджерах все-таки по привычке воспринимается, как что-то приватное.</li>
  </ul>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="G5Ol">— пришли нюдсы<br />— в максе<br />— больной ублюдок<br /><em>(из чата)</em></p>
  </section>
  <p id="JaU0">Чтобы оценить масштабы бедствия:<br /><a href="https://web.archive.org/web/*/https://i.oneme.ru/i*" target="_blank">https://web.archive.org/web/*/https://i.oneme.ru/i*</a><br /></p>
  <figure id="XcHx" class="m_column">
    <img src="https://img4.teletype.in/files/bc/74/bc74a057-6a87-4e28-8057-56252a252ae0.png" width="1388" />
  </figure>
  <p id="NuyB">Берите любую.</p>
  <hr />
  <p id="hpqj">Не только Махом единым. Такая же, или аналогичная по сути своей схема исторически используется в офигеть каком множестве систем. Чисто так сложилось, просто по инерции. И регулярно оказывается, что открытые всему интернету ссылки — они, <em>вы не поверите, открытые всему интернету</em>. Причем неограниченное время.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yfSq">О чем, например, честно предупреждает гугл-докс по ссылке: «ссылка будет видна всему интернету». Но это же вдуматься надо.</p>
    <p id="4bJb">Вот тут ребята в сеть слили почти миллион клиентских записей, принесли кейс в пример: <a href="https://www.a-tm.co.jp/en/news/44383/" target="_blank">https://www.a-tm.co.jp/en/news/44383/</a></p>
  </section>
  <p id="sJxi">Секретная ссылка с секретным алгоритмом хеша, энтропией, итд итп — <strong>перестает быть секретной, и становится security by obscurity</strong>, когда у злоумышленника уже есть эта ссылка готовая. Ее не надо генерить, вот она, бери. Никаких проблем.</p>
  <hr />
  <p id="o2o3">Техническая проблема под этим всем следующая: edge CDN network.</p>
  <p id="nH14">Сервис не раздает картинки «сам». Объёмы медиа-контента обычно внушительные, он валяется где-то там кучей — и есть отдельная инфра, задача которой просто отдавать контент, не затрагивая логику приложения. То есть — CDN и его хосты, content delivery network.</p>
  <p id="qNs4">CDN не содержит в себе значительного объема бизнес-логики, это неудобно операционно. Его задача — много хранить, и быстро раздавать. Все пред-обработки, <em>включая проверки доступа</em>, ресайзы, варианты, на CDN под каждый запрос делать весьма затратно. Они делаются заранее и генерятся в статическую файло-помойку. Иногда запрашиваются от источника на первом обращении, но все равно потом складываются «под ноги» в кеш.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6zxl">Для того, чтобы отдать статический файлик по урлу/хешу, надо просто поймать урл, убедиться что у нас такой есть, и отдать статику.</p>
    <p id="Z3SX">Для того, чтобы проверить доступ — надо где-то взять всё приложение целиком, там понять чей это контент, кто к нему стучится (аутентификация), какие у нас есть варианты доступа к нему и для кого, принять какое-то решение на этот счет (авторизация), и только потом отдать статику. Или не отдать.</p>
  </section>
  <p id="O3gJ">Разница в нагрузках, геморроях и проверках — в разы, а то и на порядки. А CDN должен быть быстрым, большим и тупым. То есть, техническая сложность.</p>
  <p id="djau">Но это только первая часть проблемы.</p>
  <hr />
  <p id="kqwe">Если у себя держать большую-большую файлопомойку, то эта файлопомойка во-первых стоит эпических <strong>денег</strong> (контент никуда не девается, его становится только больше, косты растут). Во-вторых, этих файлопомоек становится <strong>несколько</strong>.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="12ar">Например, чтобы разнести CDN по регионам, не гонять картиночки оптикой под океаном, из Вирджинии юзеру в Москве. </p>
    <p id="xro3">Чтобы задублировать машинки, обеспечить количественно их параллельность — то есть дает отказоустойчивость, репликацию итп. </p>
    <p id="cBVR">Чтобы расшардить источники медийки «по горячести», например популярных юзеров и каналы со 100500 подписчиков отдавать с одной инфры, а всякую личку и старьё холодное — с другой (поменьше/подешевле).</p>
  </section>
  <p id="KRVl">В-третьих, и это самое веселое, файлопомойки (в силу их тупости, цены и понятности задачи) могут быть вообще <strong>не ваши</strong>. А арендованные. В мире есть куча CDN-сервисов, которые предоставляют CDN как услугу. И вот там есть сотни региональных эндпойнтов, автоматическая репликация, машины размером с боинг и хардами объемом в петабайты, автоматическое управление источником (откуда брать вашу медийку из вашего сервиса, чтобы потом раздать).</p>
  <p id="9HS2">Сотне тупых раздающих CDN-машин категорически насрать, что там за контент, откуда он взялся, и кому там чего можно. Что-то внутри себя они могут, но по очень небольшому списку (потому что все еще должны быть быстрыми, большими и тупыми). <strong>Ходить куда-то к вам в инфру и проверять права доступа — вся эта сетка не будет, при любом раскладе</strong>.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="8wHM">Ну т.е реально, базовый тариф edge Амазона это 120+ региональных площадок, которые ваш контент раздают за вас. </p>
    <p id="rOeu">Медийка Akamai это сраный космолёт на пол-континента, и ей в душе па-ху-ю на суть того, что она раздает. У нее проблемы в экзабайтах измеряются. </p>
    <p id="MRil">Бегать на каждую проверку в ваш сервис, или даже микросервис, никто не будет; ей запрещено, да и просто нечем.</p>
  </section>
  <p id="GAFc">Еще важно отметить в этой связи, что и бегать синхронизироваться (= «что там обновилось») с вашим медиа-источником удаленная CDN-сеть размером с Акамай может, но не обязана — ввиду ее размеров. Первичный запрос — да, будет к вам, будет cache on read, CDN заберет исходник, к себе сложит. Если вы его там у себя поменяли, изменили, что-то еще танцевали — ей пахеру. </p>
  <p id="2QWS">Даже удалять точечно контент там никто не будет, его дешевле хранить «условно вечно», чем бегать синхронизировать состояние каждого кусочка в отдельности. То есть, нюдсы, попавшие на CDN, останутся там навечно — мечта безопасника, практически. Есть полиси по времени жизни кусочков, но с ограничениями.</p>
  <p id="0JKb">** Удобный лайфхак, кстати, у медиа-сервиса VK: если запросить свой собственный архив данных, вам отдадут ссылки на ваши же давно удаленные фоточки, и исходники, реально на CDN присутствующие. Можно слить бекапчик, ностальгии ради.</p>
  <hr />
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YmKS">Подчеркну отдельно, чтобы было понятнее. </p>
    <p id="4nmm">Варианта «<em>а давайте на каждой картиночке за XYZ времени для всех юзеров всего приложения каждый раз полностью и полноценно проверять аутентификацию + авторизацию логикой приложения</em>» — его не существует. </p>
    <p id="2StM">Задача не решается именно таким образом, даже на минимальных нагрузках и объемах. Надо упрощать.</p>
  </section>
  <p id="6hom">Пути решения есть, причем два (простой и правильный, как обычно).</p>
  <p id="NGrn">Первый путь — чисто <strong>на источниках-урлах-хешах </strong>(но не так, как у Макса, а посложнее)</p>
  <p id="bs7d">Второй путь — <strong>на подписывании, и проверке content policy</strong>, когда CDN заранее имеет локально проверяемые правила для каждого юзера, юзер сам ему их приносит.</p>
  <hr />
  <h3 id="HWLV">Путь дешманский</h3>
  <p id="MhuU">Чисто на источниках = означает, что кешированного контента по ссылкам, на CDN, должно стать меньше, и он оттуда должен удаляться совсем. Актуальный — перезапрашиваться заново, с вашего медиа-источника. Если ваш источник такого контента не отдал (уже не отдал), «вечная ссылка с нюдсами» работать уже перестанет, у нее источника нет.</p>
  <p id="SASb">Если CDN тупые, и тупыми останутся, можно попробовать поиграться с политикой кеширования — в смысле, массовой, для всего CDN целиком. Всей сетке говорим, что контент обязан устаревать через, например 3 дня, и в этом случае надо перезапрашивать исходник. Большинство коммерческих CDN такое худо-бедно умеют, правда в ограниченных рамках.</p>
  <p id="ze4x">Если CDN совсем-совсем тупой, и не умеет в удаление никаким образом (так бывает) — можно динамически пересоздавать всю сеть, скриптами. Убивать ноды в CDN целиком, выводить из роутинга насовсем, пересоздавать новые. Да, они будут пустые, будет прогрев кеша и нагрузка на ваш источник — но зато сразу по актуальному состоянию.</p>
  <p id="wxIv"><em>Реализовывать правила per-user таким образом практически невозможно.</em> Потому что CDN все еще отдает контент по ссылке в любом случае, ссылка утекла — здрасти. Всё, чего вы добьетесь, что можете ограничить доступ к источнику на своей стороне — и, например, проверять глобально права доступа хотя бы раз в день/неделю/месяц. Это все еще может быть удобно для глобальных настроек приватности. Ну и для GDPR, вы же помните, что юзерский контент хранить вечно нельзя.</p>
  <p id="jHyu">Если есть возможность, лучше конечно так «простым путем» не делать, и «только ссылкам» не доверять. Но возможности наши разные бывают. Дешманское решение лучше, чем никакого.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D7do">Что «не так» в данном случае с Максом: то, что их ссылки вечные. Если бы они жили ограниченное время, после которого становились недоступны в практическом смысле — даже таким дешманским ходом проблему можно было сильно сгладить. </p>
    <p id="eaab">Борьба с вечностью, таким образом, решается либо удалением контента с кешей (истекло — перезапрашивай, проходи авторизацию заново), либо хешами, привязанными к переменной «времени», time-bound. Срок истек, хеш невалидный, ссылка не сработает.</p>
  </section>
  <p id="XyqO">Важная оговорка: текст написан в марте 2026, рано или поздно они переобуются, переделают. Текст останется, в назидание потомкам.</p>
  <hr />
  <h3 id="mGSj">Борьба с энтропией</h3>
  <p id="TV35">Отдельно напомню, что саму ссылочку тоже надо не иметь <strong>возможности злонамеренно подобрать</strong>. То есть, я вон смотрю на структуру хеша в ссылке Макса, и вижу там 3 конкретных блока. Значит, чисто теоретически, они а) заменяемые б) подбирабельные. Если вы строите любой хеш по предсказуемым, детерминированным данным — <em>например, id юзера</em> — то смысла в таком хеше ровно ноль, он подбирается. То же самое по двум, трем, четырем параметрам: если они детерминированные, вопрос времени.</p>
  <p id="JqEo">Если в хеше «соль», рандомная вставка, но статическая — тоже не оч хорошо, особенно если прям перебором видно, где она живет и на что влияет.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="EA5Q">Время злонамеренного подбора чего-то с CDN вы ограничить «тупо ссылкой» скорее всего не можете. </p>
    <p id="PoFT">Если я, или кто-то, начнет перебирать вам «хешированный урл» с CDN со скоростью = 1000 req/s, то есть 86.4 млн вариантов в день — коммерческая CDN-сетка этого даже не заметит, и алертить вам не будет. У них там масштабы другие. </p>
    <p id="ZQ8y">То есть, светлая идея «добавим в хвост ссылки 6 рандомных символов из ее же md5()», в качестве «неподбираемой вставки», ломается за сколько? 16^6=16.7 млн вариантов, это за 5 часов на 1000 req/s.</p>
  </section>
  <p id="EhB3">Поэтому генерация ссылки, если уж вы делаете решение только на них (с очисткой кешей), должна иметь time-bound параметр. Или несколько. Например, сегодняшний день из даты, по UTC. Таким образом, закешированная ссылка, которую сгенерили позавчера, уже ничего не отдаст ни с CDN (где ее удалили очисткой кеша), ни с медиа-источника (где проверка хеша не пройдет). Авторизованный юзер может запросить и получить новую валидную, посторонний неавторизованный васян из интернетов — не может. </p>
  <p id="8RQk">Ну и логичная оговорка, что вам по дефолту надо будет генерить 2 копии сразу, «за сегодня и за вчера», чтобы на переходе суток через полночь у вас весь контент не офигевал. Тут понятно.</p>
  <p id="rMXI"><strong>Чем более variable источник хеша/ссылки/подписи, тем сложнее его ломать, и тем вам спокойнее спать.</strong> Детерминированных хешей не должно быть, «вечных» не-устаревающих не должно быть.</p>
  <hr />
  <p id="hY4F">Чем плох злонамеренный подбор, не ограниченный по времени. </p>
  <p id="aprV">Вариант 1: представьте, что вы заведомо знаете, что на картинке по ссылке с заданным хешом (который вы пока не знаете), описано что-то очень вам злонамеренно нужное. Например, ключ от кошелька где деньги лежат. Таким образом, вы можете целенаправленно атаковать перебором ровно один урл, с доступной вам скоростью. Ваши 86 млн вариантов в день — вполне себе скорость. Даже если вы потратите месяц на подбор, результат перекроет затраты. А «месяц» или более — ничем не ограничены, если ссылки вечные, и целевая система даже не узнает о хаке.</p>
  <p id="FdlL">Вариант 2: представьте, что у вас есть целевая атака на юзера. Или на чат/группу/сообщество. Вам не нужна конкретная картинка, вам нужны любые картинки — или наловить чего-то секретного, или просто использовать далее в социальной инженерии, шантажировать теми же нюдсами. Хеш композитный, часть «про юзера» в ней вполне известна. Часть «про картинку» тоже можно поймать перебором. Остается только подобрать часть хеша, которую вы не знаете. В хреновых реализациях это (обычно) ломать сильно проще алгоритмически. Время, опять же, не ограничено.</p>
  <p id="h5Qb">Почему сложность «защититься от перебора»: аналогично, чтобы знать, что вот к этому контенту возрос обьем запросов, нужно как-то это посчитать в разрезе одной картинки, среди всех машин CDN (которых могут быть тысячи), и синхронизировать счетчик отказов на лету, чтобы выставить ограничение. Обмен данными и счетчиками на лету, среди миллионов/миллиардов кусков контента на CDN — та еще работёнка. Варианты есть, но операционно дорого.</p>
  <hr />
  <h3 id="kWwd">Путь правильный</h3>
  <p id="KSE7">Какую-то логику поручить CDN-ам, даже коммерческим и чужим, все-таки можно. Обычно ее крайне мало, и она по очень узкому списку. Потому что весь скриптинг и логика резко тормозят отдачу и усложняют сам CDN, портят всю малину вам или поставщику услуги.</p>
  <p id="1jhQ">Но что есть:</p>
  <p id="moql"><strong>Вычисление хешей</strong>. Вы можете поручить CDN-машине <em>самостоятельно посчитать</em> какой-то тупой хеш, и сравнить его с тем, что принесли в запросе (в ссылке). Там, где хеш не совпал — контент не отдавать. Почему хеш: потому что вычисление производится строго на ноде CDN, ей не надо бегать никуда в сеть и в ваши сервисы.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="iYVy">Например, нода должна поймать параметр <code>$h=xxx</code>, у себя вычислить <code>hash (путь_файла + секрет + день_даты)</code>, и только при совпадении <code>h==hash</code> что-то отдать. </p>
    <p id="B0Ko">Это запросто реализуется однострочным скриптом в nginx/lua, либо коммерческие площадки такую логику у себя имеют; но вам, как сервису, придется под нее подстраиваться. </p>
    <p id="Y3R7">Соотв результат тот же, ссылка устаревает за день, но можно не чистить контент (а просто перегенерить ссылку на него, для авторизованного пользователя).</p>
  </section>
  <p id="hK56"><strong>Куки и свойства браузера</strong>. Как правило, ноды CDN торчат в сеть самостоятельно, значит на них можно навесить доменный роутинг (cdn1.yoursite, cdn2.yoursite итп). Это означает, что при обращении юзера на cdn1.yoursite — на CDN — браузер получит всё то, что было ему отдано в cookie для домена *.yoursite. </p>
  <p id="L2zg">Причем, именно в этот браузер, именно этому юзеру. <br />Это уже не ссылка, так просто не скопируешь.</p>
  <p id="jbwt"><em>Опа, у нас появляется механизм для разделения юзеров.</em></p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="rAnC">Конечно, просто записать в cookie «этому всё можно» не очень правильно, и совсем не секурно. </p>
    <p id="8J4o">Но в дешманском варианте можно реализовать бакетинг: когда у вас ворох юзерспейсов, например чатиков с картинками, имеет доменный роутинг CHATID.cdn.yoursite, у CDN настроен wildcard *.cdn.yoursite (и ему пофиг на CHATID), а с базового домена вы выставляете юзерам cookie именно с полным CHATID, который содержит проверяемый ключ — для кусков контента, которые на CDN лежат. </p>
    <p id="zdma">Запрос к другому chatid уже не передаст настройку от предыдущего/соседнего, хотя все запросы придут все равно на один и тот же CDN.</p>
  </section>
  <p id="xsTZ">Но это вяло и уныло. </p>
  <p id="dKxx">Может, вообще запишем в куку <strong>права целиком?</strong></p>
  <p id="ZX52">Это мы только что придумали JWT. Который содержит в себе открытым текстом какую-то инфу, обычно про пользователя, и что ему можно (роли, например).</p>
  <p id="JtTd">Рядом с инфой валяется <strong>алгоритмическая подпись payload</strong>-инфы, обычно асимметричного алгоритма. Открытым ключом можно только проверить подпись (подписать нельзя).</p>
  <p id="Ovxk">Соответственно, если у нас есть переданный (в cookie) кусок данных «чо можно», и есть возможность убедиться, что его туда поставил именно владелец ключа подписи (асинхронная криптография) — мы можем прямо на ноде принять какое-то решение по доступу, потому что все исходные данные у нас в руках. Бегать в родительскую систему не надо.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6dLi">Вот это уже вариант, вполне себе. Ограничение будет только в том, что в cookie и прочий JWT сильно много данных не запихаешь, более 2Кб я бы не рассчитывал. </p>
    <p id="7SxZ">UPD: про JWT, и детали и проблемки вынес сюда: <a href="https://cgvictor.ru/jwt-tension" target="_blank">что не так с JWT</a></p>
    <p id="aHNo">Для ролевых проверок, по ограниченному списку — сгодится, а в системах типа мессенджера, где ворох источников, юзеров, каналов, бакетов и настроек — уже начинается неудобно.</p>
  </section>
  <p id="9EU9">Развиваем идею дальше. </p>
  <p id="ugzk">А что если мы совместим идею врЕменного хеша, как выше, с идеей подписывания правил доступа односторонним ключом?</p>
  <p id="eZSX">Это мы уже придумали <strong>content policy</strong>, как у больших. </p>
  <p id="gjv1">Мы можем в родительской системе написать правила прям явно: <code>{файл, срок_доступа, юзер/роль}</code>, и подписать асимметричной криптографией, положить <code>подпись</code> рядышком. Эта инфа сама по себе не секретная, как и ее подпись — просто пихаем их прямо в ссылку. <br />Вторым шагом мы в cookie для CDN, уже конкретному юзеру и его браузеру, пишем, что это вот такой-то <code>{юзер/роль}</code>, и тоже рядом генерим и кладем <code>подпись</code>. </p>
  <p id="q2Vz">Таким образом, задача проверки сводится к чему:<br />— взять правила из ссылки, проверить подпись, взять юзера из cookie-заголовка, проверить подпись, и сравнить одно с другим. И с календарным временем.</p>
  <p id="UKUa">И вот это уже офигенный механизм, который может много-много чего.</p>
  <p id="gua8">У больших провайдеров он в том или ином виде есть. В смысле сейчас есть, штука появилась недавно. Но надо курить их доки, у всех свои детали и погремушки.</p>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Cbm2">Европейскому Amazon когда-то (2019) лично я показывал пальцем, как это должно работать — понимаешь, внёс кусочек вклада своего опять, в мировые интернеты.</p>
    <p id="0gjn">У них просто не было тогда, был какой-то тестово-пилотный вариант, а у нас пригорела жопа и стало срочно ннада.</p>
  </section>
  <p id="OkbO">Проверка асимметричной криптографии тоже штука не самая дешевая, но все-таки лучше (для коммерческой конторы) когда к тебе не бегают юзера со своим креативом, а когда ты сам родил предсказуемый механизм и сказал «во, пользуйтесь». Лишь бы ключ для проверки подписи под ногами на CDN валялся — и то, только открытый, потому что закрытый где-то там у автора контента в его системе живёт, он нам нафиг не нужен. Секурно.</p>
  <p id="DYzx">Из последнего варианта с content policy уже можно накурить-накрутить себе что-то свое, произвольной развесистости.</p>
  <hr />
  <p id="r7Y0">Занудно скажу, что подписанные cookie про юзера из данного примера, которые полетят на CDN и заставят работать механизм проверки content policy, тоже различными способами воруются. Браузером, расширениями, mitm, проксёй, трояном итд итп. </p>
  <p id="22IY">Но если у злоумышленника есть возможность спереть целиком cookie и даже весь identity, а сервисы ваши им слепо доверяют — это уже другая беда, и несколько другой вектор атаки. Заведомо посложнее.</p>
  <p id="cDFR">Почему защищаться теперь надо во многих местах, и сразу несколькими слоёными механизмами одновременно — <a href="https://teletype.in/@cgvictor/already-hacked" target="_blank">писал тут</a>.</p>
  <hr />
  <h3 id="daiy">WAF</h3>
  <p id="QMo5">Несложно заметить, что на том же принципе и механизме реализуется и web application firewall практически любого характера. </p>
  <ul id="jMkr">
    <li id="kqrK">Есть у юзера подписанный клочок данных, с нашей серверной подписью «этот = нормальный» и валидным временем — даем доступ к целевой системе.</li>
    <li id="ySw3">Нет валидного такого куска данных — заворачиваем на проверки, авторизации, пейволлы, и что вам там в жизни потребуется. Если всё окей, выставляем подписанный пащпорт «этот = нормальный».</li>
  </ul>
  <hr />
  <p id="G5Yd">Пользуйтесь, известные костыли — понятные костыли.</p>
  <p id="DubE"><strong>Hope that helps.</strong></p>
  <hr />
  <hr />
  <p id="43TA">UPD, добавлено позже: я намеренно не писал о куче готовых реализаций на площадках — потому что я хз, что вы там у себя в инфре используете — но окей, вот например как «дешманский путь» на урлах и подписях реализован</p>
  <ul id="Je4T">
    <li id="z0WL">в амазоне <a href="https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html#examples" target="_blank">https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html#examples</a></li>
    <li id="GEME">в minio (presigned url) <a href="https://docs.min.io/enterprise/aistor-object-store/reference/cli/mc-share/mc-share-download/" target="_blank">https://docs.min.io/enterprise/aistor-object-store/reference/cli/mc-share/mc-share-download/</a></li>
  </ul>

]]></content:encoded></item></channel></rss>