[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fservices\u002Fai-code-audit":167,"service-parent:\u002Fservices\u002Fai-code-audit":590,"service-children:\u002Fservices\u002Fai-code-audit":597,"glossary":598},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Каждое наше приложение выходит и на Android — платформенные API, фоновое выполнение, разрешения и требования магазина вместе с ними.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","Фронтенд-фреймворк, в котором мы работаем, когда продукт уже на Angular, — строгая структура, подходящая большим долгоживущим приложениям.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","Язык, на котором написано каждое наше Flutter-приложение, — строгая null safety, полноценный pattern matching и компиляция в нативный код и веб.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","Python-фреймворк, который мы берём, когда продукту нужны админка, аутентификация и модель данных в первый же день, а не самописный сервис.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Каждый наш сервис поставляется в виде контейнера, поэтому на ноутбуке, в CI и в продакшене работает один и тот же артефакт, а не три разных.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","Автоматизация релизов в нашей мобильной разработке — подпись, сборки и загрузка в сторы идут из CI, а не с ноутбука одного инженера в день релиза.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Наш основной мобильный стек с 2018 года — одна кодовая база на Dart для iOS, Android, веба и десктопа без отдельной команды под каждую платформу.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Все проекты, к которым мы прикасаемся, живут в Git — ревью пул-реквестов, CI на каждой ветке и история, понятная и спустя месяцы.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Наш бэкенд-язык для real-time API и сервисов под нагрузкой — маленькие бинарники, быстрая сборка и конкурентность, которая остаётся читаемой.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","Облако, в котором работают наши продакшен-нагрузки, — управляемый Kubernetes, хранилище и сеть без серверов, которые надо обслуживать руками.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","Система сборки, через которую проходит каждый Android-релиз, — флейворы, конфигурации подписи и вся обвязка зависимостей под Flutter-приложением.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","Так мы упаковываем деплой в Kubernetes — сервис, конфигурация, секреты и ingress как одна версионируемая единица, которую можно выкатить и откатить.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","То, что мы берём, когда Flutter-приложению нужен настоящий Android под ним, — platform channels, фоновые задачи и интеграции с нативными SDK.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Общая бизнес-логика для iOS и Android, а нативный интерфейс у каждой платформы свой, — альтернатива, когда Flutter не подходит.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","Так мы запускаем сервисы в продакшене — деплой в Helm-чартах, откатываемые выкатки и масштабирование, для которого не нужен человек в три ночи.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Лёгкий обмен сообщениями между сервисами — publish\u002Fsubscribe и request\u002Freply без эксплуатационного веса полноценного кластера брокера.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue с серверным рендерингом, роутингом и SEO из коробки — так мы делаем сайты и веб-приложения, которые должны быстро грузиться и индексироваться.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Там, где PHP-бэкенд уже есть: дорабатываем его, интегрируемся с ним и делаем мобильные и веб-клиенты, которые он обслуживает.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Наша база данных по умолчанию — от проектирования схемы до настройки индексов мы берём её, если у продукта нет конкретной причины взять другую.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Наш язык для бэкендов, работы с данными и AI-интеграций — включая Python-биндинги, которые мы выпускаем к собственным инструментам на Rust.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","Фронтенд-библиотека, в которой мы работаем, когда продукт уже на React, — компоненты, хуки и выросшая вокруг них экосистема.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Место для данных, которые должны быть быстрыми и которые не жалко пересчитать, — кэши, сессии, лимиты и очереди фоновых задач.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","Язык, на котором написана автоматизация наших мобильных релизов, — лейны Fastlane, кастомные действия и связка с CI, доставляющая сборки в сторы.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Куда мы идём, когда важны и скорость, и корректность, — рендеринг документов, CLI-инструменты и сервисы, которые обязаны оставаться быстрыми и предсказуемыми.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","База данных, которая поставляется внутри приложения, — локальные кэши, offline-first хранилище и всё, что должно работать без сети.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","Headless CMS, к которой мы обращаемся, когда контент должны вести сами редакторы, — готовая админка и чистый API вместо самописных.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","То, что мы берём, когда Flutter-приложению нужен настоящий iOS под ним, — platform channels, интеграции нативных SDK, виджеты и App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","UI-фреймворк Apple, на котором мы делаем нативные поверхности, недоступные Flutter-приложению, — виджеты, App Clips и расширения.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","Так мы стилизуем весь фронтенд — утилитарные классы и дизайн-токены вместо таблицы стилей, которая только растёт и никогда не чистится.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","Стандарт для всего, что мы пишем для браузера и для Node-сервисов, — типы ловят ошибки интеграции раньше, чем код доходит до ревью.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Наш фронтенд-фреймворк для админок, дашбордов мерчантов и веб-приложений, которые должны оставаться поддерживаемыми годами, а не спринтами.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","Открытая модель распознавания речи от OpenAI — движок транскрипции для голосового ввода, который работает и как бэкенд-сервис, и прямо на устройстве в приложении.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":561,"extension":562,"footerCta":563,"headingCta":577,"image":582,"meta":585,"metaDescription":586,"metaTitle":587,"navigation":588,"ogDescription":589,"parent":590,"path":591,"seo":592,"slug":593,"stem":594,"updated":595,"__hash__":596},"services_ru\u002Fservices\u002Fai-code-audit.md","Аудит AI-кода",{"type":171,"value":172,"toc":542},"minimark",[173,177,180,185,188,193,197,200,204,218,222,225,230,238,242,245,249,252,256,285,289,296,299,305,308,314,323,329,341,345,350,353,358,366,371,374,378,383,386,391,398,403,406,412,416,432,438,442,445,450,453,458,461,466,469,474,477,483,491,495,498,504,513,517,520,524,531,535,538],[174,175,176],"p",{},"Аудит AI-кода — это независимая проверка кодовой базы, написанной AI или вручную, на уязвимости безопасности, архитектурные слабости и пробелы в готовности к продакшену — до того, как их найдут реальные пользователи. Итог — отчёт с находками, ранжированными по критичности, и понятный путь к их исправлению.",[174,178,179],{},"Большая часть того, что мы аудируем сегодня, начиналась в Cursor, Bolt, Lovable, Claude или ChatGPT — прототип собирается быстро, но готовым к продакшену в первый же день он бывает редко. При этом сам аудит не ограничивается кодом, который написал AI: те же категории риска и тот же процесс применимы к кодовой базе, которую AI вообще не трогал. Будь вы командой, которая быстро выпускает продукт с AI-инструментами и хочет проверку перед следующим релизом, или основателем, который унаследовал AI-приложение и не знает, что в нём на самом деле, — аудит один и тот же.",[181,182,184],"h2",{"id":183},"что-мы-проверяем","Что мы проверяем",[174,186,187],{},"Семь направлений в каждом аудите — а не только сканирование безопасности, на котором останавливается большинство инструментов «AI code review».",[189,190],"features",{":items":191,":title":192},"[{\"label\": \"Безопасность\", \"description\": \"Уязвимости OWASP Top 10, инъекционные атаки, обход аутентификации, утечка секретов, небезопасное хранение данных\"}, {\"label\": \"Архитектура\", \"description\": \"Границы сервисов, поток данных и связанность — выдержит ли дизайн реальных пользователей и реальную нагрузку\"}, {\"label\": \"Производительность\", \"description\": \"Запросы к базе данных, проблемы N+1, утечки памяти и запас прочности под продакшен-трафиком\"}, {\"label\": \"Корректность\", \"description\": \"Бизнес-логика, граничные случаи и баги, которые проявляются только на реальных данных\"}, {\"label\": \"Зависимости\", \"description\": \"Устаревшие пакеты, известные CVE и риски лицензирования в дереве зависимостей\"}, {\"label\": \"Покрытие тестами\", \"description\": \"Что протестировано, что нет и что молча ломается при следующем изменении\"}, {\"label\": \"Запахи AI-кода\", \"description\": \"Дублированная логика, галлюцинированные API и несогласованные паттерны, которые оставляет агент без присмотра\"}]","Что входит в каждый аудит",[181,194,196],{"id":195},"что-вы-получаете","Что вы получаете",[174,198,199],{},"Аудит — это не PDF, который ляжет в стол. На выходе три вещи.",[189,201],{":items":202,":title":203},"[{\"label\": \"Отчёт с находками\", \"description\": \"Каждая проблема ранжирована по критичности — критическая, высокая, средняя, низкая — с понятным объяснением риска и конкретным исправлением\"}, {\"label\": \"Пример отчёта об аудите\", \"description\": \"Обезличенный пример реального аудита — вы увидите, за что платите, ещё до того, как пришлёте нам код\"}, {\"label\": \"Созвон по устранению проблем\", \"description\": \"Разбор каждой находки с нашими инженерами и прямой ответ, что исправлять в первую очередь\"}]","Результат аудита",[205,206,209],"info-box",{":leading-icon":207,":title":208},"lucide:file-text","Посмотрите пример перед тем, как решиться",[174,210,211,212,217],{},"Хотите увидеть, как выглядит реальная находка — критичность, объяснение риска, исправление — прежде чем присылать нам код? ",[213,214,216],"a",{"href":215},"\u002Fcontact?intent=ai-code-audit","Запросите обезличенный пример отчёта об аудите",", и мы вам его вышлем.",[181,219,221],{"id":220},"два-способа-начать","Два способа начать",[174,223,224],{},"К нам приходят за аудитом по одной из двух причин. Отчёт с находками выглядит одинаково в обоих случаях — разница в том, с чего мы начинаем искать.",[226,227,229],"h3",{"id":228},"аудит-ai-сгенерированного-или-vibe-coding-приложения","Аудит AI-сгенерированного или vibe-coding приложения",[174,231,232,233,237],{},"Вы (или нетехнический основатель, или подрядчик) собрали в Cursor, Bolt, Lovable, Claude или ChatGPT что-то рабочее — оно хорошо смотрится на демо, ранним пользователям нравится, и теперь ему нужно выдержать столкновение с реальным миром. Мы начинаем с того, в чём эти инструменты систематически проваливаются: захардкоженные секреты, аутентификация, которая формально есть, но не проверяет запрос, и использование API, которое никогда не проектировалось под бюджет. Наш разбор именно этого перехода — в статье ",[213,234,236],{"href":235},"\u002Fblog\u002Fai-prototype-to-production","Как довести AI-прототип до продакшена",".",[226,239,241],{"id":240},"ai-ускоренный-аудит-любой-кодовой-базы","AI-ускоренный аудит любой кодовой базы",[174,243,244],{},"Чтобы это относилось к вам, кодовая база не обязана быть написана AI. Мы прогоняем один и тот же автоматизированный анализ — статический анализ, сканирование зависимостей, обнаружение секретов — на любом стеке, независимо от того, помогал ли AI его писать, и именно это позволяет нам укладывать аудит в недели, а не месяцы. Поверх этого идёт ручная проверка: наши инженеры сами читают вашу архитектуру и бизнес-логику; автоматизация лишь означает, что меньше бюджета уходит на поиск очевидного вручную.",[181,246,248],{"id":247},"что-идёт-не-так-в-ai-сгенерированном-коде","Что идёт не так в AI-сгенерированном коде",[174,250,251],{},"Мы провели аудит десятков AI-сгенерированных кодовых баз. Одни и те же категории проблем появляются практически в каждой — это системные слепые пятна, а не исключения.",[253,254],"statistics-grid",{":items":255},"[{\"icon\": \"lucide:shield-alert\", \"value\": \"45%\", \"label\": \"Проваливают тесты\", \"description\": \"AI-код проваливает проверки безопасности OWASP (Veracode, 2025)\"}, {\"icon\": \"lucide:dollar-sign\", \"value\": \"5-20x\", \"label\": \"Перерасход на API\", \"description\": \"Типичный перерасход из-за неоптимизированного использования платных API\"}, {\"icon\": \"lucide:key\", \"value\": \"2x\", \"label\": \"Больше утечек секретов\", \"description\": \"Разработчики с AI-помощниками раскрывают учётные данные почти вдвое чаще (Apiiro, 2025)\"}, {\"icon\": \"lucide:clock\", \"value\": \"2-4 недели\", \"label\": \"Срок аудита\", \"description\": \"Время на выявление и исправление критических проблем\"}]",[174,257,258,259,264,265,269,270,274,275,279,280,284],{},"Эти цифры взяты из независимых исследований: ",[213,260,263],{"href":261,"target":262},"https:\u002F\u002Fwww.veracode.com\u002Fblog\u002Fgenai-code-security-report\u002F","_blank","Veracode протестировал 100+ LLM"," и обнаружил, что 45% сгенерированного кода проваливает тесты безопасности. ",[213,266,268],{"href":267,"target":262},"https:\u002F\u002Fapiiro.com\u002Fblog\u002F4x-velocity-10x-vulnerabilities-ai-coding-assistants-are-shipping-more-risks\u002F","Анализ Apiiro за 2025 год"," показал, что разработчики с AI-помощниками раскрывают учётные данные почти вдвое чаще. ",[213,271,273],{"href":272,"target":262},"https:\u002F\u002Farxiv.org\u002Fpdf\u002F2108.09293","Исследователи NYU"," нашли уязвимости в ~40% программ, сгенерированных Copilot, а ",[213,276,278],{"href":277,"target":262},"https:\u002F\u002Fee.stanford.edu\u002Fdan-boneh-and-team-find-relying-ai-more-likely-make-your-code-buggier","исследование Стэнфорда"," подтвердило, что разработчики с AI-помощниками пишут менее безопасный код — и при этом больше уверены в его надёжности. Наш собственный разбор Flutter-кода, написанного агентами, — в статье ",[213,281,283],{"href":282},"\u002Fblog\u002Fai-agents-struggle-with-flutter","Почему AI-агенты буксуют на Flutter",": дублированное состояние, отсутствие тестов и интерфейс, который никто не проверил второй раз.",[226,286,288],{"id":287},"уязвимости-безопасности","Уязвимости безопасности",[290,291,292],"ol",{},[293,294,295],"li",{},"Открытые API-ключи и секреты",[174,297,298],{},"AI-инструменты часто хардкодят API-ключи, учётные данные баз данных и токены сторонних сервисов прямо в исходный код. Они попадают в публичные репозитории, клиентские бандлы или файлы окружения, которые уходят в продакшен. Один утёкший ключ OpenAI может привести к тысячам долларов несанкционированных расходов за несколько часов.",[290,300,302],{"start":301},2,[293,303,304],{},"Отсутствие аутентификации и авторизации",[174,306,307],{},"AI-приложения часто реализуют аутентификацию на поверхностном уровне — экран логина есть, но бэкенд на самом деле не проверяет права. API-эндпоинты принимают любой запрос. Административные маршруты доступны без проверки ролей. Пользователь A может видеть данные пользователя B, просто подменив ID в URL.",[290,309,311],{"start":310},3,[293,312,313],{},"Инъекционные атаки",[174,315,316,317,322],{},"SQL-инъекции, XSS и ",[318,319,321],"term",{"slug":320},"prompt-injection","промпт-инъекции"," распространены в AI-коде. AI-модели генерируют код, который подставляет пользовательский ввод напрямую в запросы, HTML или промпты LLM без санитизации. Один уязвимый эндпоинт может скомпрометировать всю базу данных или позволить злоумышленникам манипулировать поведением вашего AI.",[290,324,326],{"start":325},4,[293,327,328],{},"Небезопасное хранение данных",[174,330,331,332,335,336,340],{},"Персональные данные в открытом виде, сессионные токены в localStorage, пароли, захешированные MD5, или вообще без хеширования. AI-инструменты выбирают простейшую реализацию, которая редко бывает безопасной. Соответствие ",[318,333],{"slug":334},"gdpr"," и требованиям конфиденциальности, как правило, отсутствует. Наш разбор ",[213,337,339],{"href":338},"\u002Fblog\u002Fencryption-explained","шифрования в продакшен-приложениях"," показывает, как данные должны защищаться при хранении и передаче.",[226,342,344],{"id":343},"оптимизация-расходов-на-api","Оптимизация расходов на API",[290,346,347],{},[293,348,349],{},"Избыточные вызовы API",[174,351,352],{},"Самая дорогая проблема, которую мы находим. AI-приложения делают лишние вызовы к платным сторонним API — геокодинг, финансовые данные, AI-модели, сервисы верификации. Они запрашивают одни и те же данные повторно, не кэшируют ответы и делают запросы, которых можно было бы избежать простой локальной логикой. Мы регулярно находим приложения, где 60-80% расходов на API — впустую.",[290,354,355],{"start":301},[293,356,357],{},"Отсутствие лимитов и бюджетов",[174,359,360,361,365],{},"Нет ",[318,362,364],{"slug":363},"rate-limiting","лимитов"," на пользователя. Нет дневных лимитов расходов. Нет аварийной отсечки при скачке затрат. Один пользователь — или бот — может выжечь весь ваш месячный бюджет за день. AI-инструменты никогда не реализуют контроль затрат, потому что не имеют представления о вашей бизнес-модели и тарифах интегрируемых сервисов.",[290,367,368],{"start":310},[293,369,370],{},"Отсутствие кэширования и батчинга",[174,372,373],{},"Запрос одного и того же курса валюты, геолокации по IP или профиля пользователя из платного API при каждом обращении вместо кэширования. Одиночные вызовы API в цикле вместо использования пакетных эндпоинтов. Каждый лишний запрос стоит денег, и при масштабировании это складывается в тысячи долларов в месяц.",[226,375,377],{"id":376},"утечки-данных-и-конфиденциальность","Утечки данных и конфиденциальность",[290,379,380],{},[293,381,382],{},"Логирование конфиденциальной информации",[174,384,385],{},"AI-код обожает избыточное логирование. Email-адреса, пароли, платёжные данные и персональная информация попадают в логи приложения, сервисы трекинга ошибок и сторонние аналитические системы. Эти логи часто доступны без аутентификации и хранятся бессрочно.",[290,387,388],{"start":301},[293,389,390],{},"Избыточные ответы API",[174,392,393,394,397],{},"API-ответы, возвращающие целые объекты пользователя — включая хешированные пароли, внутренние ID, email-адреса и метаданные — когда фронтенду нужно только отображаемое имя. ",[318,395],{"slug":396},"graphql","-эндпоинты без ограничений глубины, позволяющие злоумышленникам извлечь всю модель данных.",[290,399,400],{"start":310},[293,401,402],{},"Передача данных третьим сторонам",[174,404,405],{},"AI-инструменты интегрируют аналитику, трекинг ошибок и мониторинг без учёта того, какие данные в них уходят. Поведение пользователей, персональная информация и бизнес-данные оказываются в сторонних системах без согласия, нарушая GDPR и другие требования конфиденциальности.",[407,408],"image-box",{"alt":409,"src":410,"subtitle":411},"Деплой непроверенного AI-кода в продакшен","\u002Fservices\u002Fai-transition-example.webp","Что происходит, когда AI-код уходит в продакшен без аудита",[181,413,415],{"id":414},"кто-проводит-аудит","Кто проводит аудит",[174,417,418,419,423,424,427,428,431],{},"Nerdy Production возглавляет ",[213,420,422],{"href":421},"\u002Fteam\u002Fnixan","Илья Никсан"," — экс-CTO QIWI, одной из крупнейших платёжных платформ на своём рынке, где он руководил примерно 12 инженерными командами: от веб-продуктов до карточного процессинга и зоны ",[318,425],{"slug":426},"pci-dss",". Это и есть планка, по которой мы меряем свои аудиты: не «работает ли код», а «выдержал бы он проверку человека, который нёс ответственность за соответствие требованиям и отвечал за продакшен-инцидент». У нас самих нет сертификации PCI-DSS или ",[318,429],{"slug":430},"soc-2",", и мы прямо скажем, если находка выходит за рамки того, что может подтвердить аудит, — но человек, задающий планку критичности находок, управлял регулируемой инфраструктурой, а не просто читал о ней.",[174,433,434,435,437],{},"Наши инженеры ежедневно работают с AI-инструментами разработки, и именно поэтому мы знаем, где они дают сбой. Статья ",[213,436,283],{"href":282}," разбирает конкретные пробелы, которые агент без присмотра оставляет за собой: дублированное состояние, отсутствие тестов, интерфейс, который никто не проверил второй раз — те же паттерны, что мы ищем в каждом аудите, независимо от языка и фреймворка.",[181,439,441],{"id":440},"как-проходит-аудит","Как проходит аудит",[174,443,444],{},"Мы даём полный аудит с конкретными исправлениями — не просто список проблем.",[290,446,447],{},[293,448,449],{},"Доступ и определение объёма",[174,451,452],{},"Вы предоставляете нам доступ на чтение к репозиторию и развёрнутому окружению. Мы определяем объём аудита на основе ваших приоритетов: полный аудит или фокус на конкретных направлениях (безопасность, расходы или конфиденциальность). Никаких изменений в коде на этапе аудита.",[290,454,455],{"start":301},[293,456,457],{},"Автоматический анализ",[174,459,460],{},"Мы запускаем статический анализ, сканирование уязвимостей зависимостей, обнаружение секретов и профилирование расходов на API. Это ловит очевидные проблемы — известные уязвимости, открытые учётные данные, устаревшие пакеты с патчами безопасности и явные проблемы производительности.",[290,462,463],{"start":310},[293,464,465],{},"Ручная экспертная проверка",[174,467,468],{},"Наши инженеры вручную проверяют архитектуру, бизнес-логику, потоки аутентификации, API-интеграции и обработку данных. Именно здесь мы находим то, что пропускают автоматизированные инструменты: логические ошибки, пробелы в авторизации, возможности оптимизации расходов и ошибки проектирования, которые проявятся при масштабировании.",[290,470,471],{"start":325},[293,472,473],{},"Отчёт с ранжированием по критичности",[174,475,476],{},"Мы предоставляем детальный отчёт, где каждая находка размечена по критичности (критическая, высокая, средняя, низкая) и типу (безопасность, расходы, конфиденциальность, производительность). Каждая находка включает понятное описание риска, proof of concept там, где применимо, и конкретную рекомендацию по исправлению с примерами кода.",[290,478,480],{"start":479},5,[293,481,482],{},"Исправление — выбор за вами",[174,484,485,486,490],{},"Вы решаете, кто исправляет находки. Мы можем реализовать все исправления сами как проект с фиксированным объёмом — сначала критические патчи безопасности, вы проверяете каждое изменение перед мержем. Или, если вы хотите, чтобы исправления делала ваша команда, мы можем встроить в неё инженера, который уже знает ваш отчёт с находками, через ",[213,487,489],{"href":488},"\u002Fservices\u002Fteam-augmentation","расширение команды"," — вместо того чтобы просто вручить вам документ и исчезнуть. В любом случае результат — кодовая база, готовая к продакшену, которую можно деплоить с уверенностью.",[181,492,494],{"id":493},"ai-код-vs-продакшен-код","AI-код vs продакшен-код",[174,496,497],{},"Что меняется после профессионального аудита",[499,500],"features-table",{":heading":501,":rows":502,":top-left-label":503},"[{\"label\": \"После аудита\", \"hightlightLabel\": \"Production-Ready\"}, {\"label\": \"AI-код\"}, {\"label\": \"Разработка с нуля\"}]","[{\"label\": \"Безопасность\",\"cells\": [{\"text\": \"Усиленная\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Поверхностная\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Зависит от команды\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Расходы на API\",\"cells\": [{\"text\": \"Оптимизированы\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Перерасход в 5-20x\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Обычно оптимизированы\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Конфиденциальность\",\"cells\": [{\"text\": \"Соответствие GDPR\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Утечки данных\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Зависит от процесса\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Время до продакшена\",\"cells\": [{\"text\": \"2-4 недели\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Уже работает\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"3-6 месяцев\", \"color\": \"error\", \"icon\": \"lucide:x\" }]}, {\"label\": \"Стоимость запуска\",\"cells\": [{\"text\": \"Низкая (стоимость аудита)\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Бесплатно (рискованно)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Высокая (полная разработка)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Обработка ошибок\",\"cells\": [{\"text\": \"Корректное восстановление\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Падения в граничных случаях\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Обычно обработаны\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Масштабируемость\",\"cells\": [{\"text\": \"Протестирована под нагрузкой\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Не протестирована\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Архитектурно заложена\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Мониторинг\",\"cells\": [{\"text\": \"Полная наблюдаемость\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Нет или избыточный\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Стандартная настройка\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}]","Аспект",[205,505,506],{},[174,507,508,512],{},[509,510,511],"strong",{},"Суть:"," AI-код позволяет пройти 80% пути за 5% времени. Но оставшиеся 20% — безопасность, оптимизация расходов, конфиденциальность данных, обработка ошибок — отделяют демо от продакшен-приложения. Аудит закрывает этот разрыв, не выбрасывая то, что уже создано с помощью AI.",[181,514,516],{"id":515},"цены-на-аудит-ai-кода","Цены на аудит AI-кода",[174,518,519],{},"Прозрачные тарифы в зависимости от размера кодовой базы и объёма аудита",[521,522],"pricing-table",{":items":523},"[{\"title\": \"Безопасность\", \"subtitle\": \"Только критические уязвимости\", \"price\": \"ai-code-audit\u002Fsecurity\", \"terms\": \"1-2 недели\", \"lines\": [\"Сканирование уязвимостей OWASP Top 10\", \"Обнаружение секретов и учётных данных\", \"Проверка аутентификации и авторизации\", \"Проверка уязвимостей зависимостей\", \"Приоритизированный отчёт по находкам\", \"Рекомендации с примерами кода\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=ai-code-audit\", \"label\": \"Начать\"}},{\"title\": \"Оптимизация расходов\", \"subtitle\": \"Сократите расходы на API\", \"price\": \"ai-code-audit\u002Fcost-optimization\", \"terms\": \"1-2 недели\", \"lines\": [\"Профилирование платных API\", \"Выявление избыточных вызовов\", \"Стратегия кэширования и батчинга\", \"План внедрения rate limiting\", \"Оптимизация стоимости запросов\", \"Отчёт с прогнозом экономии\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=ai-code-audit\", \"label\": \"Начать\"}},{\"highlight\": \"Популярно\",\"title\": \"Полный аудит\", \"subtitle\": \"Полная готовность к продакшену\", \"price\": \"ai-code-audit\u002Ffull\", \"terms\": \"2-4 недели\", \"lines\": [\"Всё из раздела «Безопасность»\", \"Всё из раздела «Оптимизация расходов»\", \"Проверка конфиденциальности и GDPR\", \"Анализ производительности и масштабируемости\", \"Аудит инфраструктуры\", \"Детальный отчёт + внедрение исправлений\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=ai-code-audit\", \"label\": \"Начать\"}},{\"title\": \"Поддержка\", \"subtitle\": \"Постоянный аудит и мониторинг\", \"price\": \"ai-code-audit\u002Fretainer\", \"terms\": \"в месяц\", \"lines\": [\"Ежемесячные проверки безопасности\", \"Мониторинг расходов на API и алерты\", \"Ревью обновлений зависимостей\", \"Проверка безопасности новых функций\", \"Приоритетное реагирование на инциденты\", \"Прямой доступ через Slack\u002FTelegram\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=ai-code-audit\", \"label\": \"Начать\"}}]",[205,525,528],{":leading-icon":526,":title":527},"lucide:dollar-sign","Возможен индивидуальный расчёт стоимости",[174,529,530],{},"Стоимость зависит от размера кодовой базы, количества сервисов и интеграций, а также объёма аудита. Небольшое односервисное приложение с одной AI-интеграцией будет стоить ближе к нижней границе. Мультисервисная платформа с несколькими AI-провайдерами, процессингом платежей и пользовательскими данными потребует более тщательной проверки. Свяжитесь с нами для бесплатной первичной оценки.",[181,532,534],{"id":533},"часто-задаваемые-вопросы","Часто задаваемые вопросы",[174,536,537],{},"Ответы на частые вопросы об аудите AI-сгенерированного и продакшен-кода",[539,540],"questions",{":items":541},"[{\"title\":\"Моё приложение создано в Cursor \u002F Bolt \u002F Lovable — вы работаете с ними?\", \"text\": \"Да. Мы проводим аудит кода независимо от того, как он был сгенерирован. Cursor, Bolt, Lovable, Claude, ChatGPT, GitHub Copilot или любая комбинация AI-инструментов — процесс аудита одинаков. На выходе — код, и именно его мы проверяем. У нас есть опыт со всеми основными AI-инструментами, и мы знаем их типичные ошибки.\"}, {\"title\": \"Вы аудируете кодовые базы, которые не создавались с помощью AI?\", \"text\": \"Да. Аудит выявляет одни и те же категории риска — безопасность, архитектуру, производительность, корректность, зависимости, покрытие тестами — независимо от того, писал ли код AI. То, что мы называем AI-ускоренным аудитом, использует автоматизированный анализ, чтобы быстрее пройти любую кодовую базу, поэтому написанное вручную приложение получает такую же тщательную проверку в те же сроки.\"}, {\"title\": \"Нужно ли останавливать приложение на время аудита?\", \"text\": \"Нет. Аудит никак не нарушает работу приложения. Мы проверяем исходный код и можем запускать тесты только на чтение в staging-окружении. Ваше продакшен-приложение продолжает работать в штатном режиме. Если мы обнаружим критическую уязвимость с немедленным риском, мы уведомим вас сразу, чтобы вы могли принять решение.\"}, {\"title\": \"Сколько реально можно сэкономить на API?\", \"text\": \"По нашему опыту, AI-приложения переплачивают за вызовы платных API в 5-20 раз. Основная экономия — за счёт устранения избыточных вызовов к сервисам геокодинга, финансовых данных, AI-провайдерам и другим платным API, внедрения кэширования ответов, батчинга запросов и добавления rate limiting для предотвращения злоупотреблений. Мы наблюдали снижение ежемесячных счетов за API с $5 000 до менее чем $500 после оптимизации, хотя результаты зависят от конкретных паттернов использования.\"}, {\"title\": \"Вы также исправляете найденные проблемы или только делаете отчёт?\", \"text\": \"И то, и другое. Отчёт аудита содержит конкретные рекомендации по исправлению с примерами кода для каждой находки. При желании мы можем реализовать все исправления сами — это включено в тариф «Полный аудит» и доступно как дополнение к другим тарифам. Если вы хотите, чтобы исправления делала ваша команда, мы можем встроить в неё инженера через расширение команды. Вы проверяете и одобряете каждое изменение перед мержем.\"}, {\"title\": \"Можно посмотреть пример отчёта об аудите перед тем, как решиться?\", \"text\": \"Да. Запросите обезличенный пример отчёта об аудите через форму контактов, и мы вышлем его — тот же формат с ранжированием по критичности, объяснениями рисков и рекомендациями по исправлению, что и в реальном отчёте, только без данных, идентифицирующих клиента.\"}, {\"title\": \"Я не технический специалист — я пойму отчёт аудита?\", \"text\": \"Да. Каждая находка включает описание риска и его бизнес-последствий на понятном языке, а не только технический жаргон. Проблемы разнесены по критичности, чтобы вы понимали, что требует немедленного внимания, а что может подождать. В начале отчёта — executive summary с ключевыми выводами и рекомендованным планом действий.\"}]",{"title":543,"searchDepth":301,"depth":301,"links":544},"",[545,546,547,551,556,557,558,559,560],{"id":183,"depth":301,"text":184},{"id":195,"depth":301,"text":196},{"id":220,"depth":301,"text":221,"children":548},[549,550],{"id":228,"depth":310,"text":229},{"id":240,"depth":310,"text":241},{"id":247,"depth":301,"text":248,"children":552},[553,554,555],{"id":287,"depth":310,"text":288},{"id":343,"depth":310,"text":344},{"id":376,"depth":310,"text":377},{"id":414,"depth":301,"text":415},{"id":440,"depth":301,"text":441},{"id":493,"depth":301,"text":494},{"id":515,"depth":301,"text":516},{"id":533,"depth":301,"text":534},"Для команд, которые быстро выпускают продукт с Cursor, Bolt или Claude, и для основателей, унаследовавших AI-приложение: независимая проверка кода на безопасность, архитектуру и готовность к продакшену.","md",{"heading":564,"text":565,"buttons":566},"Готовы к независимому аудиту кода?","Расскажите, что у вас работает и как это было создано — AI-инструментом, командой или и тем, и другим. Мы определим объём аудита и пришлём отчёт с находками по критичности.",[567,572],{"to":215,"label":568,"leadingIcon":569,"color":570,"variant":571},"Заказать аудит","lucide:message-circle","neutral","outline",{"to":573,"label":574,"color":575,"variant":576},"\u002Fportfolio","Посмотреть наши работы","primary","solid",[578,579],{"to":215,"label":568,"leadingIcon":569,"color":575,"variant":576},{"to":580,"label":581,"color":570,"variant":571},"#цены-на-аудит-ai-кода","Посмотреть цены",{"url":583,"alt":169,"text":584},"\u002Fservices\u002Fai-code-audit.webp","От AI-прототипа до продакшена",{},"Независимый аудит AI-кода: проверяем AI-сгенерированные и vibe-coding приложения на безопасность, архитектуру и готовность к продакшену. Реальные находки.","Аудит AI-кода — проверка безопасности и качества",true,"Быстро собрали на Cursor или Claude — или достался проект, который писали не вы? Независимый разбор того, что в коде на самом деле, с фиксированным объёмом.",null,"\u002Fservices\u002Fai-code-audit",{"title":169,"description":561},"ai-code-audit","services\u002Fai-code-audit","2026-08-06","Lt4a3bPhRegMLOndsoNjGQaLSgcUllqsb03es_1nSPo",[],[599,614,627,642,656,670,686,699,712,726,739,750,760,773,785,796,805,819,832,839,853,868,881,894,905,916,927,938,951,961,974,985,999,1010,1024,1033,1044,1057,1070,1083,1096,1108,1120,1132,1144,1156,1167,1181,1192,1204,1215,1228,1240],{"slug":600,"term":601,"definition":602,"category":603,"aliases":604,"links":606,"related":610,"readMore":-1,"target":612,"hasArticle":613},"aosp","AOSP","Android Open Source Project — Android без надстройки Google, который может форкнуть кто угодно. На его форках работают кассовые терминалы, киоски и автомобильные системы, а работа на этом уровне открывает части ОС, которых прикладной разработчик не видит.","platform",[605],"Android Open Source Project",[607],{"kind":608,"url":609},"website","https:\u002F\u002Fsource.android.com\u002F",[611],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":615,"term":616,"definition":617,"category":603,"aliases":618,"links":619,"related":623,"readMore":-1,"target":626,"hasArticle":613},"app-clips","App Clips","Функция Apple, позволяющая запустить небольшую часть iOS-приложения — до 15 МБ — не устанавливая его целиком. Вызывается по QR-коду, NFC-метке или ссылке: для случаев, когда первое действие пользователя не должно требовать похода в App Store.",[],[620],{"kind":621,"url":622},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[624,625],"deep-linking","install-referrer","\u002Fglossary#app-clips",{"slug":628,"term":629,"definition":630,"category":603,"aliases":631,"links":632,"related":638,"readMore":-1,"target":641,"hasArticle":613},"bigquery","BigQuery","Аналитическое хранилище Google Cloud. Вы запускаете SQL по миллиардам строк, и они сканируются за секунды, а данные при этом лежат отдельно от машин, выполняющих запросы. Именно это снимает отчётность и исследование данных с базы, обслуживающей живой трафик.",[],[633,635],{"kind":608,"url":634},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":636,"url":637},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[639,640],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":643,"term":644,"definition":645,"category":646,"aliases":647,"links":651,"related":654,"readMore":-1,"target":655,"hasArticle":613},"ci-cd","CI\u002FCD","Автоматизация, которая собирает, тестирует и выкладывает каждое изменение без ручного запуска команд. В мобильной разработке это то, что превращает релиз в нажатие кнопки вместо полудня ожидания, пока освободится нужный человек.","practice",[648,649,650],"CI","непрерывная интеграция","непрерывная поставка",[652],{"kind":636,"url":653},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":657,"term":658,"definition":659,"category":660,"aliases":661,"links":664,"related":667,"readMore":-1,"target":669,"hasArticle":613},"crud","CRUD","Create, read, update, delete — четыре операции, стоящие почти за каждой формой и админкой. Собирательное название для рутинной половины приложения, которая управляет данными, в отличие от частей с реальной предметной логикой.","architecture",[662,663],"Create, Read, Update, Delete","создание, чтение, обновление, удаление",[665],{"kind":636,"url":666},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[668,396],"rest","\u002Fglossary#crud",{"slug":671,"term":672,"definition":673,"category":646,"aliases":674,"links":678,"related":683,"readMore":-1,"target":685,"hasArticle":613},"dev-container","Dev Container","Среда разработки, описанная один раз в devcontainer.json — ОС, инструменты и версии рантаймов, которые нужны проекту, — и открываемая одинаково внутри контейнера в редакторе любого участника, вместо инструкции по установке, которую каждый понимает по-своему.",[675,676,677],"devcontainer.json","Dev Containers","VS Code Dev Containers",[679,681],{"kind":608,"url":680},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":621,"url":682},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[684],"container-registry","\u002Fglossary#dev-container",{"slug":640,"term":687,"definition":688,"category":603,"aliases":689,"links":692,"related":697,"readMore":-1,"target":698,"hasArticle":613},"Elasticsearch","Поисковый и аналитический движок, который индексирует записи, чтобы их можно было интерактивно фильтровать и искать, а не сканировать. К нему обращаются, когда вопрос звучит как «покажи вот эти сессии с шестью фильтрами», а не «просуммируй колонку».",[690,691],"Elastic","ELK",[693,695],{"kind":608,"url":694},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":636,"url":696},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[628],"\u002Fglossary#elasticsearch",{"slug":700,"term":701,"definition":702,"category":660,"aliases":703,"links":706,"related":707,"readMore":-1,"target":711,"hasArticle":613},"fan-out","Fan-out","Чтение источника один раз и доставка каждого обновления всем подписанным на него клиентам. Наивная версия пишет подписчикам в цикле и встаёт, как только один из сокетов начинает тормозить; рабочая — держит отдельный буфер на каждого клиента и отключает тех, кто не успевает.",[704,705],"веерная рассылка","фан-аут",[],[708,709,710],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":334,"term":713,"definition":714,"category":646,"aliases":715,"links":718,"related":723,"readMore":-1,"target":725,"hasArticle":613},"GDPR","Регламент ЕС о персональных данных людей в ЕС: законное основание для сбора, настоящее согласие на трекинг, право увидеть и удалить свои данные. Он следует за вашими пользователями, а не за вашими серверами: где зарегистрирована компания, значения не имеет.",[716,717],"Общий регламент по защите данных","General Data Protection Regulation",[719,721],{"kind":608,"url":720},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":636,"url":722},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[426,430,724],"hipaa","\u002Fglossary#gdpr",{"slug":727,"term":728,"definition":729,"category":646,"aliases":730,"links":734,"related":737,"readMore":-1,"target":738,"hasArticle":613},"golden-test","Golden-тест","Тест, который отрисовывает виджет и сравнивает результат попиксельно с эталонным изображением. Во Flutter это самый дешёвый способ узнать, не сломал ли редизайн пустое состояние на 320pt, в тёмной теме, при 200% масштабе текста.",[731,732,733],"golden test","золотой тест","скриншотный тест",[735],{"kind":621,"url":736},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[643],"\u002Fglossary#golden-test",{"slug":396,"term":740,"definition":741,"category":660,"aliases":742,"links":743,"related":748,"readMore":-1,"target":749,"hasArticle":613},"GraphQL","Язык запросов к API, где клиент сам перечисляет нужные поля и получает один ответ ровно такой формы. Он снимает избыточную выдачу, к которой дрейфуют REST-эндпоинты, и добавляет собственный режим отказа: неограниченный запрос, обходящий всю модель данных.",[],[744,746],{"kind":608,"url":745},"https:\u002F\u002Fgraphql.org\u002F",{"kind":636,"url":747},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[668],"\u002Fglossary#graphql",{"slug":724,"term":751,"definition":752,"category":646,"aliases":753,"links":755,"related":758,"readMore":-1,"target":759,"hasArticle":613},"HIPAA","Закон США о защищённой медицинской информации: как её можно хранить, передавать, логировать и раскрывать. Как и PCI-DSS, это архитектурное ограничение, которое выбирают в начале, а не документ, который дописывают перед запуском.",[754],"Health Insurance Portability and Accountability Act",[756],{"kind":636,"url":757},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[426,334,430],"\u002Fglossary#hipaa",{"slug":761,"term":762,"definition":763,"category":660,"aliases":764,"links":767,"related":770,"readMore":-1,"target":772,"hasArticle":613},"headless-cms","Headless CMS","Система управления контентом с админкой и API, но без собственного фронтенда. Редакторы публикуют в одном месте, а сайт или приложение отрисовывает контент само — слой представления принадлежит вам, а не вендору CMS.",[765,766],"безголовая CMS","контентное API",[768],{"kind":636,"url":769},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[771,668],"server-side-rendering","\u002Fglossary#headless-cms",{"slug":611,"term":774,"definition":775,"category":603,"aliases":776,"links":780,"related":783,"readMore":-1,"target":784,"hasArticle":613},"Host Card Emulation","Режим, в котором Android-телефон программно эмулирует бесконтактную карту по NFC, без аппаратного защищённого элемента. Так платит приложение-кошелёк на терминале: телефон говорит с ним по тому же протоколу EMV Contactless, что и пластиковая карта.",[777,778,779],"HCE","EMV Contactless","бесконтактные платежи",[781],{"kind":621,"url":782},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[426,600],"\u002Fglossary#host-card-emulation",{"slug":786,"term":787,"definition":788,"category":603,"aliases":789,"links":790,"related":793,"readMore":-1,"target":795,"hasArticle":613},"impeller","Impeller","Движок рендеринга, на котором Flutter работает сегодня: по умолчанию на iOS с 2023 года и на Android с 2024-го. Он компилирует шейдеры заранее, а не во время первой анимации, что убрало главную видимую проблему Flutter в проде — джанк на компиляции шейдеров.",[],[791],{"kind":621,"url":792},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[794],"skia","\u002Fglossary#impeller",{"slug":625,"term":797,"definition":798,"category":603,"aliases":799,"links":800,"related":803,"readMore":-1,"target":804,"hasArticle":613},"Install Referrer","API Google Play, который передаёт только что установленному Android-приложению параметры кампании из ссылки, приведшей к установке. Android-половина отложенного диплинкинга и надёжный способ понять, откуда пришёл пользователь.",[],[801],{"kind":621,"url":802},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[624,615],"\u002Fglossary#install-referrer",{"slug":806,"term":807,"definition":808,"category":809,"aliases":810,"links":812,"related":817,"readMore":-1,"target":818,"hasArticle":613},"jwt","JWT","Подписанный токен, несущий свои данные внутри: сервер понимает, кому принадлежит запрос, не обращаясь к хранилищу сессий. Стандарт мобильной аутентификации. Подпись доказывает, что токен не меняли, но не скрывает его содержимое.","protocol",[811],"JSON Web Token",[813,815],{"kind":608,"url":814},"https:\u002F\u002Fjwt.io\u002F",{"kind":636,"url":816},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[426],"\u002Fglossary#jwt",{"slug":820,"term":821,"definition":822,"category":646,"aliases":823,"links":827,"related":830,"readMore":-1,"target":831,"hasArticle":613},"kyc","KYC","Know Your Customer — проверки личности, которые регулируемый финансовый продукт проводит, прежде чем разрешить переводить деньги: съёмка документов, liveness, санкционный и антиотмывочный скрининг. На онбординг это влияет сильнее любого дизайн-решения.",[824,825,826],"Know Your Customer","AML","KYC\u002FAML",[828],{"kind":636,"url":829},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[426,334],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":833,"category":603,"aliases":834,"links":836,"related":837,"readMore":838,"target":838,"hasArticle":613},"Переиспользование бизнес-логики на Kotlin между Android, iOS и сервером, при этом интерфейс на каждой платформе остаётся нативным. Альтернатива Flutter, когда UI обязан быть нативным, а правила за ним — нет.",[835],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":840,"term":841,"definition":842,"category":843,"aliases":844,"links":847,"related":850,"readMore":-1,"target":852,"hasArticle":613},"mvp","MVP","Минимальная версия продукта, которую можно показать реальным пользователям и которая при этом отвечает на вопрос, ради которого его делали. Решение об объёме, а не о качестве: MVP всё равно обязан работать.","business",[845,846],"минимально жизнеспособный продукт","minimum viable product",[848],{"kind":636,"url":849},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[851],"white-label","\u002Fglossary#mvp",{"slug":854,"term":855,"definition":856,"category":809,"aliases":857,"links":861,"related":866,"readMore":-1,"target":867,"hasArticle":613},"oauth","OAuth","Стандарт, на котором держатся «Вход через Apple», Google и остальные: пользователь авторизует ваше приложение у провайдера, которому уже доверяет, а приложение получает токен вместо пароля. Никто не заводит новый пароль, и вы его не храните.",[858,859,860],"OAuth 2.0","вход через соцсети","Sign in with Apple",[862,864],{"kind":608,"url":863},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":636,"url":865},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[806],"\u002Fglossary#oauth",{"slug":426,"term":869,"definition":870,"category":646,"aliases":871,"links":874,"related":879,"readMore":-1,"target":880,"hasArticle":613},"PCI-DSS","Стандарт безопасности карточной индустрии, обязательный для всех, кто хранит, обрабатывает или передаёт данные карт. Большинство приложений намеренно остаются вне зоны его действия, отдавая ввод карты сертифицированному платёжному провайдеру.",[872,873],"PCI DSS","Payment Card Industry Data Security Standard",[875,877],{"kind":608,"url":876},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":636,"url":878},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[806],"\u002Fglossary#pci-dss",{"slug":882,"term":883,"definition":884,"category":843,"aliases":885,"links":888,"related":891,"readMore":-1,"target":893,"hasArticle":613},"product-market-fit","Product-market fit","Момент, когда продукт доказуемо нашёл своих людей: они им пользуются, возвращаются и платят. До него разработка отвечает на вопрос, после — на спрос.",[886,887],"PMF","соответствие продукта рынку",[889],{"kind":636,"url":890},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[840,892],"time-to-market","\u002Fglossary#product-market-fit",{"slug":320,"term":895,"definition":896,"category":646,"aliases":897,"links":900,"related":903,"readMore":-1,"target":904,"hasArticle":613},"Prompt injection","Атака, при которой текст от пользователя языковая модель читает как инструкции, а не как данные, и уходит в обход собственных правил. Родственник SQL-инъекции в эпоху LLM: возникает везде, где пользовательский ввод склеивается в промпт.",[898,899],"инъекция промпта","инъекция в промпт",[901],{"kind":636,"url":902},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[363],"\u002Fglossary#prompt-injection",{"slug":709,"term":906,"definition":907,"category":660,"aliases":908,"links":911,"related":914,"readMore":-1,"target":915,"hasArticle":613},"Pub\u002FSub","Шаблон обмена сообщениями: производитель публикует событие, а любое число потребителей независимо читает его через стоящий между ними брокер. Производитель никогда их не ждёт — так путь запроса остаётся быстрым, а более медленная работа выполняется в фоне.",[909,910],"публикация\u002Fподписка","Google Cloud Pub\u002FSub",[912],{"kind":636,"url":913},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":668,"term":917,"definition":918,"category":660,"aliases":919,"links":922,"related":925,"readMore":-1,"target":926,"hasArticle":613},"REST","Общепринятый стиль HTTP-API: URL называет ресурс, а HTTP-метод говорит, что с ним сделать. Способ по умолчанию, которым приложение общается с бэкендом, и то, что ожидает найти большинство сторонних интеграций.",[920,921],"REST API","Representational State Transfer",[923],{"kind":636,"url":924},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[708,710],"\u002Fglossary#rest",{"slug":430,"term":928,"definition":929,"category":646,"aliases":930,"links":933,"related":936,"readMore":-1,"target":937,"hasArticle":613},"SOC 2","Отчёт внешнего аудитора о том, как компания обращается с данными клиентов — безопасность, доступность, конфиденциальность, — а не сертификат, который можно купить. Корпоративные заказчики его требуют, а архитектуру он ограничивает задолго до самого аудита.",[931,932],"SOC2","System and Organization Controls",[934],{"kind":636,"url":935},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[426,334,724],"\u002Fglossary#soc-2",{"slug":939,"term":940,"definition":941,"category":843,"aliases":942,"links":945,"related":948,"readMore":-1,"target":950,"hasArticle":613},"saas","SaaS","Софт, который продают как постоянную подписку на размещённый у поставщика продукт, а не как разовую лицензию для установки у себя. Поставщик держит серверы, непрерывно выкатывает обновления и берёт плату за пользователя или за объём.",[943,944],"Software as a Service","ПО как услуга",[946],{"kind":636,"url":947},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[949,851],"multi-tenancy","\u002Fglossary#saas",{"slug":710,"term":952,"definition":953,"category":809,"aliases":954,"links":956,"related":959,"readMore":-1,"target":960,"hasArticle":613},"Server-Sent Events","Односторонний поток от сервера к клиенту поверх обычного HTTP-соединения. Проще, чем WebSocket, и достаточен там, где только серверу есть что сказать: прогресс операции, ответ AI, приходящий токен за токеном.",[955],"SSE",[957],{"kind":636,"url":958},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[708,668],"\u002Fglossary#server-sent-events",{"slug":794,"term":962,"definition":963,"category":603,"aliases":964,"links":967,"related":972,"readMore":-1,"target":973,"hasArticle":613},"Skia","Открытая 2D-графическая библиотека Google, которая рисует Chrome, Android и — до появления Impeller — каждый кадр Flutter. Она умеет выводить не только на экран, но и в PDF: именно это делает «печать в PDF» в Chrome.",[965,966],"Skia Graphics Engine","skia-safe",[968,970],{"kind":608,"url":969},"https:\u002F\u002Fskia.org\u002F",{"kind":636,"url":971},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[786],"\u002Fglossary#skia",{"slug":975,"term":976,"definition":977,"category":843,"aliases":978,"links":981,"related":982,"readMore":-1,"target":984,"hasArticle":613},"staff-augmentation","Staff augmentation","Модель найма, при которой инженеры внешнего партнёра входят в вашу команду и работают под вашим управлением — в вашем репозитории, ваших спринтах, вашем процессе, — а не сдают отдельный проект. Вы покупаете ресурс; код и контекст остаются у вас.",[979,489,980],"аутстаффинг","выделенные разработчики",[],[983,892],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":986,"term":987,"definition":988,"category":809,"aliases":989,"links":993,"related":996,"readMore":-1,"target":998,"hasArticle":613},"tls","TLS","Слой шифрования под HTTPS. Он подтверждает, что сервер именно тот, о ком говорит его сертификат, согласует свежий ключ на сессию и шифрует всё дальнейшее — сеть между вами видит шифртекст и не может незаметно его изменить.",[990,991,992],"SSL","HTTPS","Transport Layer Security",[994],{"kind":636,"url":995},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[997,806],"end-to-end-encryption","\u002Fglossary#tls",{"slug":892,"term":1000,"definition":1001,"category":843,"aliases":1002,"links":1005,"related":1008,"readMore":-1,"target":1009,"hasArticle":613},"Time to market","Время от решения строить продукт до момента, когда им пользуются настоящие люди. Большинство споров о стеке и объёме работ — на самом деле споры об этом числе: каждая сэкономленная неделя — это неделя выручки, обратной связи и позиции на рынке.",[1003,1004],"TTM","время выхода на рынок",[1006],{"kind":636,"url":1007},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[840,983],"\u002Fglossary#time-to-market",{"slug":1011,"term":1012,"definition":1013,"category":809,"aliases":1014,"links":1016,"related":1021,"readMore":-1,"target":1023,"hasArticle":613},"webrtc","WebRTC","Браузерный и мобильный стандарт для передачи аудио, видео и данных напрямую между двумя устройствами; серверы участвуют только в том, чтобы их познакомить. На нём строят видеозвонок внутри приложения, когда не берут готовый SDK.",[1015],"Web Real-Time Communication",[1017,1019],{"kind":608,"url":1018},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":636,"url":1020},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[1022,708],"xmpp","\u002Fglossary#webrtc",{"slug":708,"term":1025,"definition":1026,"category":809,"aliases":1027,"links":1028,"related":1031,"readMore":-1,"target":1032,"hasArticle":613},"WebSocket","Протокол, который держит одно соединение между клиентом и сервером открытым, чтобы любая сторона могла отправить данные в любой момент, а не клиент спрашивал снова и снова. На нём работают живые котировки, чаты и статусы присутствия.",[],[1029],{"kind":636,"url":1030},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[710,668],"\u002Fglossary#websocket",{"slug":851,"term":1034,"definition":1035,"category":843,"aliases":1036,"links":1039,"related":1042,"readMore":1043,"target":1043,"hasArticle":588},"White-label","Один продукт, выпускаемый под многими брендами. White-label платформа собирает каждому клиенту готовое к публикации приложение со своим названием, оформлением и контентом из общей кодовой базы, а не форкает проект под заказчика.",[1037,1038],"белый лейбл","мультитенантное приложение",[1040],{"kind":636,"url":1041},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[840],"\u002Fglossary\u002Fwhite-label",{"slug":1022,"term":1045,"definition":1046,"category":809,"aliases":1047,"links":1050,"related":1055,"readMore":-1,"target":1056,"hasArticle":613},"XMPP","Открытый федеративный протокол обмена сообщениями и давняя альтернатива тому, чтобы писать чат-бэкенд самому или арендовать чужой. Он покрывает статусы присутствия, индикаторы набора и передачу файлов, а зрелые клиентские библиотеки есть под любую платформу.",[1048,1049],"Jabber","Extensible Messaging and Presence Protocol",[1051,1053],{"kind":608,"url":1052},"https:\u002F\u002Fxmpp.org\u002F",{"kind":636,"url":1054},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[1011,708],"\u002Fglossary#xmpp",{"slug":1058,"term":1059,"definition":1060,"category":843,"aliases":1061,"links":1065,"related":1068,"readMore":-1,"target":1069,"hasArticle":613},"in-app-purchase","Встроенные покупки","Продажа цифровых товаров и подписок через биллинг Apple и Google, который оба стора требуют для цифрового контента и с которого берут комиссию. Сложность никогда не в самой покупке, а в её восстановлении на новом устройстве и в честном учёте прав доступа.",[1062,1063,1064],"in-app purchase","IAP","внутренние покупки",[1066],{"kind":621,"url":1067},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[882],"\u002Fglossary#in-app-purchase",{"slug":624,"term":1071,"definition":1072,"category":603,"aliases":1073,"links":1078,"related":1081,"readMore":1082,"target":1082,"hasArticle":588},"Диплинкинг","Ссылка, которая открывает конкретный экран внутри установленного приложения, а не его главную или веб-страницу. Отложенный диплинкинг переживает установку: нажатие, прошедшее через магазин приложений, всё равно приводит на нужный экран.",[1074,1075,1076,1077],"deep linking","отложенный диплинкинг","Universal Links","Android App Links",[1079],{"kind":636,"url":1080},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[615,625],"\u002Fglossary\u002Fdeep-linking",{"slug":1084,"term":1085,"definition":1086,"category":660,"aliases":1087,"links":1091,"related":1094,"readMore":-1,"target":1095,"hasArticle":613},"multi-arch-image","Мультиархитектурный образ","Один тег образа, который разрешается в разные бинарники для каждой архитектуры процессора — обычно это пара linux\u002Famd64 и linux\u002Farm64, — так что один и тот же docker pull работает без изменений и на серверах Intel\u002FAMD, и на ноутбуках с Apple Silicon.",[1088,1089,1090],"мультиарх-сборка","multi-arch build","linux\u002Famd64 + linux\u002Farm64",[1092],{"kind":621,"url":1093},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[684],"\u002Fglossary#multi-arch-image",{"slug":949,"term":1097,"definition":1098,"category":660,"aliases":1099,"links":1102,"related":1105,"readMore":-1,"target":1107,"hasArticle":613},"Мультитенантность","Один развёрнутый бэкенд обслуживает много клиентов, и каждый видит только свои данные, конфигурацию и включённые функции, потому что контекст тенанта определяется для каждого запроса. Именно это делает линейку брендированных приложений одним продуктом, а не набором форков.",[949,1100,1101],"мультиарендность","тенант",[1103],{"kind":636,"url":1104},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[851,1106],"feature-flags","\u002Fglossary#multi-tenancy",{"slug":639,"term":1109,"definition":1110,"category":660,"aliases":1111,"links":1115,"related":1118,"readMore":-1,"target":1119,"hasArticle":613},"Объектное хранилище","Хранилище, которое держит файл целиком под ключом, а не в дереве файловой системы, — Amazon S3 и множество сервисов, совместимых с его API. Дешёвое, практически безграничное, привычное место для сырых событий, бэкапов и медиа: пишется один раз, читается редко, хранится вечно.",[1112,1113,1114],"S3","S3-совместимое хранилище","блоб-хранилище",[1116],{"kind":636,"url":1117},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[628],"\u002Fglossary#object-storage",{"slug":363,"term":1121,"definition":1122,"category":646,"aliases":1123,"links":1127,"related":1130,"readMore":-1,"target":1131,"hasArticle":613},"Ограничение частоты запросов","Предел на число запросов от одного клиента за заданный интервал. Именно он не даёт одному увлечённому пользователю, скраперу или боту потратить месячный бюджет платного API за вечер, и стоять он должен на вашей стороне интеграции.",[1124,1125,1126],"rate limiting","рейт-лимит","троттлинг",[1128],{"kind":636,"url":1129},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[320],"\u002Fglossary#rate-limiting",{"slug":1133,"term":1134,"definition":1135,"category":603,"aliases":1136,"links":1139,"related":1142,"readMore":-1,"target":1143,"hasArticle":613},"platform-channels","Платформенные каналы","Мост, через который Flutter-приложение вызывает нативный код iOS и Android — Keychain и Keystore, биометрию, платёжные шторки, любой SDK без Dart-пакета. Работа рутинная, но настоящая, и первое место, где споткнётся инженер, не выходивший за пределы Dart.",[1137,1138],"platform channels","method channel",[1140],{"kind":621,"url":1141},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":1145,"term":1146,"definition":1147,"category":809,"aliases":1148,"links":1151,"related":1154,"readMore":-1,"target":1155,"hasArticle":613},"post-quantum-cryptography","Постквантовая криптография","Алгоритмы шифрования, рассчитанные на устойчивость к будущему квантовому компьютеру; стандарты уже финализированы NIST. Мигрировать нужно до появления железа: трафик, записанный сегодня, расшифруют, когда такая машина появится.",[1149,1150],"PQC","постквантовое шифрование",[1152],{"kind":636,"url":1153},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[986,997],"\u002Fglossary#post-quantum-cryptography",{"slug":1157,"term":1158,"definition":1159,"category":646,"aliases":1160,"links":1164,"related":1165,"readMore":-1,"target":1166,"hasArticle":613},"staged-rollout","Поэтапная раскатка","Релиз сначала на небольшой процент пользователей и расширение только тогда, когда доля сессий без падений держится. Плохая сборка, пойманная на десяти процентах, — испорченный вечер; она же на ста процентах — испорченная неделя.",[1161,1162,1163],"staged rollout","phased release","канареечный релиз",[],[1106,643],"\u002Fglossary#staged-rollout",{"slug":684,"term":1168,"definition":1169,"category":660,"aliases":1170,"links":1176,"related":1179,"readMore":-1,"target":1180,"hasArticle":613},"Реестр контейнеров","Хранилище образов контейнеров, адресуемых по имени и тегу, — Docker Hub, GitHub Container Registry или собственный реестр облачного провайдера. Публикация сборки в реестр превращает «у меня работает» в образ, который любой может скачать и запустить без изменений.",[1171,1172,1173,1174,1175],"реестр образов","Docker registry","GHCR","ghcr.io","container registry",[1177],{"kind":621,"url":1178},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[671,1084],"\u002Fglossary#container-registry",{"slug":771,"term":1182,"definition":1183,"category":660,"aliases":1184,"links":1187,"related":1190,"readMore":-1,"target":1191,"hasArticle":613},"Серверный рендеринг","Сборка страницы в готовый HTML на сервере, чтобы первый же ответ содержал контент, заголовки, метатеги и структурированные данные. Краулеры, превью ссылок и медленные устройства читают это, не выполняя JavaScript.",[1185,1186],"SSR","server-side rendering",[1188],{"kind":636,"url":1189},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[761],"\u002Fglossary#server-side-rendering",{"slug":997,"term":1193,"definition":1194,"category":660,"aliases":1195,"links":1199,"related":1202,"readMore":-1,"target":1203,"hasArticle":613},"Сквозное шифрование","Шифрование, которое накладывается на устройстве отправителя и снимается только на устройстве получателя, так что сервис, передающий сообщение, не может его прочитать — ни по решению суда, ни после взлома. Оно защищает содержимое, но никогда — метаданные.",[1196,1197,1198],"E2EE","end-to-end encryption","оконечное шифрование",[1200],{"kind":636,"url":1201},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[986,806],"\u002Fglossary#end-to-end-encryption",{"slug":983,"term":1205,"definition":1206,"category":843,"aliases":1207,"links":1210,"related":1213,"readMore":-1,"target":1214,"hasArticle":613},"Совокупная стоимость владения","Во что продукт обходится за всю жизнь, а не только на этапе разработки: поддержка, обновления, ежегодные миграции на новые ОС и правила сторов, вторая команда, чтобы две кодовые базы не расходились. Обычно больше сметы на разработку и почти никогда в неё не входит.",[1208,1209],"TCO","total cost of ownership",[1211],{"kind":636,"url":1212},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[892],"\u002Fglossary#total-cost-of-ownership",{"slug":1216,"term":1217,"definition":1218,"category":660,"aliases":1219,"links":1223,"related":1226,"readMore":-1,"target":1227,"hasArticle":613},"state-management","Управление состоянием","То, как приложение решает, где живёт значение, кому позволено его менять и какие части экрана перерисовываются, когда оно меняется. Во Flutter выбор между Riverpod, BLoC и Provider — одно из первых архитектурных решений и одно из самых трудных для пересмотра.",[1220,1221,1222],"state management","BLoC","Riverpod",[1224],{"kind":621,"url":1225},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[727],"\u002Fglossary#state-management",{"slug":1106,"term":1229,"definition":1230,"category":646,"aliases":1231,"links":1235,"related":1238,"readMore":-1,"target":1239,"hasArticle":613},"Фиче-флаги","Переключатели, которые включают и выключают функциональность из конфигурации, а не из релиза. Один бинарник ведёт себя по-разному для разных брендов, рынков и пользователей, а рискованную фичу можно погасить, не отправляя новую сборку на ревью.",[1232,1233,1234],"feature flags","фиче-флаги","feature toggle",[1236],{"kind":636,"url":1237},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[1157,851,949],"\u002Fglossary#feature-flags",{"slug":1241,"term":1242,"definition":1243,"category":660,"aliases":1244,"links":1248,"related":1251,"readMore":-1,"target":1252,"hasArticle":613},"floating-point","Числа с плавающей точкой","Двоичный формат IEEE 754, стоящий за double и float. Он не хранит 0.1 точно, поэтому 0.1 + 0.2 даёт 0.30000000000000004 — незаметно в графике и фатально в деньгах, которым место в целых минорных единицах или в decimal-типе.",[1245,1246,1247],"IEEE 754","double","плавающая запятая",[1249],{"kind":636,"url":1250},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point"]