[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fglossary\u002Fdeep-linking":167,"glossary":422},[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,"aliases":170,"body":175,"category":401,"definition":402,"description":393,"extension":403,"links":404,"meta":408,"metaDescription":409,"metaTitle":410,"navigation":411,"ogDescription":412,"path":413,"related":414,"seo":415,"slug":416,"stem":417,"technology":418,"term":419,"updated":420,"__hash__":421},"glossary_ru\u002Fglossary\u002Fdeep-linking.md","Deep Linking",[171,172,173,174],"deep linking","отложенный диплинкинг","Universal Links","Android App Links",{"type":176,"value":177,"toc":392},"minimark",[178,183,187,190,202,220,224,295,298,302,305,311,324,335,339,370,374,377,383],[179,180,182],"h2",{"id":181},"простой-случай","Простой случай",[184,185,186],"p",{},"Диплинк — это URL, называющий место внутри приложения, а не страницу в вебе: товар, приглашение, ветку переписки, сброс пароля. Если приложение установлено, операционная система отдаёт ссылку ему, и оно открывает нужный экран вместо того, чтобы браузер открыл страницу.",[184,188,189],{},"Механизма два, и они не взаимозаменяемы.",[184,191,192,196,197,201],{},[193,194,195],"strong",{},"Собственные URL-схемы"," — ",[198,199,200],"code",{},"myapp:\u002F\u002Fproduct\u002F42"," — более старый вариант. Любое приложение может заявить любую схему, и никто эту заявку не проверяет, так что два приложения могут претендовать на одну и ту же. Хуже другое: за пределами устройства такой URL не значит ничего. Без установленного приложения нажатие не ведёт никуда, и опубликовать его там, где ссылку может открыть браузер, нельзя. Схемы остаются уместны для передачи управления между приложениями на одном устройстве; как основа для ссылок, которые вы отправляете людям, они плохи.",[184,203,204,207,208,211,212,215,216,219],{},[193,205,206],{},"Universal Links на iOS и App Links на Android"," — обычные ",[198,209,210],{},"https:\u002F\u002F","-адреса, права на которые приложение заявляет, отдавая подписанный файл-ассоциацию со своего домена: ",[198,213,214],{},"apple-app-site-association"," и ",[198,217,218],{},"assetlinks.json"," соответственно. Платформа скачивает этот файл и проверяет заявку, поэтому перехватить ваши ссылки нельзя, а тот же самый URL продолжает работать как веб-страница для всех, у кого приложения нет. Именно на них и нужно строить.",[179,221,223],{"id":222},"три-разные-вещи-которые-называют-диплинком","Три разные вещи, которые называют «диплинком»",[225,226,227,242],"table",{},[228,229,230],"thead",{},[231,232,233,236,239],"tr",{},[234,235],"th",{},[234,237,238],{},"Что делает",[234,240,241],{},"Если приложение не установлено",[243,244,245,262,277],"tbody",{},[231,246,247,253,259],{},[248,249,250],"td",{},[193,251,252],{},"Своя схема",[248,254,255,256],{},"Открывает экран через приватный ",[198,257,258],{},"myapp:\u002F\u002F",[248,260,261],{},"Ничего не происходит — ссылка в никуда",[231,263,264,269,274],{},[248,265,266],{},[193,267,268],{},"Universal \u002F App Link",[248,270,271,272],{},"Открывает экран через проверенный ",[198,273,210],{},[248,275,276],{},"Откроется ваша веб-страница",[231,278,279,284,292],{},[248,280,281],{},[193,282,283],{},"Отложенный диплинк",[248,285,286,287,291],{},"Открывает экран ",[288,289,290],"em",{},"после"," установки",[248,293,294],{},"Уводит в магазин, а при первом запуске восстанавливает адрес назначения",[184,296,297],{},"Большинство споров о диплинках — это ситуация, когда один человек говорит про одно из трёх, а слышат другое. Первые два — вопрос конфигурации. Третий — настоящая инженерная задача.",[179,299,301],{"id":300},"сложный-случай-пережить-установку","Сложный случай: пережить установку",[184,303,304],{},"Всё сказанное выше предполагает, что приложение уже установлено. Если нет, нажатие уводит пользователя в App Store или Google Play, а запускается в итоге свежая установка, ничего не помнящая о том, на что нажимали. Человек оказывается на безликой главной, и то, чего он хотел, потеряно.",[184,306,307,310],{},[193,308,309],{},"Отложенный"," диплинкинг — это та часть, которая переносит адрес назначения через разрыв, и сложна она по конкретной причине: между нажатием и первым запуском нет общего состояния. Только что установленное приложение никогда не видело той сессии браузера, с которой всё началось, так что полезную нагрузку приходится протаскивать через границу ОС, построенную ровно для того, чтобы этого не позволять.",[184,312,313,314,318,319,323],{},"Механизмы у каждой платформы свои. На iOS ссылку до появления полного приложения способен перехватить ",[315,316],"term",{"slug":317},"app-clips"," и передать её через общий контейнер. На Android параметры кампании при первом запуске детерминированно отдаёт API ",[315,320,322],{"slug":321},"install-referrer","install referrer",". Firebase Dynamic Links раньше прятал оба за одним SDK и закрылся в августе 2025 года — поэтому вопрос снова открыт, а не решён.",[184,325,326,327,330,331,334],{},"Два обходных пути, которые выглядят проще, стоит назвать, чтобы от них отказаться. ",[193,328,329],{},"Фингерпринтинг устройства"," сопоставляет браузер и приложение по IP, размеру экрана и локали в пределах короткого временного окна; он плохо работает в общих и операторских сетях, а вероятностное сопоставление пользователей — ровно тот приём, против которого направлены правила приватности платформ. ",[193,332,333],{},"Сопоставление через буфер обмена"," копирует нагрузку и читает её на запуске; с iOS 14 пользователю показывается баннер о вставке, а любое другое копирование в промежутке нагрузку уничтожает. И то и другое — догадки, выдаваемые за инфраструктуру.",[179,336,338],{"id":337},"где-это-ломается-на-практике","Где это ломается на практике",[340,341,342,349,355,364],"ul",{},[343,344,345,348],"li",{},[193,346,347],{},"Файл-ассоциация."," Редирект, неверный content type или залежавшийся кеш — и платформа тихо перестаёт признавать вашу заявку. Симптом — не ошибка, а ссылки, открывающие сайт вместо приложения: это легко не заметить при тестировании и дорого в проде.",[343,350,351,354],{},[193,352,353],{},"Встроенные браузеры."," Ссылки, нажатые внутри соцсетей, часто открываются во встроенном webview, который вообще не передаёт управление ОС, — universal link, работающий из мессенджера, из ленты не делает ничего.",[343,356,357,360,361,363],{},[193,358,359],{},"Нет веб-фолбэка."," Если за ",[198,362,210],{},"-адресом нет настоящей страницы, все, у кого нет приложения, получают 404 — ровно та аудитория, которую вы пытались привести.",[343,365,366,369],{},[193,367,368],{},"Атрибуция."," Если реферер не переживает установку, понять, какая кампания дала какого пользователя, невозможно, и цифры привлечения, которые вы показываете, — оценки.",[179,371,373],{"id":372},"когда-это-стоит-хлопот","Когда это стоит хлопот",[184,375,376],{},"Ссылка, высаживающая человека на безликую главную, тратит впустую единственный момент намерения, который вам достался. Контент, которым делятся, приглашения, сброс пароля и любая платная кампания держатся на том, что адрес назначения переживает дорогу, — как и понимание того, сколько вы заплатили за установку.",[184,378,379,380,382],{},"Стоит не всегда. Приложению, вся ценность которого и так за логином, куда все всё равно доходят, или продукту без шеринга и без платного привлечения можно выйти без отложенной обработки и ничего не потерять. Цена реальна: таргет ",[315,381],{"slug":317}," — это второй бинарник, который надо собирать, подписывать и держать в пределах 15 МБ.",[184,384,385,386,391],{},"Полную реализацию — обе платформы и очередь отложенных ссылок, которая ждёт логина, прежде чем выполнить переход, — мы разобрали в статье ",[387,388,390],"a",{"href":389},"\u002Fblog\u002Fdeferred-deep-linking-app-clips-install-referrer","отложенный диплинкинг после Firebase Dynamic Links",".",{"title":393,"searchDepth":394,"depth":394,"links":395},"",2,[396,397,398,399,400],{"id":181,"depth":394,"text":182},{"id":222,"depth":394,"text":223},{"id":300,"depth":394,"text":301},{"id":337,"depth":394,"text":338},{"id":372,"depth":394,"text":373},"platform","Ссылка, которая открывает конкретный экран внутри установленного приложения, а не его главную или веб-страницу. Отложенный диплинкинг переживает установку: нажатие, прошедшее через магазин приложений, всё равно приводит на нужный экран.","md",[405],{"type":406,"url":407},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",{},"Диплинк ведёт нажатие на нужный экран приложения. Что добавляет отложенный диплинкинг и где оба подхода тихо ломаются на iOS и Android.","Диплинкинг — что это и где он ломается",true,"Нажатие должно приводить на нужный экран, а не на главный. Что делает диплинкинг, что добавляет отложенный и где оба незаметно ломаются.","\u002Fglossary\u002Fdeep-linking",[317,321],{"description":393},"deep-linking","glossary\u002Fdeep-linking",null,"Диплинкинг","2026-07-31","WS89ozoTqnuOg1crCfqXMpE4jRfrhAfnYrCexhwAH2Q",[423,437,447,461,475,490,506,519,532,549,562,573,583,596,608,619,628,642,655,662,676,691,704,717,730,741,752,763,776,786,799,811,825,836,850,859,870,883,896,901,914,926,938,950,962,974,985,999,1010,1022,1033,1046,1058],{"slug":424,"term":425,"definition":426,"category":401,"aliases":427,"links":429,"related":433,"readMore":-1,"target":435,"hasArticle":436},"aosp","AOSP","Android Open Source Project — Android без надстройки Google, который может форкнуть кто угодно. На его форках работают кассовые терминалы, киоски и автомобильные системы, а работа на этом уровне открывает части ОС, которых прикладной разработчик не видит.",[428],"Android Open Source Project",[430],{"kind":431,"url":432},"website","https:\u002F\u002Fsource.android.com\u002F",[434],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":317,"term":438,"definition":439,"category":401,"aliases":440,"links":441,"related":445,"readMore":-1,"target":446,"hasArticle":436},"App Clips","Функция Apple, позволяющая запустить небольшую часть iOS-приложения — до 15 МБ — не устанавливая его целиком. Вызывается по QR-коду, NFC-метке или ссылке: для случаев, когда первое действие пользователя не должно требовать похода в App Store.",[],[442],{"kind":443,"url":444},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[416,321],"\u002Fglossary#app-clips",{"slug":448,"term":449,"definition":450,"category":401,"aliases":451,"links":452,"related":457,"readMore":-1,"target":460,"hasArticle":436},"bigquery","BigQuery","Аналитическое хранилище Google Cloud. Вы запускаете SQL по миллиардам строк, и они сканируются за секунды, а данные при этом лежат отдельно от машин, выполняющих запросы. Именно это снимает отчётность и исследование данных с базы, обслуживающей живой трафик.",[],[453,455],{"kind":431,"url":454},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":406,"url":456},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[458,459],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":462,"term":463,"definition":464,"category":465,"aliases":466,"links":470,"related":473,"readMore":-1,"target":474,"hasArticle":436},"ci-cd","CI\u002FCD","Автоматизация, которая собирает, тестирует и выкладывает каждое изменение без ручного запуска команд. В мобильной разработке это то, что превращает релиз в нажатие кнопки вместо полудня ожидания, пока освободится нужный человек.","practice",[467,468,469],"CI","непрерывная интеграция","непрерывная поставка",[471],{"kind":406,"url":472},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":476,"term":477,"definition":478,"category":479,"aliases":480,"links":483,"related":486,"readMore":-1,"target":489,"hasArticle":436},"crud","CRUD","Create, read, update, delete — четыре операции, стоящие почти за каждой формой и админкой. Собирательное название для рутинной половины приложения, которая управляет данными, в отличие от частей с реальной предметной логикой.","architecture",[481,482],"Create, Read, Update, Delete","создание, чтение, обновление, удаление",[484],{"kind":406,"url":485},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[487,488],"rest","graphql","\u002Fglossary#crud",{"slug":491,"term":492,"definition":493,"category":465,"aliases":494,"links":498,"related":503,"readMore":-1,"target":505,"hasArticle":436},"dev-container","Dev Container","Среда разработки, описанная один раз в devcontainer.json — ОС, инструменты и версии рантаймов, которые нужны проекту, — и открываемая одинаково внутри контейнера в редакторе любого участника, вместо инструкции по установке, которую каждый понимает по-своему.",[495,496,497],"devcontainer.json","Dev Containers","VS Code Dev Containers",[499,501],{"kind":431,"url":500},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":443,"url":502},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[504],"container-registry","\u002Fglossary#dev-container",{"slug":459,"term":507,"definition":508,"category":401,"aliases":509,"links":512,"related":517,"readMore":-1,"target":518,"hasArticle":436},"Elasticsearch","Поисковый и аналитический движок, который индексирует записи, чтобы их можно было интерактивно фильтровать и искать, а не сканировать. К нему обращаются, когда вопрос звучит как «покажи вот эти сессии с шестью фильтрами», а не «просуммируй колонку».",[510,511],"Elastic","ELK",[513,515],{"kind":431,"url":514},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":406,"url":516},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[448],"\u002Fglossary#elasticsearch",{"slug":520,"term":521,"definition":522,"category":479,"aliases":523,"links":526,"related":527,"readMore":-1,"target":531,"hasArticle":436},"fan-out","Fan-out","Чтение источника один раз и доставка каждого обновления всем подписанным на него клиентам. Наивная версия пишет подписчикам в цикле и встаёт, как только один из сокетов начинает тормозить; рабочая — держит отдельный буфер на каждого клиента и отключает тех, кто не успевает.",[524,525],"веерная рассылка","фан-аут",[],[528,529,530],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":533,"term":534,"definition":535,"category":465,"aliases":536,"links":539,"related":544,"readMore":-1,"target":548,"hasArticle":436},"gdpr","GDPR","Регламент ЕС о персональных данных людей в ЕС: законное основание для сбора, настоящее согласие на трекинг, право увидеть и удалить свои данные. Он следует за вашими пользователями, а не за вашими серверами: где зарегистрирована компания, значения не имеет.",[537,538],"Общий регламент по защите данных","General Data Protection Regulation",[540,542],{"kind":431,"url":541},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":406,"url":543},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[545,546,547],"pci-dss","soc-2","hipaa","\u002Fglossary#gdpr",{"slug":550,"term":551,"definition":552,"category":465,"aliases":553,"links":557,"related":560,"readMore":-1,"target":561,"hasArticle":436},"golden-test","Golden-тест","Тест, который отрисовывает виджет и сравнивает результат попиксельно с эталонным изображением. Во Flutter это самый дешёвый способ узнать, не сломал ли редизайн пустое состояние на 320pt, в тёмной теме, при 200% масштабе текста.",[554,555,556],"golden test","золотой тест","скриншотный тест",[558],{"kind":443,"url":559},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[462],"\u002Fglossary#golden-test",{"slug":488,"term":563,"definition":564,"category":479,"aliases":565,"links":566,"related":571,"readMore":-1,"target":572,"hasArticle":436},"GraphQL","Язык запросов к API, где клиент сам перечисляет нужные поля и получает один ответ ровно такой формы. Он снимает избыточную выдачу, к которой дрейфуют REST-эндпоинты, и добавляет собственный режим отказа: неограниченный запрос, обходящий всю модель данных.",[],[567,569],{"kind":431,"url":568},"https:\u002F\u002Fgraphql.org\u002F",{"kind":406,"url":570},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[487],"\u002Fglossary#graphql",{"slug":547,"term":574,"definition":575,"category":465,"aliases":576,"links":578,"related":581,"readMore":-1,"target":582,"hasArticle":436},"HIPAA","Закон США о защищённой медицинской информации: как её можно хранить, передавать, логировать и раскрывать. Как и PCI-DSS, это архитектурное ограничение, которое выбирают в начале, а не документ, который дописывают перед запуском.",[577],"Health Insurance Portability and Accountability Act",[579],{"kind":406,"url":580},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[545,533,546],"\u002Fglossary#hipaa",{"slug":584,"term":585,"definition":586,"category":479,"aliases":587,"links":590,"related":593,"readMore":-1,"target":595,"hasArticle":436},"headless-cms","Headless CMS","Система управления контентом с админкой и API, но без собственного фронтенда. Редакторы публикуют в одном месте, а сайт или приложение отрисовывает контент само — слой представления принадлежит вам, а не вендору CMS.",[588,589],"безголовая CMS","контентное API",[591],{"kind":406,"url":592},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[594,487],"server-side-rendering","\u002Fglossary#headless-cms",{"slug":434,"term":597,"definition":598,"category":401,"aliases":599,"links":603,"related":606,"readMore":-1,"target":607,"hasArticle":436},"Host Card Emulation","Режим, в котором Android-телефон программно эмулирует бесконтактную карту по NFC, без аппаратного защищённого элемента. Так платит приложение-кошелёк на терминале: телефон говорит с ним по тому же протоколу EMV Contactless, что и пластиковая карта.",[600,601,602],"HCE","EMV Contactless","бесконтактные платежи",[604],{"kind":443,"url":605},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[545,424],"\u002Fglossary#host-card-emulation",{"slug":609,"term":610,"definition":611,"category":401,"aliases":612,"links":613,"related":616,"readMore":-1,"target":618,"hasArticle":436},"impeller","Impeller","Движок рендеринга, на котором Flutter работает сегодня: по умолчанию на iOS с 2023 года и на Android с 2024-го. Он компилирует шейдеры заранее, а не во время первой анимации, что убрало главную видимую проблему Flutter в проде — джанк на компиляции шейдеров.",[],[614],{"kind":443,"url":615},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[617],"skia","\u002Fglossary#impeller",{"slug":321,"term":620,"definition":621,"category":401,"aliases":622,"links":623,"related":626,"readMore":-1,"target":627,"hasArticle":436},"Install Referrer","API Google Play, который передаёт только что установленному Android-приложению параметры кампании из ссылки, приведшей к установке. Android-половина отложенного диплинкинга и надёжный способ понять, откуда пришёл пользователь.",[],[624],{"kind":443,"url":625},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[416,317],"\u002Fglossary#install-referrer",{"slug":629,"term":630,"definition":631,"category":632,"aliases":633,"links":635,"related":640,"readMore":-1,"target":641,"hasArticle":436},"jwt","JWT","Подписанный токен, несущий свои данные внутри: сервер понимает, кому принадлежит запрос, не обращаясь к хранилищу сессий. Стандарт мобильной аутентификации. Подпись доказывает, что токен не меняли, но не скрывает его содержимое.","protocol",[634],"JSON Web Token",[636,638],{"kind":431,"url":637},"https:\u002F\u002Fjwt.io\u002F",{"kind":406,"url":639},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[545],"\u002Fglossary#jwt",{"slug":643,"term":644,"definition":645,"category":465,"aliases":646,"links":650,"related":653,"readMore":-1,"target":654,"hasArticle":436},"kyc","KYC","Know Your Customer — проверки личности, которые регулируемый финансовый продукт проводит, прежде чем разрешить переводить деньги: съёмка документов, liveness, санкционный и антиотмывочный скрининг. На онбординг это влияет сильнее любого дизайн-решения.",[647,648,649],"Know Your Customer","AML","KYC\u002FAML",[651],{"kind":406,"url":652},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[545,533],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":656,"category":401,"aliases":657,"links":659,"related":660,"readMore":661,"target":661,"hasArticle":436},"Переиспользование бизнес-логики на Kotlin между Android, iOS и сервером, при этом интерфейс на каждой платформе остаётся нативным. Альтернатива Flutter, когда UI обязан быть нативным, а правила за ним — нет.",[658],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":663,"term":664,"definition":665,"category":666,"aliases":667,"links":670,"related":673,"readMore":-1,"target":675,"hasArticle":436},"mvp","MVP","Минимальная версия продукта, которую можно показать реальным пользователям и которая при этом отвечает на вопрос, ради которого его делали. Решение об объёме, а не о качестве: MVP всё равно обязан работать.","business",[668,669],"минимально жизнеспособный продукт","minimum viable product",[671],{"kind":406,"url":672},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[674],"white-label","\u002Fglossary#mvp",{"slug":677,"term":678,"definition":679,"category":632,"aliases":680,"links":684,"related":689,"readMore":-1,"target":690,"hasArticle":436},"oauth","OAuth","Стандарт, на котором держатся «Вход через Apple», Google и остальные: пользователь авторизует ваше приложение у провайдера, которому уже доверяет, а приложение получает токен вместо пароля. Никто не заводит новый пароль, и вы его не храните.",[681,682,683],"OAuth 2.0","вход через соцсети","Sign in with Apple",[685,687],{"kind":431,"url":686},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":406,"url":688},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[629],"\u002Fglossary#oauth",{"slug":545,"term":692,"definition":693,"category":465,"aliases":694,"links":697,"related":702,"readMore":-1,"target":703,"hasArticle":436},"PCI-DSS","Стандарт безопасности карточной индустрии, обязательный для всех, кто хранит, обрабатывает или передаёт данные карт. Большинство приложений намеренно остаются вне зоны его действия, отдавая ввод карты сертифицированному платёжному провайдеру.",[695,696],"PCI DSS","Payment Card Industry Data Security Standard",[698,700],{"kind":431,"url":699},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":406,"url":701},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[629],"\u002Fglossary#pci-dss",{"slug":705,"term":706,"definition":707,"category":666,"aliases":708,"links":711,"related":714,"readMore":-1,"target":716,"hasArticle":436},"product-market-fit","Product-market fit","Момент, когда продукт доказуемо нашёл своих людей: они им пользуются, возвращаются и платят. До него разработка отвечает на вопрос, после — на спрос.",[709,710],"PMF","соответствие продукта рынку",[712],{"kind":406,"url":713},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[663,715],"time-to-market","\u002Fglossary#product-market-fit",{"slug":718,"term":719,"definition":720,"category":465,"aliases":721,"links":724,"related":727,"readMore":-1,"target":729,"hasArticle":436},"prompt-injection","Prompt injection","Атака, при которой текст от пользователя языковая модель читает как инструкции, а не как данные, и уходит в обход собственных правил. Родственник SQL-инъекции в эпоху LLM: возникает везде, где пользовательский ввод склеивается в промпт.",[722,723],"инъекция промпта","инъекция в промпт",[725],{"kind":406,"url":726},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[728],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":529,"term":731,"definition":732,"category":479,"aliases":733,"links":736,"related":739,"readMore":-1,"target":740,"hasArticle":436},"Pub\u002FSub","Шаблон обмена сообщениями: производитель публикует событие, а любое число потребителей независимо читает его через стоящий между ними брокер. Производитель никогда их не ждёт — так путь запроса остаётся быстрым, а более медленная работа выполняется в фоне.",[734,735],"публикация\u002Fподписка","Google Cloud Pub\u002FSub",[737],{"kind":406,"url":738},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":487,"term":742,"definition":743,"category":479,"aliases":744,"links":747,"related":750,"readMore":-1,"target":751,"hasArticle":436},"REST","Общепринятый стиль HTTP-API: URL называет ресурс, а HTTP-метод говорит, что с ним сделать. Способ по умолчанию, которым приложение общается с бэкендом, и то, что ожидает найти большинство сторонних интеграций.",[745,746],"REST API","Representational State Transfer",[748],{"kind":406,"url":749},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[528,530],"\u002Fglossary#rest",{"slug":546,"term":753,"definition":754,"category":465,"aliases":755,"links":758,"related":761,"readMore":-1,"target":762,"hasArticle":436},"SOC 2","Отчёт внешнего аудитора о том, как компания обращается с данными клиентов — безопасность, доступность, конфиденциальность, — а не сертификат, который можно купить. Корпоративные заказчики его требуют, а архитектуру он ограничивает задолго до самого аудита.",[756,757],"SOC2","System and Organization Controls",[759],{"kind":406,"url":760},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[545,533,547],"\u002Fglossary#soc-2",{"slug":764,"term":765,"definition":766,"category":666,"aliases":767,"links":770,"related":773,"readMore":-1,"target":775,"hasArticle":436},"saas","SaaS","Софт, который продают как постоянную подписку на размещённый у поставщика продукт, а не как разовую лицензию для установки у себя. Поставщик держит серверы, непрерывно выкатывает обновления и берёт плату за пользователя или за объём.",[768,769],"Software as a Service","ПО как услуга",[771],{"kind":406,"url":772},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[774,674],"multi-tenancy","\u002Fglossary#saas",{"slug":530,"term":777,"definition":778,"category":632,"aliases":779,"links":781,"related":784,"readMore":-1,"target":785,"hasArticle":436},"Server-Sent Events","Односторонний поток от сервера к клиенту поверх обычного HTTP-соединения. Проще, чем WebSocket, и достаточен там, где только серверу есть что сказать: прогресс операции, ответ AI, приходящий токен за токеном.",[780],"SSE",[782],{"kind":406,"url":783},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[528,487],"\u002Fglossary#server-sent-events",{"slug":617,"term":787,"definition":788,"category":401,"aliases":789,"links":792,"related":797,"readMore":-1,"target":798,"hasArticle":436},"Skia","Открытая 2D-графическая библиотека Google, которая рисует Chrome, Android и — до появления Impeller — каждый кадр Flutter. Она умеет выводить не только на экран, но и в PDF: именно это делает «печать в PDF» в Chrome.",[790,791],"Skia Graphics Engine","skia-safe",[793,795],{"kind":431,"url":794},"https:\u002F\u002Fskia.org\u002F",{"kind":406,"url":796},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[609],"\u002Fglossary#skia",{"slug":800,"term":801,"definition":802,"category":666,"aliases":803,"links":807,"related":808,"readMore":-1,"target":810,"hasArticle":436},"staff-augmentation","Staff augmentation","Модель найма, при которой инженеры внешнего партнёра входят в вашу команду и работают под вашим управлением — в вашем репозитории, ваших спринтах, вашем процессе, — а не сдают отдельный проект. Вы покупаете ресурс; код и контекст остаются у вас.",[804,805,806],"аутстаффинг","расширение команды","выделенные разработчики",[],[809,715],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":812,"term":813,"definition":814,"category":632,"aliases":815,"links":819,"related":822,"readMore":-1,"target":824,"hasArticle":436},"tls","TLS","Слой шифрования под HTTPS. Он подтверждает, что сервер именно тот, о ком говорит его сертификат, согласует свежий ключ на сессию и шифрует всё дальнейшее — сеть между вами видит шифртекст и не может незаметно его изменить.",[816,817,818],"SSL","HTTPS","Transport Layer Security",[820],{"kind":406,"url":821},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[823,629],"end-to-end-encryption","\u002Fglossary#tls",{"slug":715,"term":826,"definition":827,"category":666,"aliases":828,"links":831,"related":834,"readMore":-1,"target":835,"hasArticle":436},"Time to market","Время от решения строить продукт до момента, когда им пользуются настоящие люди. Большинство споров о стеке и объёме работ — на самом деле споры об этом числе: каждая сэкономленная неделя — это неделя выручки, обратной связи и позиции на рынке.",[829,830],"TTM","время выхода на рынок",[832],{"kind":406,"url":833},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[663,809],"\u002Fglossary#time-to-market",{"slug":837,"term":838,"definition":839,"category":632,"aliases":840,"links":842,"related":847,"readMore":-1,"target":849,"hasArticle":436},"webrtc","WebRTC","Браузерный и мобильный стандарт для передачи аудио, видео и данных напрямую между двумя устройствами; серверы участвуют только в том, чтобы их познакомить. На нём строят видеозвонок внутри приложения, когда не берут готовый SDK.",[841],"Web Real-Time Communication",[843,845],{"kind":431,"url":844},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":406,"url":846},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[848,528],"xmpp","\u002Fglossary#webrtc",{"slug":528,"term":851,"definition":852,"category":632,"aliases":853,"links":854,"related":857,"readMore":-1,"target":858,"hasArticle":436},"WebSocket","Протокол, который держит одно соединение между клиентом и сервером открытым, чтобы любая сторона могла отправить данные в любой момент, а не клиент спрашивал снова и снова. На нём работают живые котировки, чаты и статусы присутствия.",[],[855],{"kind":406,"url":856},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[530,487],"\u002Fglossary#websocket",{"slug":674,"term":860,"definition":861,"category":666,"aliases":862,"links":865,"related":868,"readMore":869,"target":869,"hasArticle":411},"White-label","Один продукт, выпускаемый под многими брендами. White-label платформа собирает каждому клиенту готовое к публикации приложение со своим названием, оформлением и контентом из общей кодовой базы, а не форкает проект под заказчика.",[863,864],"белый лейбл","мультитенантное приложение",[866],{"kind":406,"url":867},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[663],"\u002Fglossary\u002Fwhite-label",{"slug":848,"term":871,"definition":872,"category":632,"aliases":873,"links":876,"related":881,"readMore":-1,"target":882,"hasArticle":436},"XMPP","Открытый федеративный протокол обмена сообщениями и давняя альтернатива тому, чтобы писать чат-бэкенд самому или арендовать чужой. Он покрывает статусы присутствия, индикаторы набора и передачу файлов, а зрелые клиентские библиотеки есть под любую платформу.",[874,875],"Jabber","Extensible Messaging and Presence Protocol",[877,879],{"kind":431,"url":878},"https:\u002F\u002Fxmpp.org\u002F",{"kind":406,"url":880},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[837,528],"\u002Fglossary#xmpp",{"slug":884,"term":885,"definition":886,"category":666,"aliases":887,"links":891,"related":894,"readMore":-1,"target":895,"hasArticle":436},"in-app-purchase","Встроенные покупки","Продажа цифровых товаров и подписок через биллинг Apple и Google, который оба стора требуют для цифрового контента и с которого берут комиссию. Сложность никогда не в самой покупке, а в её восстановлении на новом устройстве и в честном учёте прав доступа.",[888,889,890],"in-app purchase","IAP","внутренние покупки",[892],{"kind":443,"url":893},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[705],"\u002Fglossary#in-app-purchase",{"slug":416,"term":419,"definition":402,"category":401,"aliases":897,"links":898,"related":900,"readMore":413,"target":413,"hasArticle":411},[171,172,173,174],[899],{"kind":406,"url":407},[317,321],{"slug":902,"term":903,"definition":904,"category":479,"aliases":905,"links":909,"related":912,"readMore":-1,"target":913,"hasArticle":436},"multi-arch-image","Мультиархитектурный образ","Один тег образа, который разрешается в разные бинарники для каждой архитектуры процессора — обычно это пара linux\u002Famd64 и linux\u002Farm64, — так что один и тот же docker pull работает без изменений и на серверах Intel\u002FAMD, и на ноутбуках с Apple Silicon.",[906,907,908],"мультиарх-сборка","multi-arch build","linux\u002Famd64 + linux\u002Farm64",[910],{"kind":443,"url":911},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[504],"\u002Fglossary#multi-arch-image",{"slug":774,"term":915,"definition":916,"category":479,"aliases":917,"links":920,"related":923,"readMore":-1,"target":925,"hasArticle":436},"Мультитенантность","Один развёрнутый бэкенд обслуживает много клиентов, и каждый видит только свои данные, конфигурацию и включённые функции, потому что контекст тенанта определяется для каждого запроса. Именно это делает линейку брендированных приложений одним продуктом, а не набором форков.",[774,918,919],"мультиарендность","тенант",[921],{"kind":406,"url":922},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[674,924],"feature-flags","\u002Fglossary#multi-tenancy",{"slug":458,"term":927,"definition":928,"category":479,"aliases":929,"links":933,"related":936,"readMore":-1,"target":937,"hasArticle":436},"Объектное хранилище","Хранилище, которое держит файл целиком под ключом, а не в дереве файловой системы, — Amazon S3 и множество сервисов, совместимых с его API. Дешёвое, практически безграничное, привычное место для сырых событий, бэкапов и медиа: пишется один раз, читается редко, хранится вечно.",[930,931,932],"S3","S3-совместимое хранилище","блоб-хранилище",[934],{"kind":406,"url":935},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[448],"\u002Fglossary#object-storage",{"slug":728,"term":939,"definition":940,"category":465,"aliases":941,"links":945,"related":948,"readMore":-1,"target":949,"hasArticle":436},"Ограничение частоты запросов","Предел на число запросов от одного клиента за заданный интервал. Именно он не даёт одному увлечённому пользователю, скраперу или боту потратить месячный бюджет платного API за вечер, и стоять он должен на вашей стороне интеграции.",[942,943,944],"rate limiting","рейт-лимит","троттлинг",[946],{"kind":406,"url":947},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[718],"\u002Fglossary#rate-limiting",{"slug":951,"term":952,"definition":953,"category":401,"aliases":954,"links":957,"related":960,"readMore":-1,"target":961,"hasArticle":436},"platform-channels","Платформенные каналы","Мост, через который Flutter-приложение вызывает нативный код iOS и Android — Keychain и Keystore, биометрию, платёжные шторки, любой SDK без Dart-пакета. Работа рутинная, но настоящая, и первое место, где споткнётся инженер, не выходивший за пределы Dart.",[955,956],"platform channels","method channel",[958],{"kind":443,"url":959},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":963,"term":964,"definition":965,"category":632,"aliases":966,"links":969,"related":972,"readMore":-1,"target":973,"hasArticle":436},"post-quantum-cryptography","Постквантовая криптография","Алгоритмы шифрования, рассчитанные на устойчивость к будущему квантовому компьютеру; стандарты уже финализированы NIST. Мигрировать нужно до появления железа: трафик, записанный сегодня, расшифруют, когда такая машина появится.",[967,968],"PQC","постквантовое шифрование",[970],{"kind":406,"url":971},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[812,823],"\u002Fglossary#post-quantum-cryptography",{"slug":975,"term":976,"definition":977,"category":465,"aliases":978,"links":982,"related":983,"readMore":-1,"target":984,"hasArticle":436},"staged-rollout","Поэтапная раскатка","Релиз сначала на небольшой процент пользователей и расширение только тогда, когда доля сессий без падений держится. Плохая сборка, пойманная на десяти процентах, — испорченный вечер; она же на ста процентах — испорченная неделя.",[979,980,981],"staged rollout","phased release","канареечный релиз",[],[924,462],"\u002Fglossary#staged-rollout",{"slug":504,"term":986,"definition":987,"category":479,"aliases":988,"links":994,"related":997,"readMore":-1,"target":998,"hasArticle":436},"Реестр контейнеров","Хранилище образов контейнеров, адресуемых по имени и тегу, — Docker Hub, GitHub Container Registry или собственный реестр облачного провайдера. Публикация сборки в реестр превращает «у меня работает» в образ, который любой может скачать и запустить без изменений.",[989,990,991,992,993],"реестр образов","Docker registry","GHCR","ghcr.io","container registry",[995],{"kind":443,"url":996},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[491,902],"\u002Fglossary#container-registry",{"slug":594,"term":1000,"definition":1001,"category":479,"aliases":1002,"links":1005,"related":1008,"readMore":-1,"target":1009,"hasArticle":436},"Серверный рендеринг","Сборка страницы в готовый HTML на сервере, чтобы первый же ответ содержал контент, заголовки, метатеги и структурированные данные. Краулеры, превью ссылок и медленные устройства читают это, не выполняя JavaScript.",[1003,1004],"SSR","server-side rendering",[1006],{"kind":406,"url":1007},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[584],"\u002Fglossary#server-side-rendering",{"slug":823,"term":1011,"definition":1012,"category":479,"aliases":1013,"links":1017,"related":1020,"readMore":-1,"target":1021,"hasArticle":436},"Сквозное шифрование","Шифрование, которое накладывается на устройстве отправителя и снимается только на устройстве получателя, так что сервис, передающий сообщение, не может его прочитать — ни по решению суда, ни после взлома. Оно защищает содержимое, но никогда — метаданные.",[1014,1015,1016],"E2EE","end-to-end encryption","оконечное шифрование",[1018],{"kind":406,"url":1019},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[812,629],"\u002Fglossary#end-to-end-encryption",{"slug":809,"term":1023,"definition":1024,"category":666,"aliases":1025,"links":1028,"related":1031,"readMore":-1,"target":1032,"hasArticle":436},"Совокупная стоимость владения","Во что продукт обходится за всю жизнь, а не только на этапе разработки: поддержка, обновления, ежегодные миграции на новые ОС и правила сторов, вторая команда, чтобы две кодовые базы не расходились. Обычно больше сметы на разработку и почти никогда в неё не входит.",[1026,1027],"TCO","total cost of ownership",[1029],{"kind":406,"url":1030},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[715],"\u002Fglossary#total-cost-of-ownership",{"slug":1034,"term":1035,"definition":1036,"category":479,"aliases":1037,"links":1041,"related":1044,"readMore":-1,"target":1045,"hasArticle":436},"state-management","Управление состоянием","То, как приложение решает, где живёт значение, кому позволено его менять и какие части экрана перерисовываются, когда оно меняется. Во Flutter выбор между Riverpod, BLoC и Provider — одно из первых архитектурных решений и одно из самых трудных для пересмотра.",[1038,1039,1040],"state management","BLoC","Riverpod",[1042],{"kind":443,"url":1043},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[550],"\u002Fglossary#state-management",{"slug":924,"term":1047,"definition":1048,"category":465,"aliases":1049,"links":1053,"related":1056,"readMore":-1,"target":1057,"hasArticle":436},"Фиче-флаги","Переключатели, которые включают и выключают функциональность из конфигурации, а не из релиза. Один бинарник ведёт себя по-разному для разных брендов, рынков и пользователей, а рискованную фичу можно погасить, не отправляя новую сборку на ревью.",[1050,1051,1052],"feature flags","фиче-флаги","feature toggle",[1054],{"kind":406,"url":1055},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[975,674,774],"\u002Fglossary#feature-flags",{"slug":1059,"term":1060,"definition":1061,"category":479,"aliases":1062,"links":1066,"related":1069,"readMore":-1,"target":1070,"hasArticle":436},"floating-point","Числа с плавающей точкой","Двоичный формат IEEE 754, стоящий за double и float. Он не хранит 0.1 точно, поэтому 0.1 + 0.2 даёт 0.30000000000000004 — незаметно в графике и фатально в деньгах, которым место в целых минорных единицах или в decimal-типе.",[1063,1064,1065],"IEEE 754","double","плавающая запятая",[1067],{"kind":406,"url":1068},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point"]