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