Запускайте локальную Gemma 4 в Android Studio без облачных квот и передачи кода
Google выпустила стабильную Android Studio Quail 4 — финальный релиз линейки Quail. В IDE встроена открытая модель Gemma 4: она работает офлайн, не отправляет код наружу, не упирается в квоты по токенам и умеет вызывать инструменты, так что многофайловый рефакторинг можно гонять без сети.
Модель выбирается в селекторе агента или по пути
В Quail 4 также предзагружены 23 готовых навыка Android: агент сам подключает подходящий для обновления Android Gradle Plugin до версии 9, профилирования, перехода на Navigation3 или адаптации интерфейса под разные устройства. Раньше их приходилось докачивать вручную, а вне IDE весь набор ставится командой
Google выпустила стабильную Android Studio Quail 4 — финальный релиз линейки Quail. В IDE встроена открытая модель Gemma 4: она работает офлайн, не отправляет код наружу, не упирается в квоты по токенам и умеет вызывать инструменты, так что многофайловый рефакторинг можно гонять без сети.
Модель выбирается в селекторе агента или по пути
Settings > Tools > AI > Model Providers > Gemma. IDE сама скачает, проверит и обновит веса, движок инференса уже встроен. Самые маленькие модели заводятся на 12 ГБ оперативной памяти, лучше всего работают машины от 32 ГБ.В Quail 4 также предзагружены 23 готовых навыка Android: агент сам подключает подходящий для обновления Android Gradle Plugin до версии 9, профилирования, перехода на Navigation3 или адаптации интерфейса под разные устройства. Раньше их приходилось докачивать вручную, а вне IDE весь набор ставится командой
android skills add --all.Google блокирует обновления AnkiDroid: внешняя кнопка пожертвований может ударить и по вашему приложению
С 28 августа Google отклоняет обновления AnkiDroid из-за ссылки на пожертвования мимо биллинга Play. Если нарушение не устранят, 11 сентября приложение удалят из Google Play по всему миру, кроме Индии и России: там оно останется опубликованным.
AnkiDroid — бесплатное открытое приложение-карточки с 10 млн установок, которое развивают волонтёры. Внутри ничего не продаётся, деньги на разработку собирают через Open Collective — платформу для пожертвований; фискальным хостом выступает американская некоммерческая Open Source Collective со статусом 501(c)(6), то есть освобождением от налогов без налогового вычета для жертвователя. Решение налоговой службы США мейнтейнеры Google отправили, но в ответ получили, что организация от налогов не освобождена, без объяснения, почему такого статуса мало.
Ссылки на пожертвования из сборки для Play мейнтейнеры убирают в версии 2.24.X и пишут, что делают это под протестом. Альтернативы, которые перечислила Google: собирать пожертвования через биллинг Play, войти в американскую программу альтернативных платежей или в программу внешних ссылок. Если у вас в приложении есть кнопка «поддержать проект», статус некоммерческой организации сам по себе от этой политики не спасает: Google требует подтверждённого освобождения от налогов и приводит в пример 501(c)(3).
С 28 августа Google отклоняет обновления AnkiDroid из-за ссылки на пожертвования мимо биллинга Play. Если нарушение не устранят, 11 сентября приложение удалят из Google Play по всему миру, кроме Индии и России: там оно останется опубликованным.
AnkiDroid — бесплатное открытое приложение-карточки с 10 млн установок, которое развивают волонтёры. Внутри ничего не продаётся, деньги на разработку собирают через Open Collective — платформу для пожертвований; фискальным хостом выступает американская некоммерческая Open Source Collective со статусом 501(c)(6), то есть освобождением от налогов без налогового вычета для жертвователя. Решение налоговой службы США мейнтейнеры Google отправили, но в ответ получили, что организация от налогов не освобождена, без объяснения, почему такого статуса мало.
Ссылки на пожертвования из сборки для Play мейнтейнеры убирают в версии 2.24.X и пишут, что делают это под протестом. Альтернативы, которые перечислила Google: собирать пожертвования через биллинг Play, войти в американскую программу альтернативных платежей или в программу внешних ссылок. Если у вас в приложении есть кнопка «поддержать проект», статус некоммерческой организации сам по себе от этой политики не спасает: Google требует подтверждённого освобождения от налогов и приводит в пример 501(c)(3).
Проверьте Kotlin-проект по 224 граблям из реальной разработки
Разработчик maxrave-dev три года в одиночку создавал SimpMusic — открытый музыкальный клиент на Kotlin и Compose Multiplatform для Android, Windows, macOS и Linux. Рядом не было сеньора или ревьюера, поэтому каждую поломку он разбирал и записывал сам.
Теперь эти заметки собраны в kotlin-footguns: 224 markdown-документа под лицензией GPL. В каждом описаны симптом, механизм ошибки и команды для проверки своей кодовой базы; файлы подходят и человеку, и агенту-кодеру.
Среди примеров — два экземпляра из-за путаницы между
Разработчик maxrave-dev три года в одиночку создавал SimpMusic — открытый музыкальный клиент на Kotlin и Compose Multiplatform для Android, Windows, macOS и Linux. Рядом не было сеньора или ревьюера, поэтому каждую поломку он разбирал и записывал сам.
Теперь эти заметки собраны в kotlin-footguns: 224 markdown-документа под лицензией GPL. В каждом описаны симптом, механизм ошибки и команды для проверки своей кодовой базы; файлы подходят и человеку, и агенту-кодеру.
Среди примеров — два экземпляра из-за путаницы между
activityViewModels и activityViewModel, исчезнувший из Windows 11 wmic, файлы ._*, мешающие подписи сборки на macOS, и транзитивный strictly, способный перебить BOM и вызвать NoSuchMethodError. Каталог охватывает JVM, KMP, DI, Compose, CI, упаковку и медиадвижки.❤2
Firefox для iOS получил встроенный блокировщик рекламы, потому что полноценных расширений на iOS нет
Mozilla 1 сентября включила в Firefox для iOS блокировку сторонней рекламы и связанных с ней трекеров. На Android Firefox давно ставит uBlock Origin, но на iOS все браузеры обязаны работать поверх WebKit, и такой экосистемы дополнений, как на Android и десктопе, там не построить. Поэтому блокировщик встроен в само приложение и собран на Content Blocker API от Apple со списком EasyList.
По умолчанию функция выключена, включается в Settings, Browsing, Ad Blocker. Реклама, которую сайт отдаёт сам, объявления в поисковой выдаче и спонсорские ярлыки Firefox остаются, работает всё это поверх Enhanced Tracking Protection.
Для разработчиков под iOS это пример того, как ограничение платформы решается внутри приложения: Content Blocker принимает статические правила, а не код, поэтому с сервера можно обновлять только сами правила блокировки, а не логику.
Что ещё вошло в Firefox 155 для разработчиков и какие уязвимости закрыли, разобрали на сайте.
Mozilla 1 сентября включила в Firefox для iOS блокировку сторонней рекламы и связанных с ней трекеров. На Android Firefox давно ставит uBlock Origin, но на iOS все браузеры обязаны работать поверх WebKit, и такой экосистемы дополнений, как на Android и десктопе, там не построить. Поэтому блокировщик встроен в само приложение и собран на Content Blocker API от Apple со списком EasyList.
По умолчанию функция выключена, включается в Settings, Browsing, Ad Blocker. Реклама, которую сайт отдаёт сам, объявления в поисковой выдаче и спонсорские ярлыки Firefox остаются, работает всё это поверх Enhanced Tracking Protection.
Для разработчиков под iOS это пример того, как ограничение платформы решается внутри приложения: Content Blocker принимает статические правила, а не код, поэтому с сервера можно обновлять только сами правила блокировки, а не логику.
Что ещё вошло в Firefox 155 для разработчиков и какие уязвимости закрыли, разобрали на сайте.
The Mozilla Blog
How it works
There’s only so much room on your screen. Pop-ups, overlays, and ads can take over fast, getting between you and what you came to do. That’s where
🔥4❤2🤣2
Ушедшие из App Store бренды подхватили чужие приложения: под Max, Rutube и VK Видео нашли подделки
Стоит правообладателю исчезнуть из стора, и его запросы достаются кому угодно. Anti-Malware.ru 2 сентября сообщило о трёх приложениях в российском App Store, которые копируют названия и оформление Max, Rutube и VK Видео. Пресс-службы Max и «Газпром-Медиа» подтвердили, что не имеют к ним отношения.
RUTUBE: Video Player, по данным карточки в магазине, вышел 18 июня, через две недели после удаления официального Max, и к 2 сентября набрал почти 950 оценок со средней 2,6. Идентификатор пакета com.rutube.app, разработчик WARD WILLIAM. MaxMessenger лежит в магазине с ноября 2024 года и просто оказался в нужном месте выдачи.
Для разработчика вывод практический: имя разработчика и описание на карточке остаются тем немногим, что пользователь может проверить сам, а у Apple есть отдельная форма спора о контенте для правообладателей. Разобрали и что известно о каждом из трёх приложений.
Стоит правообладателю исчезнуть из стора, и его запросы достаются кому угодно. Anti-Malware.ru 2 сентября сообщило о трёх приложениях в российском App Store, которые копируют названия и оформление Max, Rutube и VK Видео. Пресс-службы Max и «Газпром-Медиа» подтвердили, что не имеют к ним отношения.
RUTUBE: Video Player, по данным карточки в магазине, вышел 18 июня, через две недели после удаления официального Max, и к 2 сентября набрал почти 950 оценок со средней 2,6. Идентификатор пакета com.rutube.app, разработчик WARD WILLIAM. MaxMessenger лежит в магазине с ноября 2024 года и просто оказался в нужном месте выдачи.
Для разработчика вывод практический: имя разработчика и описание на карточке остаются тем немногим, что пользователь может проверить сам, а у Apple есть отдельная форма спора о контенте для правообладателей. Разобрали и что известно о каждом из трёх приложений.
❤3
Нормальный сервис пополнения Steam никогда не спросит пароль или код Steam Guard — только логин. Это правило стоит держать в голове перед тем, как искать способ закинуть деньги на баланс: мошеннических предложений вокруг темы хватает, а разница в комиссии между честными сервисами доходит до нескольких процентов.
Сравнили пять рабочих вариантов для российских аккаунтов. Два сервиса зачисляют деньги напрямую по логину за минуты, у одного из них ниже стартовая комиссия и есть промокоды. Ещё один — крупный маркетплейс с выбором продавцов и разными условиями по каждому. Другой умеет пополнять через продажу игровых предметов — медленнее, но может дать выгоду. Последний формально работает без своей комиссии, но за счёт конвертации можно потерять до 10%.
Для каждого способа расписали реальную комиссию, скорость зачисления и лимиты по сумме.
Сравнили пять рабочих вариантов для российских аккаунтов. Два сервиса зачисляют деньги напрямую по логину за минуты, у одного из них ниже стартовая комиссия и есть промокоды. Ещё один — крупный маркетплейс с выбором продавцов и разными условиями по каждому. Другой умеет пополнять через продажу игровых предметов — медленнее, но может дать выгоду. Последний формально работает без своей комиссии, но за счёт конвертации можно потерять до 10%.
Для каждого способа расписали реальную комиссию, скорость зачисления и лимиты по сумме.
❤🔥2
У Intel-приложений на Mac остался один релиз macOS
Apple 1 сентября напомнила: с macOS 26.4 пользователь может увидеть уведомление при запуске приложения, которому нужна Rosetta, а macOS 27, релиз этой осени, станет последним, где Intel-код вообще запускается на Apple Silicon. Исключение одно, старые неподдерживаемые игры на Intel-фреймворках.
Если ваше macOS-приложение или его helper-процессы собраны только под x86_64, времени ровно один цикл системы. Проверка начинается с
Тем, у кого ARM-версия давно есть, Apple советует напрямую уведомить пользователей на старой Intel-сборке. Чек-лист по шагам разобрали на сайте.
Apple 1 сентября напомнила: с macOS 26.4 пользователь может увидеть уведомление при запуске приложения, которому нужна Rosetta, а macOS 27, релиз этой осени, станет последним, где Intel-код вообще запускается на Apple Silicon. Исключение одно, старые неподдерживаемые игры на Intel-фреймворках.
Если ваше macOS-приложение или его helper-процессы собраны только под x86_64, времени ровно один цикл системы. Проверка начинается с
lipo -info на бинарнике, а проблемы обычно живут не в своём коде, а в зависимостях: нативные модули Electron, Python-колёса с расширениями, старые фреймворки. Xcode собирает universal binary по умолчанию, но CI и нотаризацию для такой сборки стоит перепроверить.Тем, у кого ARM-версия давно есть, Apple советует напрямую уведомить пользователей на старой Intel-сборке. Чек-лист по шагам разобрали на сайте.
❤1
Google Play задерживал RTDN о покупках на два и четыре часа: платёж прошёл, а сервер узнал потом
Если подписку или покупку выдаёт сервер по Real-time Developer Notifications, посмотрите логи за 1–2 сентября. Разработчик показал две транзакции, где
Официальный инцидент Play Billing 1 сентября длился с 08:54 до 11:43 UTC, но по отчёту задержки были и после. Документация Google требует после RTDN проверять состояние через Developer API; наш вывод из этих цифр шире: клиент после покупки сам отправляет purchase token на сервер, сервер сразу подтверждает его через Developer API и не ждёт RTDN. Что залогировать, чтобы в следующий раз увидеть, где именно задержка, на сайте.
Если подписку или покупку выдаёт сервер по Real-time Developer Notifications, посмотрите логи за 1–2 сентября. Разработчик показал две транзакции, где
eventTimeMillis появился через 3 ч 55 мин и 2 ч 11 мин после оплаты, при том что девять соседних покупок получили событие за доли секунды. Доставка через Pub/Sub была быстрой, очередь пустой: задержка сидела внутри цепочки Google до доставки на сервер, а на каком именно этапе, автор доказать не может, потому что не сохранял publishTime.Официальный инцидент Play Billing 1 сентября длился с 08:54 до 11:43 UTC, но по отчёту задержки были и после. Документация Google требует после RTDN проверять состояние через Developer API; наш вывод из этих цифр шире: клиент после покупки сам отправляет purchase token на сервер, сервер сразу подтверждает его через Developer API и не ждёт RTDN. Что залогировать, чтобы в следующий раз увидеть, где именно задержка, на сайте.
❤2👎1
Google собирает альянс вокруг цифровых удостоверений на Android и открывает под них SDK
Android Ready SE, программа сертифицированных защищённых чипов, запущенная в 2021 году, станет Android Digital Credential Alliance: производители чипов и Secure Element, OEM, разработчики кошельков и государственные эмитенты. Google одновременно опубликовала whitepaper о том, как устроена цепочка доверия для удостоверений на базе Android Keystore и StrongBox.
Цепочка из четырёх шагов: аттестация ключа, привязка к устройству, выдача по ключу с аутентификацией пользователя и авторизация действий. StrongBox работает в физически изолированном Secure Element уровня Common Criteria EAL4+ с AVA_VAN.5, а выпуск удостоверения гейтится биометрией или PIN через HAT-токены. Для разработчиков открыт Multipaz SDK с OpenID4VCI и OpenID4VP, форматами ISO 18013-5 mDL и SD-JWT VC и zero-knowledge proofs на Longfellow-ZKP; на нём же построены Google Wallet и референсный кошелёк European Digital Identity.
Для российских разработчиков это пока архитектурный ориентир, а не продукт: о доступности Google Wallet и государственных эмитентах в регионе Google не пишет. Публикация Google и whitepaper с архитектурой.
Android Ready SE, программа сертифицированных защищённых чипов, запущенная в 2021 году, станет Android Digital Credential Alliance: производители чипов и Secure Element, OEM, разработчики кошельков и государственные эмитенты. Google одновременно опубликовала whitepaper о том, как устроена цепочка доверия для удостоверений на базе Android Keystore и StrongBox.
Цепочка из четырёх шагов: аттестация ключа, привязка к устройству, выдача по ключу с аутентификацией пользователя и авторизация действий. StrongBox работает в физически изолированном Secure Element уровня Common Criteria EAL4+ с AVA_VAN.5, а выпуск удостоверения гейтится биометрией или PIN через HAT-токены. Для разработчиков открыт Multipaz SDK с OpenID4VCI и OpenID4VP, форматами ISO 18013-5 mDL и SD-JWT VC и zero-knowledge proofs на Longfellow-ZKP; на нём же построены Google Wallet и референсный кошелёк European Digital Identity.
Для российских разработчиков это пока архитектурный ориентир, а не продукт: о доступности Google Wallet и государственных эмитентах в регионе Google не пишет. Публикация Google и whitepaper с архитектурой.
🤔3🗿1
Compose Multiplatform запустили на Apple TV одним Gradle-плагином, не дожидаясь JetBrains
Официальных tvOS-артефактов для большинства модулей Compose пока нет (задача CMP-5686). Саджид Али обошёл это плагином
Требования: Kotlin 2.3.20, Gradle 8.0, Compose Multiplatform 1.6 или новее; таргеты
Официальных tvOS-артефактов для большинства модулей Compose пока нет (задача CMP-5686). Саджид Али обошёл это плагином
dev.sajidali.compose-tvos 1.3.0: через ComponentMetadataRule он подменяет варианты зависимостей 15 групп org.jetbrains.* (compose ui, foundation, runtime, material3, animation и другие) на свои tvOS-сборки, координаты в проекте не меняются, а iOS, Android и Desktop продолжают получать официальные артефакты.Требования: Kotlin 2.3.20, Gradle 8.0, Compose Multiplatform 1.6 или новее; таргеты
tvosArm64 и tvosSimulatorArm64, tvosX64 не собирается. Если официальный tvOS klib появится, плагин его не трогает. Автор говорит, что тем же тулчейном собирает свой production TV app без правок исходников; демо на JetStream TV с D-pad-фокусом есть в посте. Автотестов под tvOS у проекта пока нет, так что в прод только после своих.👍2
Swiggy перевела гибридные экраны на Swift и SwiftUI, не останавливая выпуск фич
Индийский сервис доставки с аудиторией в миллионы пользователей начинал Instamart и Dineout как гибридные продукты, и при росте они упёрлись в знакомое: долгие загрузки, зависания на больших списках товаров, memory pressure и рваные анимации. Ограничения гибридной архитектуры не давали Dineout показывать качественные фото и видео.
Решение о миграции приняли в начале 2024 года, и главное в рассказе команды не «переписали всё», а порядок. Сначала нашли сценарии с наибольшим влиянием, домашние экраны и поиск, и выпустили их нативно за несколько недель. Дальше переводили по одному, параллельно продолжая выпускать функции. После миграции появились OCR для поиска по меню, сканирование списков продуктов и суммаризация с Apple Intelligence.
Цифр по конверсии и crash rate Apple не приводит, только слова команды об «самом большом сюрпризе» от эффекта. Разбор на Apple Developer.
Индийский сервис доставки с аудиторией в миллионы пользователей начинал Instamart и Dineout как гибридные продукты, и при росте они упёрлись в знакомое: долгие загрузки, зависания на больших списках товаров, memory pressure и рваные анимации. Ограничения гибридной архитектуры не давали Dineout показывать качественные фото и видео.
Решение о миграции приняли в начале 2024 года, и главное в рассказе команды не «переписали всё», а порядок. Сначала нашли сценарии с наибольшим влиянием, домашние экраны и поиск, и выпустили их нативно за несколько недель. Дальше переводили по одному, параллельно продолжая выпускать функции. После миграции появились OCR для поиска по меню, сканирование списков продуктов и суммаризация с Apple Intelligence.
Цифр по конверсии и crash rate Apple не приводит, только слова команды об «самом большом сюрпризе» от эффекта. Разбор на Apple Developer.
AGP 9.4 поднял потолок до API 37 и предупредил: в AGP 10 новый Variant API станет обязательным
Android Gradle Plugin 9.4 минорный релиз, но с чек-листом на обновление. Требуется Gradle 9.6.0, JDK 17, Build Tools 36.0.0, NDK по умолчанию 28.2.13676358; совместим с Android Studio Quail 4, которая тоже стала стабильной 1 сентября.
Новое поведение: плагин проверяет строгое соответствие variant dimensions у dynamic feature модулей и базового. По умолчанию несовпадение даёт предупреждение, флаг
Android Gradle Plugin 9.4 минорный релиз, но с чек-листом на обновление. Требуется Gradle 9.6.0, JDK 17, Build Tools 36.0.0, NDK по умолчанию 28.2.13676358; совместим с Android Studio Quail 4, которая тоже стала стабильной 1 сентября.
Новое поведение: плагин проверяет строгое соответствие variant dimensions у dynamic feature модулей и базового. По умолчанию несовпадение даёт предупреждение, флаг
android.enforceDynamicFeatureVariantMatching=true превращает его в ошибку. Главное на будущее: начиная с AGP 10 новый Variant API обязателен для всех проектов, до этого модули можно временно исключать через android.newDsl.optOut. Из исправлений: пропавший L8 obfuscation mapping в mapping.txt, ошибка «SigningConfig is too eager» и ClassNotFoundException в connectedDebugAndroidTest с provider в dynamic feature. Google просит не писать зависимость как 9.4.+.Flutter-пакет выбирает интерфейс не по платформе, а по версии ОС: Liquid Glass на iOS 26, Material 3 Expressive на Android 16
Обычно адаптивные виджеты во Flutter спрашивают «iOS или Android».
Требования: Flutter 3.27 и новее, iOS 13+, Android API 21+, macOS 10.15+; инициализация через
Контекст важнее цифр: Flutter заморозил Material и Cupertino в SDK в апреле, а с ноября их SDK-копии объявлены устаревающими. Кто-то должен закрыть этот разрыв. Страница на pub.dev.
Обычно адаптивные виджеты во Flutter спрашивают «iOS или Android».
native_adaptive_ui добавляет второе измерение, DesignEra: платформа, версия ОС и форм-фактор. Один код на iOS 26 встраивает настоящие UITabBar, UISegmentedControl, UISwitch и UISlider, потому что честный Liquid Glass рисуется только нативным контролом, а на Android 16 переключается на Material 3 Expressive. iOS 18 получает классический Cupertino, web и десктоп fallback на Material 3.Требования: Flutter 3.27 и новее, iOS 13+, Android API 21+, macOS 10.15+; инициализация через
await NativeAdaptiveUi.ensureInitialized(), есть SPM и CocoaPods. Для тестов предусмотрены NativePolicy.dartOnly и debugSetPlatform. Версия 0.1.2, MIT, 125 загрузок и 3 лайка на pub.dev, то есть проект одного человека на ранней стадии.Контекст важнее цифр: Flutter заморозил Material и Cupertino в SDK в апреле, а с ноября их SDK-копии объявлены устаревающими. Кто-то должен закрыть этот разрыв. Страница на pub.dev.
Один разработчик проверял доступность своей игры, выключая экран целиком
Клеменс Штрассер из Австрии делает Art of Fauna в одиночку: пазлы на иллюстрациях животных из Biodiversity Heritage Library для iPhone и iPad. В 2025 году игра получила App Store Award и Apple Design Award в категории Inclusivity, а в 2015-м у автора уже был студенческий ADA за Elementary Minute.
Метод, который стоит забрать себе: Screen Curtain в VoiceOver выключает экран, но оставляет навигацию. Штрассер проходил игру вслепую и консультировался с незрячим разработчиком из Германии; проект он сначала отложил именно из-за сложности доступного текста, а потом сформулировал правило «нет игры, которую нельзя сделать доступной». Его совет дословно: заставьте себя пользоваться своим приложением, не глядя на экран, и восприятие изменится.
20% дохода уходит природоохранным организациям; по одному сертификату защищено 3700 квадратных метров тропического леса. Продажи и число пользователей Apple не называет. История на Apple Developer.
Клеменс Штрассер из Австрии делает Art of Fauna в одиночку: пазлы на иллюстрациях животных из Biodiversity Heritage Library для iPhone и iPad. В 2025 году игра получила App Store Award и Apple Design Award в категории Inclusivity, а в 2015-м у автора уже был студенческий ADA за Elementary Minute.
Метод, который стоит забрать себе: Screen Curtain в VoiceOver выключает экран, но оставляет навигацию. Штрассер проходил игру вслепую и консультировался с незрячим разработчиком из Германии; проект он сначала отложил именно из-за сложности доступного текста, а потом сформулировал правило «нет игры, которую нельзя сделать доступной». Его совет дословно: заставьте себя пользоваться своим приложением, не глядя на экран, и восприятие изменится.
20% дохода уходит природоохранным организациям; по одному сертификату защищено 3700 квадратных метров тропического леса. Продажи и число пользователей Apple не называет. История на Apple Developer.
🤔2👍1💊1
Папка lib превратилась в лабиринт: модуляризация по фичам во Flutter
История типовая. Сначала lib, несколько экранов, папка моделей и один файл сервисов на всё. Приложение выходит, все довольны. Потом фич больше, команда больше, и однажды в моделях триста файлов, в сервисах шесть тысяч строк, а новому инженеру нужны недели, чтобы понять, куда вообще что добавлять.
Автор настаивает, что это не проблема дисциплины, а проблема структуры: код изначально не был устроен так, чтобы переживать рост. Модуляризация по фичам не новый фреймворк и не замена Clean Architecture или DDD, она берёт принципы обоих и применяет их к каждой фиче отдельно, чтобы кусок был самодостаточным и тестировался независимо.
Разбор идёт от минусов layer-first до сборки всего вместе. Актуально, если команда в одной кодовой базе растёт к двадцати с лишним людям.
#flutter
История типовая. Сначала lib, несколько экранов, папка моделей и один файл сервисов на всё. Приложение выходит, все довольны. Потом фич больше, команда больше, и однажды в моделях триста файлов, в сервисах шесть тысяч строк, а новому инженеру нужны недели, чтобы понять, куда вообще что добавлять.
Автор настаивает, что это не проблема дисциплины, а проблема структуры: код изначально не был устроен так, чтобы переживать рост. Модуляризация по фичам не новый фреймворк и не замена Clean Architecture или DDD, она берёт принципы обоих и применяет их к каждой фиче отдельно, чтобы кусок был самодостаточным и тестировался независимо.
Разбор идёт от минусов layer-first до сборки всего вместе. Актуально, если команда в одной кодовой базе растёт к двадцати с лишним людям.
#flutter
freeCodeCamp.org
Feature Modularization in Flutter: How to Combine Clean Architecture and Domain-Driven Design for Self-Contained, Scalable Features
As an engineer working on a small team, your current structure could fly. But what if your team, all contributing to the same codebase, reaches 20 or more people at scale? You'll need careful design t
👍2
Jetpack XR SDK дошёл до беты: можно тащить XR в продакшен-процесс
Порт существующего 2D-приложения в XR перестал быть исследовательским проектом: Jetpack SceneCore, ARCore for Jetpack XR и XR Runtime вышли в бету, Jetpack Compose for XR обещают следом.
Формулировка Google прямая: API стабилизируются, и это хороший момент встраивать их в рабочие процессы, а не держать в песочнице. Делается это теми же инструментами Android, которыми вы уже пользуетесь, отдельный стек учить не нужно.
Релиз сфокусирован на базовых кирпичах SDK, так что смотреть стоит на них, а не на витринные демо. Что именно вошло в бету, перечислено в анонсе.
#android
Порт существующего 2D-приложения в XR перестал быть исследовательским проектом: Jetpack SceneCore, ARCore for Jetpack XR и XR Runtime вышли в бету, Jetpack Compose for XR обещают следом.
Формулировка Google прямая: API стабилизируются, и это хороший момент встраивать их в рабочие процессы, а не держать в песочнице. Делается это теми же инструментами Android, которыми вы уже пользуетесь, отдельный стек учить не нужно.
Релиз сфокусирован на базовых кирпичах SDK, так что смотреть стоит на них, а не на витринные демо. Что именно вошло в бету, перечислено в анонсе.
#android
Android Developers Blog
Jetpack XR SDK core libraries reach beta: The next milestone for Android XR
News and insights on the Android platform, developer tools, and events.
Сигнатура с Unit врёт о том, чем функция может закончиться
Пример из статьи:
Сигнатура об этом молчит. Про доменные ошибки вызывающий узнаёт из исключений, документации или чужой памяти, и компилятор ему здесь не помощник.
Сергей Чернов, который занимается аутентификацией и верификацией в финтех-платформе, разбирает, как вернуть эти случаи в тип возвращаемого значения и обрабатывать их функционально. Статья в блоге Kotlin.
#kotlin
Пример из статьи:
fun signDocument(documentId: UUID, code: String): Unit. Unit в Kotlin означает, что функция отработала и не вернула ничего осмысленного, примерно как void в Java. Понятно? А теперь скажите по одной сигнатуре, что будет, если код неверный, документ уже подписан или его вообще нет.Сигнатура об этом молчит. Про доменные ошибки вызывающий узнаёт из исключений, документации или чужой памяти, и компилятор ему здесь не помощник.
Сергей Чернов, который занимается аутентификацией и верификацией в финтех-платформе, разбирает, как вернуть эти случаи в тип возвращаемого значения и обрабатывать их функционально. Статья в блоге Kotlin.
#kotlin
The JetBrains Blog
Signatures, be true: domain errors and functional handling in Kotlin - The JetBrains Blog
Learn how to make expected failures visible in Kotlin function signatures with sealed error types and Either.
🔥2
Как Google разводит по изолированным доменам автомобильный Android
AAOS SDV, версия Android Automotive для программно-определяемых автомобилей, построена на виртуализации: Google использует Cuttlefish, чтобы разделять системы, живущие в одной машине на одном железе.
Прошлые анонсы были про фичи, а этот текст про то, как устроена безопасность: доменная изоляция как фундамент и виртуализация как способ развести сосуществующие инстансы.
Читать стоит, если смотрите в сторону автомобильных проектов, но и обычному мобильному разработчику полезно как модель: те же приёмы изоляции постепенно спускаются в потребительский Android. Как она устроена, расписано в разборе Google.
#android
AAOS SDV, версия Android Automotive для программно-определяемых автомобилей, построена на виртуализации: Google использует Cuttlefish, чтобы разделять системы, живущие в одной машине на одном железе.
Прошлые анонсы были про фичи, а этот текст про то, как устроена безопасность: доменная изоляция как фундамент и виртуализация как способ развести сосуществующие инстансы.
Читать стоит, если смотрите в сторону автомобильных проектов, но и обычному мобильному разработчику полезно как модель: те же приёмы изоляции постепенно спускаются в потребительский Android. Как она устроена, расписано в разборе Google.
#android
Android Developers Blog
AAOS SDV - Secure by Design
News and insights on the Android platform, developer tools, and events.
Движок IntelliJ уехал из IDE и работает в VS Code по LSP
В VS Code уже ставится расширение Java and Kotlin by IntelliJ IDEA с идентификатором
Причину переезда называют прямо: агенты уже ходят в языковые серверы за быстрым и детерминированным поиском по коду, и в перспективе это экономит токены. Поэтому движок и вынесли наружу.
Практические оговорки. Расширение привязано к VS Code версии 1.105.1 и выше, редакторы на его основе вроде Cursor тоже считаются, а одиночный
#kotlin
В VS Code уже ставится расширение Java and Kotlin by IntelliJ IDEA с идентификатором
JetBrains.intellij-server. Это не оболочка, изображающая IDE, а языковой движок IntelliJ, говорящий по протоколу LSP.Причину переезда называют прямо: агенты уже ходят в языковые серверы за быстрым и детерминированным поиском по коду, и в перспективе это экономит токены. Поэтому движок и вынесли наружу.
Практические оговорки. Расширение привязано к VS Code версии 1.105.1 и выше, редакторы на его основе вроде Cursor тоже считаются, а одиночный
.java-файл без проекта не заработает. Preview-сборки умирают через 30 дней после релиза, зато для чистого Kotlin остаётся бесплатный языковой сервер под Apache-2. Инструкция по запуску.#kotlin
DEV Community
IntelliJ Java Kotlin LSP now runs inside VS Code
Install JetBrains.intellij-server in VS Code, open a Maven Gradle or Bazel folder, then prove go-to-definition works.
❤3
Tinder срезал холодный старт на 47% через R8 Configuration Analyzer
Кодовая база росла вместе с приложением, и к моменту оптимизации около 70% кода оставались неоптимизированными: 17 dex-файлов, из них три выделены только под запуск. R8 был включён, но большую часть его работы блокировали keep-правила, и команда не могла определить, какие именно.
Это и закрывает новый R8 Configuration Analyzer. Он показывает оценки по shrinking, оптимизации и обфускации и подсвечивает слишком широкие, дублирующие и устаревшие keep-правила, включая те, что приехали из сторонних библиотек.
Итог после чистки: холодные старты минус 47%, размер загрузки минус 28,98%, до 61,5 МБ, а ANR по ощущению пользователя минус 28%. Цифры и скриншоты анализатора лежат в блоге Android Developers.
#android
Кодовая база росла вместе с приложением, и к моменту оптимизации около 70% кода оставались неоптимизированными: 17 dex-файлов, из них три выделены только под запуск. R8 был включён, но большую часть его работы блокировали keep-правила, и команда не могла определить, какие именно.
Это и закрывает новый R8 Configuration Analyzer. Он показывает оценки по shrinking, оптимизации и обфускации и подсвечивает слишком широкие, дублирующие и устаревшие keep-правила, включая те, что приехали из сторонних библиотек.
Итог после чистки: холодные старты минус 47%, размер загрузки минус 28,98%, до 61,5 МБ, а ANR по ощущению пользователя минус 28%. Цифры и скриншоты анализатора лежат в блоге Android Developers.
#android
Android Developers Blog
Tinder cuts app cold starts by 47% with new R8 Configuration Analyzer
News and insights on the Android platform, developer tools, and events.