К Claude у меня подключены Figma, таск-трекер, база знаний, аналитика канала. Я не написал ни строчки кода для интеграции — просто поставил четыре сервера, и ассистент сам разобрался, что умеет каждый.
Сижу, смотрю на это и думаю: а почему оно вообще работает? Раньше так было нельзя.
Чтобы прикрутить чужой сервис к своей программе, ты открываешь доку API и руками пишешь клиент. Вот эндпоинт, вот поля, вот так авторизуйся. Под каждый сервис — заново. Сто программ, сто сервисов — и кто-то живой клеит десять тысяч интеграций.
Вот это и ломает MCP (Model Context Protocol, придумали в Anthropic в конце 2024).
Что это по-простому
Общий разъём между ИИ-приложением и сервисами. Как USB-C: один протокол, втыкаешь что угодно.
Участников трое. Хост — само приложение (Claude, IDE, мой движок канала). Клиент сидит внутри хоста, связь один-на-один с сервером. Сервер — обёртка над сервисом, та самая Figma или трекер. Подробности на схеме.
Что под капотом
Да почти ничего нового. Транспорт:
Сервер отдаёт три типа штук — смотря кто командует вызовом:
А теперь самое сочное
Когда клиент цепляется к серверу, он первым делом спрашивает: «ты что умеешь?» И сервер отвечает списком инструментов — с описаниями на человеческом языке. Не в доке для разработчика. Сам, в рантайме. И читает их не человек, а модель.
Вот тут весь фокус. Обычный API писали под код. Код дубовый и предсказуемый: ему один раз зашили доку — и он знает наперёд, какой эндпоинт дёрнуть и в каком порядке. А MCP пишут под модель. А она тупит и решает на ходу. Поэтому ей надо, чтобы сервер сам по-человечески рассказал, что умеет — иначе не сообразит, какой инструмент к месту.
(на картинках это и есть «детерминированный» и «недетерминированный потребитель» — не пугайтесь слов: код знает заранее, модель прикидывает по ситуации)
А теперь посчитаем, в чём кайф. Сто программ, сто сервисов. Раньше — десять тысяч интеграций руками. С MCP — двести: написал сервер раз — поймёт любой клиент, написал клиент — подхватит любой сервер. (В фирме клиентов два-три, но суть та же: складываем, а не умножаем.) Руками под каждую пару клеить не надо.
Но не бесплатно
За то, что потребитель «думает сам», ты платишь. Описания всех инструментов висят в контексте модели: навешал тридцать тулов — половина окна забита, а ты ещё ничего не сделал. Плюс модель может выбрать не тот инструмент или дёрнуть лишнее — а если в данные с сервера подсунули вредный текст, она послушает его, а не тебя (привет, prompt injection). Поэтому на важных действиях — подтверждение, урезанные права, человек в цепочке. И ещё авторизация — отдельная морока: локально серверу всё равно, он под боком, а по HTTP будь добр нормальный OAuth — он же реальные системы дёргать будет.
Итого
MCP — никакой не новый API. Это старый API, которому переписали инструкцию: теперь её читает не кодер, а модель — сама смотрит, что умеет сервер, и сама решает, что дёрнуть.
Провод тот же. Поменялся только тот, кто его читает.
И вот что меня цепляет. Десять лет интеграционные аналитики писали ТЗ под каждый сервис руками — «дёрни
А вы бы что подключили к ассистенту первым? Накидайте, к чему руки чешутся прикрутить.
@analyst_exe | https://analystexe.ru/articles/mcp-vs-api
Сижу, смотрю на это и думаю: а почему оно вообще работает? Раньше так было нельзя.
Чтобы прикрутить чужой сервис к своей программе, ты открываешь доку API и руками пишешь клиент. Вот эндпоинт, вот поля, вот так авторизуйся. Под каждый сервис — заново. Сто программ, сто сервисов — и кто-то живой клеит десять тысяч интеграций.
Вот это и ломает MCP (Model Context Protocol, придумали в Anthropic в конце 2024).
Что это по-простому
Общий разъём между ИИ-приложением и сервисами. Как USB-C: один протокол, втыкаешь что угодно.
Участников трое. Хост — само приложение (Claude, IDE, мой движок канала). Клиент сидит внутри хоста, связь один-на-один с сервером. Сервер — обёртка над сервисом, та самая Figma или трекер. Подробности на схеме.
Что под капотом
Да почти ничего нового. Транспорт:
stdio (сервер — отдельная программа рядом, общаются через ввод-вывод) или HTTP, если сервер удалённый. Сообщения — по JSON-RPC. По проводу тот же текст, что у REST-сервиса, только устроен иначе: не «дёрни ресурс по адресу», а «вызови вот этот метод» (RPC, удалённый вызов процедуры). Мелочь, но наш разрабский ревьюер придерётся — говорю как есть.Сервер отдаёт три типа штук — смотря кто командует вызовом:
tools (действия, решает модель), resources (данные на чтение, даёт приложение — у меня та же аналитика канала), prompts (заготовки, зовёт человек). Дальше по делу — только tools.А теперь самое сочное
Когда клиент цепляется к серверу, он первым делом спрашивает: «ты что умеешь?» И сервер отвечает списком инструментов — с описаниями на человеческом языке. Не в доке для разработчика. Сам, в рантайме. И читает их не человек, а модель.
Вот тут весь фокус. Обычный API писали под код. Код дубовый и предсказуемый: ему один раз зашили доку — и он знает наперёд, какой эндпоинт дёрнуть и в каком порядке. А MCP пишут под модель. А она тупит и решает на ходу. Поэтому ей надо, чтобы сервер сам по-человечески рассказал, что умеет — иначе не сообразит, какой инструмент к месту.
(на картинках это и есть «детерминированный» и «недетерминированный потребитель» — не пугайтесь слов: код знает заранее, модель прикидывает по ситуации)
А теперь посчитаем, в чём кайф. Сто программ, сто сервисов. Раньше — десять тысяч интеграций руками. С MCP — двести: написал сервер раз — поймёт любой клиент, написал клиент — подхватит любой сервер. (В фирме клиентов два-три, но суть та же: складываем, а не умножаем.) Руками под каждую пару клеить не надо.
Но не бесплатно
За то, что потребитель «думает сам», ты платишь. Описания всех инструментов висят в контексте модели: навешал тридцать тулов — половина окна забита, а ты ещё ничего не сделал. Плюс модель может выбрать не тот инструмент или дёрнуть лишнее — а если в данные с сервера подсунули вредный текст, она послушает его, а не тебя (привет, prompt injection). Поэтому на важных действиях — подтверждение, урезанные права, человек в цепочке. И ещё авторизация — отдельная морока: локально серверу всё равно, он под боком, а по HTTP будь добр нормальный OAuth — он же реальные системы дёргать будет.
Итого
MCP — никакой не новый API. Это старый API, которому переписали инструкцию: теперь её читает не кодер, а модель — сама смотрит, что умеет сервер, и сама решает, что дёрнуть.
Провод тот же. Поменялся только тот, кто его читает.
И вот что меня цепляет. Десять лет интеграционные аналитики писали ТЗ под каждый сервис руками — «дёрни
GET /orders, поля такие-то». Вот эта часть обнуляется. Не вся: описания инструментов и guardrails (подтверждения, права) всё равно кто-то пишет — мы же. Но «клеить руками под каждую пару» уходит. Вопрос не «учить или нет», а «успеть, пока MCP не стал базой как SQL». Хотя, может, я разогнался — спорьте.А вы бы что подключили к ассистенту первым? Накидайте, к чему руки чешутся прикрутить.
@analyst_exe | https://analystexe.ru/articles/mcp-vs-api
👍2🔥2
Forwarded from Архитектура, Процессы и котики
🔥 ВЕБИНАР STORM MCP+AI
Сегодня. 17:00 МСК
Вас уже почти 2000, поэтому регистрацию закрываем через 15-20 заявок, чтобы не было проблем с трансляцией.
В прямом эфире соберём BPMN-диаграмму за минуты - через MCP+AI прямо в Stormbpmn. ТЗ возьмём прямо у вас: напишите идею в чат вебинара - её и будем моделировать.
⚡Никаких заготовок и «отрепетированных кейсов».
Результат увидите сами.
Боитесь, что ничего не поймёте, если в AI "не шарите"? Зря.
Быстро погрузим в базу: что такое LLM, как она вообще думает, при чём тут MCP и почему это меняет работу аналитика. Доступно объясним и тем, кто уже "игрался" с ChatGPT, и тем, кто впервые услышит слово промпт.
После вебинара спорить будете не «AI или классика», а «какую часть работы доверить ИИ, а что оставить себе». Это другой разговор - и мы хотим, чтобы вы вели его одними из первых.
👉 Зарегистрироваться
До встречи в эфире 👋
Сегодня. 17:00 МСК
Вас уже почти 2000, поэтому регистрацию закрываем через 15-20 заявок, чтобы не было проблем с трансляцией.
В прямом эфире соберём BPMN-диаграмму за минуты - через MCP+AI прямо в Stormbpmn. ТЗ возьмём прямо у вас: напишите идею в чат вебинара - её и будем моделировать.
⚡Никаких заготовок и «отрепетированных кейсов».
Результат увидите сами.
Боитесь, что ничего не поймёте, если в AI "не шарите"? Зря.
Быстро погрузим в базу: что такое LLM, как она вообще думает, при чём тут MCP и почему это меняет работу аналитика. Доступно объясним и тем, кто уже "игрался" с ChatGPT, и тем, кто впервые услышит слово промпт.
После вебинара спорить будете не «AI или классика», а «какую часть работы доверить ИИ, а что оставить себе». Это другой разговор - и мы хотим, чтобы вы вели его одними из первых.
👉 Зарегистрироваться
До встречи в эфире 👋
❤2🤔2
https://www.youtube.com/live/PSHS8BGafw8
ПОШЛА ЖАРА
ПОШЛА ЖАРА
YouTube
Вебинар 28.05 BPMN моделирование через STORM MCP+AI
Сегодня в прямом эфире разбираем, как связка LLM + MCP + платформа Stormbpmn сокращает цикл BPMN-моделирования с нескольких дней до 15 минут — и как этим начать пользоваться без боли с безопасностью и доступами.
⏱ ЧТО В ЭФИРЕ:
• С нуля: что такое LLM,…
⏱ ЧТО В ЭФИРЕ:
• С нуля: что такое LLM,…
❤4
Помните, я грозился сделать тренажёры и довести методичку до ума? Вот, отчитываюсь. Пилю это по вечерам и выходным, под пивко — так что не молниеносно, но дело идёт.
🔸 Методичка больше не про «что такое API». Почти в каждую статью добавил блок «как это спрашивают на собесе»: реальные вопросы и то, что в ответе отличает джуна от мидла. И там, где раньше было только «как сделать красиво», теперь написано, чем за это платишь — у каждого решения есть цена, и я перестал про неё молчать. По такому реально готовиться к собесу, а не наизусть долбить определения.
🔸 Новая статья — аналитический дата-поток. Давно мозолила дыра: откуда вообще на дашборде берутся цифры. Как клик доезжает до отчёта, почему нельзя гонять аналитику прямо на боевой базе, чем ETL отличается от ELT, почему продуктовая выручка и финансовая вечно не бьются друг с другом. Все этим пользуются каждый день, а объяснить целиком — попробуй.
🔸 И тренажёры — те самые, обещанные. Даже говорить ниче не буду. Идите и смотрите.
Чтоб не на словах: прогнал всё через злых критиков — преподов и практиков. Где наврал или недосказал — переделал. Три статьи вылизал до эталона, остальные (а их под полсотни) тоже крепкие — просто без финального блеска.
Всё открыто и бесплатно:
📚 методичка → analystexe.ru/materials
🎮 тренажёры → analystexe.ru/games
Залетайте, ломайте. Где косяк или какой темы не хватает — пишите в комменты, чиню и дописываю оперативно.
@analyst_exe
🔸 Методичка больше не про «что такое API». Почти в каждую статью добавил блок «как это спрашивают на собесе»: реальные вопросы и то, что в ответе отличает джуна от мидла. И там, где раньше было только «как сделать красиво», теперь написано, чем за это платишь — у каждого решения есть цена, и я перестал про неё молчать. По такому реально готовиться к собесу, а не наизусть долбить определения.
🔸 Новая статья — аналитический дата-поток. Давно мозолила дыра: откуда вообще на дашборде берутся цифры. Как клик доезжает до отчёта, почему нельзя гонять аналитику прямо на боевой базе, чем ETL отличается от ELT, почему продуктовая выручка и финансовая вечно не бьются друг с другом. Все этим пользуются каждый день, а объяснить целиком — попробуй.
🔸 И тренажёры — те самые, обещанные. Даже говорить ниче не буду. Идите и смотрите.
Чтоб не на словах: прогнал всё через злых критиков — преподов и практиков. Где наврал или недосказал — переделал. Три статьи вылизал до эталона, остальные (а их под полсотни) тоже крепкие — просто без финального блеска.
Всё открыто и бесплатно:
📚 методичка → analystexe.ru/materials
🎮 тренажёры → analystexe.ru/games
Залетайте, ломайте. Где косяк или какой темы не хватает — пишите в комменты, чиню и дописываю оперативно.
@analyst_exe
❤10🔥6🤩1
JSON никто не придумывал. Его, по словам автора, просто нашли — лежал внутри JavaScript и ждал.
Звучит как понты, но это буквально так. Дуглас Крокфорд в районе 2001-го (компания State Software) не сочинял новый формат. Он взял синтаксис, которым в JS уже описывали объект — фигурные скобки, ключ-значение — и сказал: вот этим и будем обмениваться данными. Зарегистрировал json.org, описал на одной страничке. Всё.
А теперь зачем это вообще понадобилось.
Тогда правил XML
Начало нулевых. Данные между браузером и сервером гоняли в XML. Штука мощная, спору нет: схемы, валидация, namespace'ы. Но для «отдай мне юзера с именем и почтой» это как забивать гвоздь отбойным молотком.
Открывающий тег, закрывающий тег — по два на каждое поле. Половина байтов это </вот\_это\_вот>. Чтобы прочитать — тащи парсер, ковыряй DOM, доставай значения по узлам, не забудь про схему и namespace. Возни много, данных мало. Перебор для простого обмена.
Перелом — AJAX
2005-й, Джесси Джеймс Гарретт вводит слово AJAX. Идея: браузер дёргает сервер в фоне, без перезагрузки страницы. Тогда это была магия — карты, которые тянутся мышкой, подсказки в поиске на лету.
И вот тут XML посыпался. Браузер на JavaScript, сервер ему шлёт XML — а чтобы разобрать, опять DOM, опять руками.
А JSON? Он же синтаксис самого JavaScript. Пришёл ответ — и на выходе сразу готовый объект, разбирать нечего. Родное. (Поначалу его вообще скармливали eval() — да, исполняли как код, дыра жуткая; потом одумались и сделали безопасный JSON.parse().)
С этого момента всё.
Чем взял
Горстка типов, и никаких церемоний. Объект, массив, строка, число, true/false/null. Шесть штук. Человек читает глазами без тулзы, машина парсит влёт. Учить нечего — открыл и понял.
Дальше его просто причесали комитеты: RFC 4627 → ECMA-404 → RFC 8259 / STD 90 (2017, финал). Скучная часть, но без неё формат не стал бы стандартом.
Кстати, забавное. Крокфорд впихнул в лицензию пункт: «The Software shall be used for Good, not Evil» — софт использовать во благо, не во зло. И понеслось: юристы крупных контор хватались за голову, а одна на полном серьёзе попросила письменное разрешение «использовать во зло». Он разрешил.
Но не всё гладко
JSON выехал на минимализме — и тем же местом огребает. Чего в нём нет:
— Комментарии. Никаких. Хочешь пометку в конфиге — а некуда.
— Даты и бинарь. Нет таких типов. Дата едет строкой, и каждый парсит как хочет.
— И главная подстава — числа. Сам стандарт точность не ограничивает, но почти все реализации (привет, JavaScript) суют число в float64. И целый id больше 2^53 (\~9 квадриллионов — туда дорастают банковские счётчики, телеком, 64-битные Snowflake ID) теряет точность молча. Послал 1234567890123456789 — на той стороне прилетело что-то рядом, и никто не ругнулся. Кто-то умеет тянуть аккуратно (BigInt в JS, UseNumber в Go), но самый надёжный межъязыковой костыль — гнать большой id строкой, в кавычках. Кто не знал — ловил баг, который «на моих данных не воспроизводится».
Схема? JSON Schema — вообще сторонняя спека, приехала позже и сбоку, в стандарт не входит. Запятую в конце списка (trailing comma) тоже нельзя — прод падал и не на таком.
Итого
JSON победил XML не потому, что мощнее. Наоборот — он слабее. XML мог всё, но за всё драл. JSON умел мало, зато не выносил мозг.
Короче, выехал не самый мощный, а самый ненапряжный. Как-то так))
Мне тут понравилось копать-ковырять в историю инструментов. Ну, чтобы получше понимать, почему так. Ну кто вам об этом расскажет, если не я?
❤️ - если продолжать исторические справки
@analyst_exe
Звучит как понты, но это буквально так. Дуглас Крокфорд в районе 2001-го (компания State Software) не сочинял новый формат. Он взял синтаксис, которым в JS уже описывали объект — фигурные скобки, ключ-значение — и сказал: вот этим и будем обмениваться данными. Зарегистрировал json.org, описал на одной страничке. Всё.
А теперь зачем это вообще понадобилось.
Тогда правил XML
Начало нулевых. Данные между браузером и сервером гоняли в XML. Штука мощная, спору нет: схемы, валидация, namespace'ы. Но для «отдай мне юзера с именем и почтой» это как забивать гвоздь отбойным молотком.
Открывающий тег, закрывающий тег — по два на каждое поле. Половина байтов это </вот\_это\_вот>. Чтобы прочитать — тащи парсер, ковыряй DOM, доставай значения по узлам, не забудь про схему и namespace. Возни много, данных мало. Перебор для простого обмена.
Перелом — AJAX
2005-й, Джесси Джеймс Гарретт вводит слово AJAX. Идея: браузер дёргает сервер в фоне, без перезагрузки страницы. Тогда это была магия — карты, которые тянутся мышкой, подсказки в поиске на лету.
И вот тут XML посыпался. Браузер на JavaScript, сервер ему шлёт XML — а чтобы разобрать, опять DOM, опять руками.
А JSON? Он же синтаксис самого JavaScript. Пришёл ответ — и на выходе сразу готовый объект, разбирать нечего. Родное. (Поначалу его вообще скармливали eval() — да, исполняли как код, дыра жуткая; потом одумались и сделали безопасный JSON.parse().)
С этого момента всё.
Чем взял
Горстка типов, и никаких церемоний. Объект, массив, строка, число, true/false/null. Шесть штук. Человек читает глазами без тулзы, машина парсит влёт. Учить нечего — открыл и понял.
Дальше его просто причесали комитеты: RFC 4627 → ECMA-404 → RFC 8259 / STD 90 (2017, финал). Скучная часть, но без неё формат не стал бы стандартом.
Кстати, забавное. Крокфорд впихнул в лицензию пункт: «The Software shall be used for Good, not Evil» — софт использовать во благо, не во зло. И понеслось: юристы крупных контор хватались за голову, а одна на полном серьёзе попросила письменное разрешение «использовать во зло». Он разрешил.
Но не всё гладко
JSON выехал на минимализме — и тем же местом огребает. Чего в нём нет:
— Комментарии. Никаких. Хочешь пометку в конфиге — а некуда.
— Даты и бинарь. Нет таких типов. Дата едет строкой, и каждый парсит как хочет.
— И главная подстава — числа. Сам стандарт точность не ограничивает, но почти все реализации (привет, JavaScript) суют число в float64. И целый id больше 2^53 (\~9 квадриллионов — туда дорастают банковские счётчики, телеком, 64-битные Snowflake ID) теряет точность молча. Послал 1234567890123456789 — на той стороне прилетело что-то рядом, и никто не ругнулся. Кто-то умеет тянуть аккуратно (BigInt в JS, UseNumber в Go), но самый надёжный межъязыковой костыль — гнать большой id строкой, в кавычках. Кто не знал — ловил баг, который «на моих данных не воспроизводится».
Схема? JSON Schema — вообще сторонняя спека, приехала позже и сбоку, в стандарт не входит. Запятую в конце списка (trailing comma) тоже нельзя — прод падал и не на таком.
Итого
JSON победил XML не потому, что мощнее. Наоборот — он слабее. XML мог всё, но за всё драл. JSON умел мало, зато не выносил мозг.
Короче, выехал не самый мощный, а самый ненапряжный. Как-то так))
Мне тут понравилось копать-ковырять в историю инструментов. Ну, чтобы получше понимать, почему так. Ну кто вам об этом расскажет, если не я?
❤️ - если продолжать исторические справки
@analyst_exe
❤11
Формат, на котором сейчас написан почти весь интернет — порядка 98% страниц — набросали ручкой на салфетке в придорожной закусочной. За ужином. И в ту же ночь запустили.
Сентябрь 1992-го, Нью-Джерси. Кен Томпсон и Роб Пайк (те самые, из Bell Labs, делали Unix и Plan 9) сидят в дайнере. Томпсон берёт подложку из-под тарелки и рисует схему кодирования. Это UTF-8. Ночью дописали в коде — и оно поехало. Салфетку, конечно, никто не догадался сохранить — артефакт на миллиард уехал в мусорку с тарелками.
А теперь зачем это понадобилось.
Что было до
Был ASCII. 128 символов — латиница, цифры, знаки препинания и управляющие (перевод строки, табуляция, тот самый нулевой байт). Влезает в 7 бит, всем хорошо. Ровно до тех пор, пока текст на английском.
Кириллица, японский, греческий — для них в ASCII пусто. Стали лепить свои 8-битные кодировки: KOI-8 и Windows-1251 под русский, Latin-1 под Европу, Shift-JIS под японский. Десятки таблиц. И во всех один и тот же байт значит разную букву.
Открываешь письмо — а там «Ïðèâåò». Это не сломанный файл. Это твой «Привет», записанный в Windows-1251 и прочитанный как западный Latin-1: байты те же, таблица другая. Кракозябры — отсюда. Все мы это ловили: то в письме, то в кривой выгрузке из старой базы.
Попробовали починить — придумали Unicode. Первая версия, UCS-2: дай каждому символу ровно 16 бит (два байта), и хватит на всех. Звучит логично. По факту — три проблемы, одна другой больнее. ASCII перестал работать (латинская буква теперь два байта, старый софт давится). Текст распух вдвое. И 65 536 ячеек кончились — одни китайцы с японцами выбрали их под завязку.
Тупик. Зоопарк кодировок есть, замены нет.
Что придумали на салфетке
UTF-8 зашёл иначе. Вопрос не «сколько бит на символ». Вопрос — как ужиться с тем, что уже написано. Отсюда переменная длина: 1–4 байта на символ.
И вот тут кайф:
🔸 Обратная совместимость. Все 128 символов ASCII кодируются одним байтом, как раньше — байт в байт. Любой ASCII-файл за прошлые 30 лет уже валидный UTF-8. Старый софт ничего не заметил.
🔸 Самосинхронизация. По любому байту видно — это начало символа или хвост. Прыгнул в середину потока, поймал ближайшее начало, поехал. Потерялся байт — рассыпался один символ, а не весь текст после него.
🔸 Сортировка по байтам = правильный алфавитный порядок. Без приседаний.
🔸 Нет нулевых байтов внутри символов. В C строка кончается на нулевом байте, и весь сишный мир на этом стоит. UTF-8 нулей внутрь не суёт — строки не рвутся.
Сложи всё вместе — он не ломает старое. Просто ложится сверху. Поэтому и расползся: переходить не больно.
Но не бесплатно
Только не подумай, что халява. За переменную длину тоже платишь. «N-й символ» больше не равен «N-й байт» — прыгнуть к 50-му за раз нельзя, идёшь с начала и считаешь.
Дальше — вес. Латиница 1 байт, кириллица 2, иероглифы 3. За совместимость с ASCII по байтам платят все, кто пишет не латиницей.
И исторический грабли — overlong-кодирование: один символ можно было записать длиннее, чем нужно. Казалось мелочью — пока через это не полезли мимо проверок безопасности: закодируешь / хитро, фильтр не увидел, а система прочитала. Позже залатали, объявив такие формы невалидными.
Ну и 16-битная идея не умерла: её подлатали суррогатными парами и назвали UTF-16 — на нём до сих пор сидят Windows и Java. Но это уже костыль поверх, а не победа.
Зачем это аналитику
Проблему, об которую индустрия билась лет двадцать, два инженера закрыли за ужином. UCS-2 был чище и правильнее — а выиграл формат, который ужился со всем старым барахлом.
И вы ровно это решаете каждый раз, когда садитесь за новую версию API или схему БД: запилить красиво с нуля и сломать совместимость — или натянуть новое поверх старья. UTF-8 намекает, что второе чаще выживает.
А вы какие кодировки в дикой природе ещё застали? Кто чинил «Ïðèâåò» в выгрузке руками — отзовитесь 🙂
@analyst_exe
Сентябрь 1992-го, Нью-Джерси. Кен Томпсон и Роб Пайк (те самые, из Bell Labs, делали Unix и Plan 9) сидят в дайнере. Томпсон берёт подложку из-под тарелки и рисует схему кодирования. Это UTF-8. Ночью дописали в коде — и оно поехало. Салфетку, конечно, никто не догадался сохранить — артефакт на миллиард уехал в мусорку с тарелками.
А теперь зачем это понадобилось.
Что было до
Был ASCII. 128 символов — латиница, цифры, знаки препинания и управляющие (перевод строки, табуляция, тот самый нулевой байт). Влезает в 7 бит, всем хорошо. Ровно до тех пор, пока текст на английском.
Кириллица, японский, греческий — для них в ASCII пусто. Стали лепить свои 8-битные кодировки: KOI-8 и Windows-1251 под русский, Latin-1 под Европу, Shift-JIS под японский. Десятки таблиц. И во всех один и тот же байт значит разную букву.
Открываешь письмо — а там «Ïðèâåò». Это не сломанный файл. Это твой «Привет», записанный в Windows-1251 и прочитанный как западный Latin-1: байты те же, таблица другая. Кракозябры — отсюда. Все мы это ловили: то в письме, то в кривой выгрузке из старой базы.
Попробовали починить — придумали Unicode. Первая версия, UCS-2: дай каждому символу ровно 16 бит (два байта), и хватит на всех. Звучит логично. По факту — три проблемы, одна другой больнее. ASCII перестал работать (латинская буква теперь два байта, старый софт давится). Текст распух вдвое. И 65 536 ячеек кончились — одни китайцы с японцами выбрали их под завязку.
Тупик. Зоопарк кодировок есть, замены нет.
Что придумали на салфетке
UTF-8 зашёл иначе. Вопрос не «сколько бит на символ». Вопрос — как ужиться с тем, что уже написано. Отсюда переменная длина: 1–4 байта на символ.
И вот тут кайф:
🔸 Обратная совместимость. Все 128 символов ASCII кодируются одним байтом, как раньше — байт в байт. Любой ASCII-файл за прошлые 30 лет уже валидный UTF-8. Старый софт ничего не заметил.
🔸 Самосинхронизация. По любому байту видно — это начало символа или хвост. Прыгнул в середину потока, поймал ближайшее начало, поехал. Потерялся байт — рассыпался один символ, а не весь текст после него.
🔸 Сортировка по байтам = правильный алфавитный порядок. Без приседаний.
🔸 Нет нулевых байтов внутри символов. В C строка кончается на нулевом байте, и весь сишный мир на этом стоит. UTF-8 нулей внутрь не суёт — строки не рвутся.
Сложи всё вместе — он не ломает старое. Просто ложится сверху. Поэтому и расползся: переходить не больно.
Но не бесплатно
Только не подумай, что халява. За переменную длину тоже платишь. «N-й символ» больше не равен «N-й байт» — прыгнуть к 50-му за раз нельзя, идёшь с начала и считаешь.
Дальше — вес. Латиница 1 байт, кириллица 2, иероглифы 3. За совместимость с ASCII по байтам платят все, кто пишет не латиницей.
И исторический грабли — overlong-кодирование: один символ можно было записать длиннее, чем нужно. Казалось мелочью — пока через это не полезли мимо проверок безопасности: закодируешь / хитро, фильтр не увидел, а система прочитала. Позже залатали, объявив такие формы невалидными.
Ну и 16-битная идея не умерла: её подлатали суррогатными парами и назвали UTF-16 — на нём до сих пор сидят Windows и Java. Но это уже костыль поверх, а не победа.
Зачем это аналитику
Проблему, об которую индустрия билась лет двадцать, два инженера закрыли за ужином. UCS-2 был чище и правильнее — а выиграл формат, который ужился со всем старым барахлом.
И вы ровно это решаете каждый раз, когда садитесь за новую версию API или схему БД: запилить красиво с нуля и сломать совместимость — или натянуть новое поверх старья. UTF-8 намекает, что второе чаще выживает.
А вы какие кодировки в дикой природе ещё застали? Кто чинил «Ïðèâåò» в выгрузке руками — отзовитесь 🙂
@analyst_exe
❤4🔥4
Нажали «оплатить». Крутится колёсико. Связь моргнула, приложение молчит. И палец сам тянется нажать ещё раз.
Вопрос на сотку: спишут один раз или два?
Зависит от одного занудного слова. Идемпотентность. На деньгах без неё лучше не лезть. Слово пугает, по факту фигня: повторил операцию — и ничего не поменялось. Дёрнул перевод один раз, дёрнул пять раз подряд тем же запросом — деньги уйдут ровно один раз.
Почему вообще ломается. Сеть ненадёжна. Вы отправили запрос, сервер его принял, списал деньги, отправил «ок» — а «ок» потерялся по дороге. С вашей стороны ответа просто нет. Прошло или нет — непонятно. Вы жмёте снова, а сервер видит второй запрос как новенький. И списывает ещё раз.
Так вот, чинят это ключом. Клиент к каждой операции цепляет уникальный код — обычно
И вот тут все думают — всё, готово. Ага, щас.
Представьте: два запроса с одним ключом прилетели одновременно. Двойной тап. Или клиент сам ретрайнул по таймауту, пока первый ещё в полёте. Оба лезут в базу, оба видят «ключа нет», оба идут списывать. И вот оно, двойное списание (то самое, из-за которого потом не спишь). А теперь умножьте на чёрную пятницу и тысячи человек. К этому вернёмся.
Спасает атомарная вставка. По-простому: ключ кладут в базу так, что записать его сможет только один запрос из двух. Делает это уникальный индекс — база сама не даёт положить два одинаковых ключа. Кто записал первым, тот и выполняет. Второй обламывается и сразу получает
Ну и дальше пошли нюансы. На них ТЗ и горят.
Ключ генерит клиент и привязывает к операции, а не к кнопке. Один перевод — один ключ. Шлёте другу второй перевод на ту же сотку — нужен новый ключ, иначе система решит «дубль» и второй платёж тихо проглотит. И ключ уникален в рамках клиента: ваш ключ и чужой с тем же значением — разные операции.
Тот же ключ, но тело другое (была сотка — стала тысяча). Это не повтор, это косяк клиента. Сервер отвечает ошибкой, а не молча отдаёт старый результат.
Ключ живёт не вечно. У Stripe, например, сутки. Срок жизни надо проставить в спеке, иначе таблица ключей пухнет, а клиент через месяц ретрайнет «старую» операцию и получит сюрприз.
И почему ключ нужен именно на
И да, это не только про оплату. Очереди вроде Kafka и RabbitMQ доставляют сообщение «хотя бы один раз» — значит, одно и то же прилетит дважды штатно, без всякой моргнувшей сети. Вебхуки провайдер тоже шлёт с повторами. Везде, где есть ретрай, нужен ключ и дедуп — отсев повторов.
Так вот про чёрную пятницу. Нагрузка, один пропущенный уникальный индекс — и за ночь система дважды списывает с тысяч человек. Прикиньте: по 3000₽ с восьми тысяч — это под 24 миллиона, которые утром надо возвращать. А утром с этим прибегут к вам. Инцидент, разбор, начальство.
Чеклист, проверить контракт за минуту:
— есть
— вставка ключа атомарна (защита от гонки)?
— что сохраняем по ключу и отдаём на повтор?
— что отвечаем на тот же ключ с другим телом?
— сколько ключ живёт?
Душнила-режим, да. Но этот чеклист экономит недели разгребания.
Хоть на один пункт ответа в спеке нет — там дыра. А через дыры утекают деньги.
Гляньте свой контракт. Есть там
🔥 если разложил по полочкам. А в комментах — ловили двойное списание? Расскажите, как было (без названий).
@analyst_exe
Вопрос на сотку: спишут один раз или два?
Зависит от одного занудного слова. Идемпотентность. На деньгах без неё лучше не лезть. Слово пугает, по факту фигня: повторил операцию — и ничего не поменялось. Дёрнул перевод один раз, дёрнул пять раз подряд тем же запросом — деньги уйдут ровно один раз.
Почему вообще ломается. Сеть ненадёжна. Вы отправили запрос, сервер его принял, списал деньги, отправил «ок» — а «ок» потерялся по дороге. С вашей стороны ответа просто нет. Прошло или нет — непонятно. Вы жмёте снова, а сервер видит второй запрос как новенький. И списывает ещё раз.
Так вот, чинят это ключом. Клиент к каждой операции цепляет уникальный код — обычно
UUID, длинную случайную строку. Кладёт его в HTTP-заголовок Idempotency-Key. Сервер по нему понимает, видел он эту операцию или нет. Впервые — выполняет и кладёт рядом с ключом результат: тело ответа и статус. Тот же ключ снова — ничего не делает, отдаёт сохранённое.И вот тут все думают — всё, готово. Ага, щас.
Представьте: два запроса с одним ключом прилетели одновременно. Двойной тап. Или клиент сам ретрайнул по таймауту, пока первый ещё в полёте. Оба лезут в базу, оба видят «ключа нет», оба идут списывать. И вот оно, двойное списание (то самое, из-за которого потом не спишь). А теперь умножьте на чёрную пятницу и тысячи человек. К этому вернёмся.
Спасает атомарная вставка. По-простому: ключ кладут в базу так, что записать его сможет только один запрос из двух. Делает это уникальный индекс — база сама не даёт положить два одинаковых ключа. Кто записал первым, тот и выполняет. Второй обламывается и сразу получает
409 (код ответа «такое уже в обработке»). Дальше повторит тем же ключом и заберёт результат. Или снова словит 409, если первый ещё считается — тогда ждёт и повторяет (повтор — на клиенте). Без этой защиты от гонки идемпотентность не работает, хоть что делай.Ну и дальше пошли нюансы. На них ТЗ и горят.
Ключ генерит клиент и привязывает к операции, а не к кнопке. Один перевод — один ключ. Шлёте другу второй перевод на ту же сотку — нужен новый ключ, иначе система решит «дубль» и второй платёж тихо проглотит. И ключ уникален в рамках клиента: ваш ключ и чужой с тем же значением — разные операции.
Тот же ключ, но тело другое (была сотка — стала тысяча). Это не повтор, это косяк клиента. Сервер отвечает ошибкой, а не молча отдаёт старый результат.
Ключ живёт не вечно. У Stripe, например, сутки. Срок жизни надо проставить в спеке, иначе таблица ключей пухнет, а клиент через месяц ретрайнет «старую» операцию и получит сюрприз.
И почему ключ нужен именно на
POST. Смотрите: повторный GET просто ещё раз покажет баланс, повторный DELETE снесёт уже снесённое — этим ретрай не страшен, они идемпотентны сами по себе. А POST каждый раз создаёт новое. Вот ему и нужна страховка.И да, это не только про оплату. Очереди вроде Kafka и RabbitMQ доставляют сообщение «хотя бы один раз» — значит, одно и то же прилетит дважды штатно, без всякой моргнувшей сети. Вебхуки провайдер тоже шлёт с повторами. Везде, где есть ретрай, нужен ключ и дедуп — отсев повторов.
Так вот про чёрную пятницу. Нагрузка, один пропущенный уникальный индекс — и за ночь система дважды списывает с тысяч человек. Прикиньте: по 3000₽ с восьми тысяч — это под 24 миллиона, которые утром надо возвращать. А утром с этим прибегут к вам. Инцидент, разбор, начальство.
Чеклист, проверить контракт за минуту:
— есть
Idempotency-Key на всех POST, что двигают деньги или необратимы?— вставка ключа атомарна (защита от гонки)?
— что сохраняем по ключу и отдаём на повтор?
— что отвечаем на тот же ключ с другим телом?
— сколько ключ живёт?
Душнила-режим, да. Но этот чеклист экономит недели разгребания.
Хоть на один пункт ответа в спеке нет — там дыра. А через дыры утекают деньги.
Гляньте свой контракт. Есть там
POST на платёж без ключа? Вот с него и начинайте.🔥 если разложил по полочкам. А в комментах — ловили двойное списание? Расскажите, как было (без названий).
@analyst_exe
1🔥9❤2
Когда заказчик говорит «это срочно», он почти никогда не имеет в виду «быстро». Чаще это значит: «если это не сделать — виноват буду не я».
«Срочно», «горит», «приоритет» — слышим в этом оценку времени. А времени там часто нет. Есть способ протащить задачу без очереди и заранее свалить ответственность на того, кто возьмёт. Сделаешь — молодец, так и надо было. Не успеешь — ну тебе же сказали, что горит.
И вот ты уже двигаешь спринт под чужую тревогу.
Проверяю это двумя вопросами. Не «когда надо», а вот этими.
1. Что мы НЕ делаем, если берём это сейчас? Срочное всегда кого-то задвигает. Если задвигать нечего — либо у вас пустой бэклог, либо задача горит не так сильно, как кричат.
2. Что случится, если сделать на неделю позже? Конкретно. Кто пострадает, какой процесс встанет, сколько денег утечёт. Если в ответ «ну… хотелось бы побыстрее» — это не срок, это настроение.
Если на оба вопроса честный ответ «ничего» — задача не срочная, а тревожная. А тревогу спринтом не лечат. А если ответ конкретный — «встанет релиз», «дедлайн регулятора» — отлично, теперь у срочности есть цена, и её видно всем. Этим приёмом вы не отменяете пожары, вы отделяете настоящие от выдуманных.
Дальше — заставьте ранжировать.
Не бывает пяти задач «первого приоритета». Это не приоритеты, это список «всё важное». А когда всё важное — не важно ничего, и порядок за вас выберет тот, кто громче. Положите задачи рядом и попросите пронумеровать. Один, два, три. Без повторов.
И зафиксируйте письменно. Не в голове, не на словах в коридоре. «Берём А, значит B и C уезжают на следующую неделю. Все согласны?» — и в чат. Не чтобы прикрыться, а чтобы тот, кто кричит «горит», увидел цену своего «горит». Обычно на этом месте половина пожаров тухнет сама.
Как только trade-off становится видимым и подписанным, слово «срочно» теряет всю магию. Потому что дело почти никогда не в часах. А в том, чью спину этим словом прикрывают.
🔥 если у вас тоже «горит» через раз без причины
А вам как чаще пытаются протащить задачу — «это срочно» или «это же на пять минут»? Да будет срач в комментариях
@analyst_exe
«Срочно», «горит», «приоритет» — слышим в этом оценку времени. А времени там часто нет. Есть способ протащить задачу без очереди и заранее свалить ответственность на того, кто возьмёт. Сделаешь — молодец, так и надо было. Не успеешь — ну тебе же сказали, что горит.
И вот ты уже двигаешь спринт под чужую тревогу.
Проверяю это двумя вопросами. Не «когда надо», а вот этими.
1. Что мы НЕ делаем, если берём это сейчас? Срочное всегда кого-то задвигает. Если задвигать нечего — либо у вас пустой бэклог, либо задача горит не так сильно, как кричат.
2. Что случится, если сделать на неделю позже? Конкретно. Кто пострадает, какой процесс встанет, сколько денег утечёт. Если в ответ «ну… хотелось бы побыстрее» — это не срок, это настроение.
Если на оба вопроса честный ответ «ничего» — задача не срочная, а тревожная. А тревогу спринтом не лечат. А если ответ конкретный — «встанет релиз», «дедлайн регулятора» — отлично, теперь у срочности есть цена, и её видно всем. Этим приёмом вы не отменяете пожары, вы отделяете настоящие от выдуманных.
Дальше — заставьте ранжировать.
Не бывает пяти задач «первого приоритета». Это не приоритеты, это список «всё важное». А когда всё важное — не важно ничего, и порядок за вас выберет тот, кто громче. Положите задачи рядом и попросите пронумеровать. Один, два, три. Без повторов.
И зафиксируйте письменно. Не в голове, не на словах в коридоре. «Берём А, значит B и C уезжают на следующую неделю. Все согласны?» — и в чат. Не чтобы прикрыться, а чтобы тот, кто кричит «горит», увидел цену своего «горит». Обычно на этом месте половина пожаров тухнет сама.
Как только trade-off становится видимым и подписанным, слово «срочно» теряет всю магию. Потому что дело почти никогда не в часах. А в том, чью спину этим словом прикрывают.
🔥 если у вас тоже «горит» через раз без причины
А вам как чаще пытаются протащить задачу — «это срочно» или «это же на пять минут»? Да будет срач в комментариях
@analyst_exe
🔥8❤4👍1
«Откатили хотфикс, на стейдже регресс, и у нас конфликт».
Если вы на дейлике кивнули, а потом пошли гуглить под столом — держите словарь. Я сам в первый год кивал и гуглил. Спорим, не я один)
Никто это специально не объясняет. Разработчики так говорят с первого курса, им в голову не приходит, что «смержить» — не общеизвестное слово.
22 слова с дейлика. Перевожу на наш язык и сразу пишу, чем это вам грозит. Листайте ⬇️
Про код
Куда оно едет
Почему «готово» — это не готово
Завтра на дейлике минимум три слова отсюда прозвучат. Проверьте. И киньте коллеге, который кивает)
@analyst_exe | https://analystexe.ru/articles/daily-standup-dictionary
Если вы на дейлике кивнули, а потом пошли гуглить под столом — держите словарь. Я сам в первый год кивал и гуглил. Спорим, не я один)
Никто это специально не объясняет. Разработчики так говорят с первого курса, им в голову не приходит, что «смержить» — не общеизвестное слово.
22 слова с дейлика. Перевожу на наш язык и сразу пишу, чем это вам грозит. Листайте ⬇️
Про код
Ветка — отдельная копия кода под вашу задачу. Разработчик пилит фичу в ней и не ломает остальным.Коммит — сохранённая порция изменений. Ctrl+S с комментарием.Запушить — отправить коммиты на общий сервер. До пуша код живёт только на ноуте разработчика.Ревью — другой разработчик проверяет код, прежде чем влить его в общий код проекта. «Висит на ревью» = код написан, ждём коллегу. Пинать автора тут бесполезно. Пинайте ревьюера)МР / ПР (merge request / pull request) — заявка «гляньте мой код и влейте». «Открыл МР» = задача почти готова, осталось ревью.Мерж — влить ветку в общий код. «Смержили» = фича в общей кодовой базе. Обычно пользователи её ещё не видят — но если у команды автодеплой, мерж означает «уже на проде». Спросите один раз, как у вас.Конфликт — два человека поменяли одно и то же место в коде, и система не знает, чей вариант правильный. Никто не поругался. Разбирается обычно за минуты, но иногда съедает день.Куда оно едет
Деплой — выкладка кода на сервер. Пока не задеплоили — код нигде не работает, даже если написан и смержен.Дев — песочница разработчиков. Тут всё может лежать сломанным, это норма. На баги на деве не жалуйтесь, вас не поймут.Стейдж — репетиционная копия прода. В маленьких командах test, UAT и препрод — это всё одна среда, в больших — три разные. «Задеплоили на стейдж» = можно тестировать, пользователи ничего не видят.Прод — боевой сервер, то, что видят реальные пользователи. Услышали «прод» — отложите телефон и слушайте.Релиз — выкатка готовых фич на прод, обычно пачкой по расписанию. «Едет в ближайший релиз» = скоро у пользователей.Фриз (code freeze) — заморозка: перед релизом новые изменения в него больше не берут, только критичные фиксы. «Завтра фриз» = что не успели влить — едет в следующий релиз. Ваши сроки это двигает напрямую.Откатить — вернуть на прод предыдущую версию, потому что новая что-то сломала. Откатывают обычно весь релиз целиком — ваша фича уехала с прода, даже если виновата не она. Поедет снова, когда починят.Хотфикс — срочная починка прода вне расписания релизов. Слышите «хотфикс» — значит где-то горит) ваша задача сегодня скорее всего подвинется.Фича-флаг — выключатель фичи на проде. Код выехал, но фича спит, пока флаг не включат. Так что «задеплоили» ещё не значит, что юзеры что-то увидели.Почему «готово» — это не готово
Баг — программа делает не то, что задумали. Сначала разработчики смотрят логи и код. К вам придут, когда начнётся спор «это баг или так задумано» — тут решают требования.Регресс — новый код сломал старое, которое работало. «На стейдже регресс» = чинят не вашу фичу, а то, что она зацепила. Релиз подождёт. Но «гоняем регресс» — другое: это проверка, что старое не сломалось. Тут ещё ничего не упало.Воспроизвести — повторить баг руками. «Не воспроизводится» = баг кто-то видел, но повторить не выходит. Помогите шагами: что нажимали, на каких данных, скриншот.Флаки тест — тест, который то проходит, то падает сам по себе. Чаще всего с вашей фичей всё ок, просто тест нервный — но бывает, флак ловит реальную плавающую ошибку. Копать или перезапускать — решает разработчик, не вы.Билд красный / пайплайн упал — автоматическая сборка и проверки кода не прошли. Пока не позеленеет, дальше ничего не едет. Звучит страшно, бывает по три раза на дню.Блокер — то, из-за чего задача стоит. «У меня блокер на аналитике» = это вам. Бросайте всё и отвечайте.Завтра на дейлике минимум три слова отсюда прозвучат. Проверьте. И киньте коллеге, который кивает)
@analyst_exe | https://analystexe.ru/articles/daily-standup-dictionary
❤8👍2
Я разработке учился семь раз. СЕМЬ. И до сих пор хочу зайти на восьмой — только вайбкодинг пока отговаривает.
Весь мой рабочий путь — это путь говна и превозмоганий. И именно на нём до меня дошла одна неприятная штука про то, как мы меняемся. Точнее — как НЕ меняемся.
Вот понял ты что-то про себя. Прочитал книжку, сходил к психологу, словил инсайт в душе. И как будто уже поработал, красавчик. А по факту не поменялось ничего. В голове щёлкнуло «о, понял!», стало приятно — и отпустило. Галочка есть, жизнь прежняя.
Осознавать — легко и кайфово, вообще ничего не стоит. И кажется, что раз понял — уже что-то делаешь. А ты просто понял и сел обратно. Так можно годами крутить в голове один и тот же косяк и стоять на месте.
А меняться-то начинается дальше — там, где кайф от инсайта кончился и идти уже совсем не хочется.
Я ходил в зал, бросал, возвращался. Задачи поначалу вообще не умел делать — садился, тупил и падал. Падал, падал, падал. Но не перестал — просто потом вставал. Через боль, через не хочу, иногда после долгих пауз. И заходил снова.
Потому что меняться больно по-честному. Организму лень палить энергию на новое, когда старое и так работает. Ты для него норм вариант, проверенный — чё тебя трогать-то. И первые недели любой новой привычки — это пытка, никаких обещанных эндорфинов. Хорошо станет когда-то потом. Может, вообще не станет. А херово — сразу.
Вот тут почти все и сливаются. И сила воли ни при чём — на одной мотивации эту яму не проедешь.
Поэтому поменять себя — это пиздец как сложно. Осознать-то себя каждый горазд. А падать, вставать и опять лезть, когда противно и результата ноль — на это мало кого хватает.
И ещё одно. В одиночку это тянуть — почти нереально. Меня в зале через не хочу поднимал тренер — без него я бы слился сто раз. Когда рядом кто-то, кто пинает и не даёт бросить на падении, доходишь в разы чаще. Один на один с собой — почти никогда. Найдите себе такого бадди. Серьёзно.
Кстати. Я снова готов потащить — приходите качаться об меня в аналитику. Буду тем самым, кто поднимает через не хочу. Пишите в личку @darkwing_duck101. Дисклеймер прежний: думать за вас не буду, но направлю и пинать буду 🫡
А вы на каком заходе? И на чём чаще застреваете — на «всё про себя понял» или сливаетесь уже в процессе?
@analyst_exe
Весь мой рабочий путь — это путь говна и превозмоганий. И именно на нём до меня дошла одна неприятная штука про то, как мы меняемся. Точнее — как НЕ меняемся.
Вот понял ты что-то про себя. Прочитал книжку, сходил к психологу, словил инсайт в душе. И как будто уже поработал, красавчик. А по факту не поменялось ничего. В голове щёлкнуло «о, понял!», стало приятно — и отпустило. Галочка есть, жизнь прежняя.
Осознавать — легко и кайфово, вообще ничего не стоит. И кажется, что раз понял — уже что-то делаешь. А ты просто понял и сел обратно. Так можно годами крутить в голове один и тот же косяк и стоять на месте.
А меняться-то начинается дальше — там, где кайф от инсайта кончился и идти уже совсем не хочется.
Я ходил в зал, бросал, возвращался. Задачи поначалу вообще не умел делать — садился, тупил и падал. Падал, падал, падал. Но не перестал — просто потом вставал. Через боль, через не хочу, иногда после долгих пауз. И заходил снова.
Потому что меняться больно по-честному. Организму лень палить энергию на новое, когда старое и так работает. Ты для него норм вариант, проверенный — чё тебя трогать-то. И первые недели любой новой привычки — это пытка, никаких обещанных эндорфинов. Хорошо станет когда-то потом. Может, вообще не станет. А херово — сразу.
Вот тут почти все и сливаются. И сила воли ни при чём — на одной мотивации эту яму не проедешь.
Поэтому поменять себя — это пиздец как сложно. Осознать-то себя каждый горазд. А падать, вставать и опять лезть, когда противно и результата ноль — на это мало кого хватает.
И ещё одно. В одиночку это тянуть — почти нереально. Меня в зале через не хочу поднимал тренер — без него я бы слился сто раз. Когда рядом кто-то, кто пинает и не даёт бросить на падении, доходишь в разы чаще. Один на один с собой — почти никогда. Найдите себе такого бадди. Серьёзно.
Кстати. Я снова готов потащить — приходите качаться об меня в аналитику. Буду тем самым, кто поднимает через не хочу. Пишите в личку @darkwing_duck101. Дисклеймер прежний: думать за вас не буду, но направлю и пинать буду 🫡
А вы на каком заходе? И на чём чаще застреваете — на «всё про себя понял» или сливаетесь уже в процессе?
@analyst_exe
❤11
This media is not supported in your browser
VIEW IN TELEGRAM
Еще один честно найденный мем.
🫡 Пятница господа, время расквитаться со всей работой и пойти в выходные
@analyst_exe
🫡 Пятница господа, время расквитаться со всей работой и пойти в выходные
@analyst_exe
😁7
Forwarded from Tech Analyst Club - проектирование, архитектура, AI
Так, у нас митап
Совершенно внезапно, мы решили собраться в субботу на Tech Analyst Meetup, чтобы обсудить использование AI в работе аналитиков. Пригласили как скептиков, так и оптимистов со своими практическими кейсами — хотим посмотреть на тему со всех сторон.
Что будет:
• Екатерина Пантелей — SDD против здравого смысла: какие артефакты аналитика переживут AI?
• Антон Константинов — Опыт коллаборации с AI: спеки, навыки, контекст
• Егор Марюшко — AI тут, AI там — какие возможности и инструменты на самом деле доступны аналитику в большинстве энтерпрайз-проектов, без иллюзий
• Иннокентий Бодров — Source map для системного аналитика: что нужно AI-напарнику кроме модели
• Анастасия Кайнова — тема уточняется
📆 27 июня, суббота, 11:00-15:00 мск
🔗 Регайтесь в ботике, это бесплатно
Совершенно внезапно, мы решили собраться в субботу на Tech Analyst Meetup, чтобы обсудить использование AI в работе аналитиков. Пригласили как скептиков, так и оптимистов со своими практическими кейсами — хотим посмотреть на тему со всех сторон.
Что будет:
• Екатерина Пантелей — SDD против здравого смысла: какие артефакты аналитика переживут AI?
• Антон Константинов — Опыт коллаборации с AI: спеки, навыки, контекст
• Егор Марюшко — AI тут, AI там — какие возможности и инструменты на самом деле доступны аналитику в большинстве энтерпрайз-проектов, без иллюзий
• Иннокентий Бодров — Source map для системного аналитика: что нужно AI-напарнику кроме модели
• Анастасия Кайнова — тема уточняется
🔗 Регайтесь в ботике, это бесплатно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
В общем, такая штука. Один и тот же маршрут утром и вечером стоит по-разному. Первая мысль — ну спрос-предложение, всё честно. Почти.
Потому что алгоритм считает не километры. Он прикидывает, насколько вам некуда деться. А когда вы с чемоданом у выхода из аэропорта в полночь — деваться особо некуда. И он это прекрасно знает.
Сейчас разложу, как оно устроено и что с этим делать.
Сначала по-честному: надбавка за спрос — это не жадность
Сначала про сам механизм, а то сразу мутно. Когда машин не хватает, цену временно подкручивают вверх — это и есть тот самый множитель «×1.5», «×2» на экране. По-английски его зовут surge (дословно «всплеск»), по-нашему — повышающий коэффициент или надбавка за спрос. Дальше я буду говорить «надбавка», но если где встретите surge — это оно же.
Так вот, штука вообще-то полезная. В районе резко набежало заказов, машин не хватает. Цену поднимают, и дальше срабатывает две вещи разом. Часть людей видит ×2, думает «да ну нафиг, подожду» — заказов меньше. Часть водителей видит, что тут платят больше, и едет сюда — машин больше. Минут через пять спрос с предложением сходятся, цена оседает.
То есть по учебнику надбавка просто сгоняет тачки туда, где их нет. Норм механика, вопросов ноль.
Вопросы дальше.
Цена зависит не только от того, сколько вокруг машин. Ещё — от того, насколько лично вам некуда отступать. Аэропорт ночью, ливень, тупик в конце улицы, последний автобус тю-тю. Где у вас нет варианта «забить и не поехать» — там заплатите сколько скажут. Алгоритм крутит ровно эту ручку.
Дальше два слуха, которые гуляют годами
И тут осторожно. «Доказано» — это одно, а «обвиняют» — совсем другое.
Слух номер раз — дороже, если у вас сел телефон.
Откуда растёт. В 2016-м главный экономист Uber Кит Чен ляпнул в эфире NPR, что заряд батареи — «один из самых сильных предикторов» того, согласитесь ли вы на задранную цену. Логика понятная: 12% зарядки, чужой город, ночь — да заплатите вы что угодно, лишь бы не куковать на улице.
Но он там же добавил: мы это знаем и НЕ используем. Официально Uber говорит — заряд в цену не закладываем, и точка. Отдельные замеры небольшую разницу на низком заряде показывали, но чисто повторить это никто не смог. Так что держим в уме: корреляцию признали, а использование отрицают — пока это обвинение, а не доказанный факт.
Слух номер два — с айфона дороже, чем с андроида.
Тут покороче. Логика та же — у владельца айфона денег в среднем больше. В начале 2025-го вокруг этого был шум: скриншоты с разной ценой, вопросы у регуляторов. Но чистого доказательства, что цена зависит именно от операционки, так никто и не предъявил.
А прикол вообще не в том, правда эти слухи или нет.
Сам факт, что мы это на серьёзе обсуждаем, уже о чём-то говорит. Штука в том, что ценника как такового больше нет. Точнее он есть, но он лично ваш: где вы, во сколько, как часто заказываете, чем платите. И сверить не с чем — соседу в ту же секунду показали другое число.
Что с этим реально делать
Без паранойи, на спокойке.
Отойдите метров на 100–200 от точки пикача. Прям ногами — от выхода аэропорта, от дверей клуба. Часто этого хватает, чтобы выпасть из горячей зоны.
Не хватайте первую цену. Подождите пару-тройку минут — надбавка живёт недолго, тачки подъезжают, цена опускается.
Сверьтесь в соседнем приложении или с телефона того, кто рядом. Расхождение само по себе уже ответ.
И да, грань тут каждый проводит сам. Поднять цену, чтобы согнать машины туда, где их нет — нормальная балансировка. А прикинуть, насколько вам некуда деться, и выжимать ровно эту цифру — уже немного другая история. Снаружи-то они одинаковые: «×1.8» на экране. Фиг разберёшь.
И это далеко не только такси. Авиабилеты дорожают, стоит второй раз открыть ту же вкладку. Маркетплейс помнит, что вы возвращались за товаром. Кухня везде та же.
@analyst_exe
Потому что алгоритм считает не километры. Он прикидывает, насколько вам некуда деться. А когда вы с чемоданом у выхода из аэропорта в полночь — деваться особо некуда. И он это прекрасно знает.
Сейчас разложу, как оно устроено и что с этим делать.
Сначала по-честному: надбавка за спрос — это не жадность
Сначала про сам механизм, а то сразу мутно. Когда машин не хватает, цену временно подкручивают вверх — это и есть тот самый множитель «×1.5», «×2» на экране. По-английски его зовут surge (дословно «всплеск»), по-нашему — повышающий коэффициент или надбавка за спрос. Дальше я буду говорить «надбавка», но если где встретите surge — это оно же.
Так вот, штука вообще-то полезная. В районе резко набежало заказов, машин не хватает. Цену поднимают, и дальше срабатывает две вещи разом. Часть людей видит ×2, думает «да ну нафиг, подожду» — заказов меньше. Часть водителей видит, что тут платят больше, и едет сюда — машин больше. Минут через пять спрос с предложением сходятся, цена оседает.
То есть по учебнику надбавка просто сгоняет тачки туда, где их нет. Норм механика, вопросов ноль.
Вопросы дальше.
Цена зависит не только от того, сколько вокруг машин. Ещё — от того, насколько лично вам некуда отступать. Аэропорт ночью, ливень, тупик в конце улицы, последний автобус тю-тю. Где у вас нет варианта «забить и не поехать» — там заплатите сколько скажут. Алгоритм крутит ровно эту ручку.
Дальше два слуха, которые гуляют годами
И тут осторожно. «Доказано» — это одно, а «обвиняют» — совсем другое.
Слух номер раз — дороже, если у вас сел телефон.
Откуда растёт. В 2016-м главный экономист Uber Кит Чен ляпнул в эфире NPR, что заряд батареи — «один из самых сильных предикторов» того, согласитесь ли вы на задранную цену. Логика понятная: 12% зарядки, чужой город, ночь — да заплатите вы что угодно, лишь бы не куковать на улице.
Но он там же добавил: мы это знаем и НЕ используем. Официально Uber говорит — заряд в цену не закладываем, и точка. Отдельные замеры небольшую разницу на низком заряде показывали, но чисто повторить это никто не смог. Так что держим в уме: корреляцию признали, а использование отрицают — пока это обвинение, а не доказанный факт.
Слух номер два — с айфона дороже, чем с андроида.
Тут покороче. Логика та же — у владельца айфона денег в среднем больше. В начале 2025-го вокруг этого был шум: скриншоты с разной ценой, вопросы у регуляторов. Но чистого доказательства, что цена зависит именно от операционки, так никто и не предъявил.
А прикол вообще не в том, правда эти слухи или нет.
Сам факт, что мы это на серьёзе обсуждаем, уже о чём-то говорит. Штука в том, что ценника как такового больше нет. Точнее он есть, но он лично ваш: где вы, во сколько, как часто заказываете, чем платите. И сверить не с чем — соседу в ту же секунду показали другое число.
Что с этим реально делать
Без паранойи, на спокойке.
Отойдите метров на 100–200 от точки пикача. Прям ногами — от выхода аэропорта, от дверей клуба. Часто этого хватает, чтобы выпасть из горячей зоны.
Не хватайте первую цену. Подождите пару-тройку минут — надбавка живёт недолго, тачки подъезжают, цена опускается.
Сверьтесь в соседнем приложении или с телефона того, кто рядом. Расхождение само по себе уже ответ.
И да, грань тут каждый проводит сам. Поднять цену, чтобы согнать машины туда, где их нет — нормальная балансировка. А прикинуть, насколько вам некуда деться, и выжимать ровно эту цифру — уже немного другая история. Снаружи-то они одинаковые: «×1.8» на экране. Фиг разберёшь.
И это далеко не только такси. Авиабилеты дорожают, стоит второй раз открыть ту же вкладку. Маркетплейс помнит, что вы возвращались за товаром. Кухня везде та же.
@analyst_exe
❤4🔥3
Учимся быстро проходить дейлики
1. Подключаетесь к дейлику
2. Показываете собаку
3. Быстро говорите что выне успели сделать за вчера
4. Пока все умиляются собаке - отключаетесь
5. Профит
p.s. не забудьте похвалить сибу, она снова и снова работает на вас своей милотой
@analyst_exe
1. Подключаетесь к дейлику
2. Показываете собаку
3. Быстро говорите что вы
4. Пока все умиляются собаке - отключаетесь
5. Профит
p.s. не забудьте похвалить сибу, она снова и снова работает на вас своей милотой
@analyst_exe
❤17😁7