TGTGInsightтелеграм анализLIVE / telegram public index
← Такты, стеки, два колеса

TGINSIGHT SIMILAR POSTS

Намери подобно съдържание

Изходен канал @clockstackwheels · Post #161 · 15.01

Зимой я выиграл в конкурсе Сбера телевизор Huawei Vision S 55". Недавно его доставили, поделюсь впечатлениями. Я хорошо отношусь к компании Huawei. На мой взгляд, они делают лучшие в мире мобильные камеры. И идеологически их ссору с гуглом я считаю скорее правильной и полезной для рынка. Но конечному потребителю пока что становится хуже. Телевизор Vision S это на самом деле не телевизор, а большой монитор. У него нет АЦП и разъёма для подключения антенны. Это мне глубоко импонирует: эфирное телевидение должно умереть, и чем быстрее, тем лучше. Радует, что на рынке появляются такие решения. Первый шаг к телефону без функции звонков :) Здесь своя операционная система HarmonyOS, на ней предустановленные программы и сервис Салют (умные голосовые помощники и соответствующая экосистема от Сбера). Само устройство лёгкое для своих размеров — без страха повесил его на стену на обычные дюбеля. По железу, к сожалению, ничего впечатляющего, к сожалению. Я сразу проверил работу моего приложения с трёхмерными игральными костями (HTML5 3D на three.js + физика cannon.js), и оно тормозит. Не так безбожно, как на SberBox, но всё-таки ни до уровня SberPortal, ни тем более до уровня мобильного телефона не дотягивает. Затем я запустил небольшую игру, которую недавно делал (HTML5 плеер на движке Godot, 2D + физика). И вот тут расстроился: игра работает, но буквально самую каплю ниже минимального предела комфорта. То есть, если бы она тормозила всего на 5% меньше, в неё уже можно было бы спокойно играть. А так нет. На Портале при этом игра работает шустро, на телефоне тоже шустро, но уже вне Салюта (в Салюте на телефоне не работает, не знаю, почему). Сама операционка вроде бы Android, но жутко урезанная. Для установки программ, которые мне нужны, пришлось скачивать APK. Причем, как именно это сделать было не ясно, и помогло только гугление. VLC завёлся штатно, YouTube отказался логиниться без гуглосервисов (к счастью, он есть внутри Салюта). Netflix я не нашёл ни в каком виде, и это провал. У нас с женой 60% экранного времени это именно Netflix. Ничто другое с ним не сравнится по соотношению нового контента к стоимости подписки. Для меня это самая главная причина, по которой я не стал бы ставить подобный телевизор в гостиной, как центральный экран в доме. Отдельно раздражает то, что предустановленные сервисы от самого Huawei невозможно удалить или даже спрятать. Они занимают всю полосу приложений на главном экране, но являются буквально мусором: покупать в России подписку на кино или музыку от Huawei глупо, мессенджером от Huawei тоже никто не пользуется. К самому экрану претензий нет — картинка сочная, качественная, разрешение отличное. Как устройство вывода для PlayStation 5 всё прекрасно. Ну, иногда может всплывать неотключаемое системное сообщение о каком-нибудь обновлении, но это мелочи. Камера сносная — не хватает звёзд с неба, но и не древняя вебка. Правда вот, на мой взгляд, она совершенно не нужна. Кейс «Люди разговаривают с кем-то по видеосвязи через телевизор» кажется мне целиком выдуманным маркетологами. А приложений, в которых камера могла бы раскрыться, в системе нет. Интеграция с Салютом, наоборот, выполнена хорошо. Даже если приложение «Салют» не запущено, устройство всё равно отзывается на голосовую команду без всякого пульта и активирует ассистента. Это меня приятно удивило, думал, будет такая же байда, как на СберБоксе, когда голосовой ввод, предполагающий занятость рук, всё равно вынуждает освободить руки и взять пульт. Однако, по непонятной причине не поддержана камера и жесты. Хотя, казалось бы, её и так мало где можно использовать, хоть здесь бы сделали. В целом, лично под мой сценарий использования девайс подошёл прекрасно: экран во всю стену в рабочем кабинете, на который главным образом выводится PS5, а ещё можно тестировать приложения Салюта при разработке. Но обычному пользователю покупать стоит с опаской. По моему мнению команда Сбера нормально выполнила интеграцию, но плохо выбрала донора для этой интеграции. #gadgets

Hashtags

Резултати

Намерени 9 подобни публикации

Търсене: #dagger

当前筛选 #dagger清除筛选
Android Broadcast

@android_broadcast · Post #9343 · 18.07.2025 г., 18:24

🤯Вышел Dagger 2.57 и из полезных изменений там... НИЧЕГО. Просто работают под капотом. Может над поддержкой KSP, может еще над чем Вам нужен Dagger? #dagger#di

Hashtags

Android Broadcast

@android_broadcast · Post #8888 · 02.04.2025 г., 06:00

Разработчик из Ozon делится опытом, как организовали с помощью фич языка Kotlin хранилище Dagger-компонентов, доступное из любого модуля, управляющее их жизненным циклом и забравшее другую рутину на себя. #android#dagger#di

Android Broadcast

@android_broadcast · Post #8910 · 06.04.2025 г., 17:51

Как найти неиспользуемые зависимости в Dagger Component (EN,11м) С помощью Dagger SPI автор написал анализатор графа Dagger c целью поиска неиспользуемых зависимостей и описал подход в статье. Также подход можно использовать для визуализации графа зависимостей, считать разные метрики графа и пр. 🐱Исходный код на GitHub 🔗Альтернативная ссылка #dagger#di#opensource

Android Broadcast

@android_broadcast · Post #8639 · 05.02.2025 г., 16:15

🤯Не нужно делать инжект всех зависимостей в конструктор Встретил код в проекте: class MyViewModel( ... private val sendDataUseCase: SendDataUseCase, ... ): ViewModel() { // Вызывается, когда пользователь в UI нажмёт на "Send" fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.invoke(...) // либо sendDataUseCase(...) } } } sendDataUseCase не нужен сразу при создании объекта, а нужен только если пользователь нажмёт на кнопку "Send" в UI, что может и не произойти. Так как эта зависимость нужна в конструкторе, то при получении в DI будет сразу происходить создание этой зависимости, что приводит к ненужной нагрузке. Я рекомендую делать отложенное получение зависимостей с помощью механизма Provider или Lazy. Первый будет ходить за зависимостью в граф каждый раз, а второй - при первом обращении и сохранит её. // При использовании Dagger или Hilt class MyViewModel( ... private val sendDataUseCase: javax.inject.Provider<SendDataUseCase>, // или dagger.Lazy ... ): ViewModel() { fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.get() .invoke(...) } } } Если вы используете Koin на момент написания поста (актуальная версия 4.0), делать отложенный инжект в конструктор возможности нет: // При использовании Koin class MyViewModel(): ViewModel() { // отложенное получение зависимости в Koin private val sendDataUseCase: SendDataUseCase by inject() fun onSendClicked(...) { viewModelScope.launch { // аналог Provider - получение зависимости каждый раз из графа val sendDataUseCase: SendDataUseCase = getKoin().get() sendDataUseCase.invoke(...) } } } Результат оптимизации ✅ более быстрый старт экранов (зависит от сложности графов) ✅ уменьшение расхода памяти ❌ KOIN потеря явной зависимости в конструкторе. Мне бы очень хотелось увидеть аналог Provider и Lazy в Koin через конструктор, но пока приходится делать свои обертки 😔 #dagger#di#лучшиепрактики

Android Broadcast

@android_broadcast · Post #9806 · 18.01.2026 г., 12:22

🤯Dagger Hilt блокирует переход на AGP 9.0 UPD. 21 января вышел Dagger 2.59 с поддержкой AGP Android Gradle Plugin 9.0 официально зафиксировал новый стабильный конфигурационный API (вышла стабильная версия с релизом AS Otter FD 3) — это одно из самых значимых изменений в инфраструктуре Android и Kotlin Multiplatform за последние годы. Цели понятны и правильные лучше работа с кэшем и общая скорость сборок. Подробнее про все изменения я писал в отдельном посте Google несколько релизов подряд аккуратно готовил экосистему к этому переходу, заранее добавив новый API и дав время авторам плагинов адаптироваться. Но на практике всё упирается в плагины. Я столкнулся с тем, что Gradle-плагин Dagger Hilt до сих пор использует старую модель конфигурации и несовместим с новым DSL из AGP 9.0. В результате проект нельзя перевести на новую версию без отключения Hilt или включения режим совместимости. Иронично, что именно официальный инструмент от Google сейчас становится блокером для обновления. Да, в AGP оставили compatibility-флаги, позволяющие продолжать сборку по старым правилам. Это спасает проекты от немедленного падения, но полностью отключает все ключевые преимущества AGP 9.0 — configuration cache, ускоренную конфигурацию и новую модель плагинов. 💬 Вы уже пробовали миграцию на AGP 9.0? Что блокирует? Делитесь в комментариях мнением. UPD. По заявлениям подписчиков также есть проблемы в работе KAPT и KSP #Android#AndroidDev#Gradle#Dagger#Hilt

Android Broadcast

@android_broadcast · Post #9550 · 08.10.2025 г., 11:50

🤖 Если вы искали альтернативу Dagger/Hilt, но с поддержкой Kotlin Multiplatform, то как раз вышла свежая версия Koin Annotations, которая значительно упрощает миграцию! #dagger#hilt#koin

Android Broadcast

@android_broadcast · Post #8901 · 05.04.2025 г., 10:43

🤖Альтернативный способ обработке one-off событий из ViewModel (EN, 10м) В статье рассказывается в чем сложность с обработкой одноразовых событий, которые надо передать из ViewModel в UI. Автор рассматривает способ через callback интерфейс в конструкторе ViewModel @HiltViewModel class MyViewModel @Inject constructor( // inject the interface private val toastMessages: ToastMessages, ) : ViewModel() { fun doSomething() { viewModelScope.launch { try { // execute async operation here } catch (e: CustomException) { // initiate a one-off event toastMessages.showToast(e.localizedMessage) } } } } 🔗 Альтернативная ссылка на статью #android#viewmodel#dagger#hilt

Android Broadcast

@android_broadcast · Post #9569 · 17.10.2025 г., 07:58

‼️Не тяните зависимости из графа сразу! Одна из частых ошибок при использовании DI — получать все зависимости из графа сразу (например, в конструкторе класса). Так делать не стоит 😬 Получение зависимости из графа — это каскадный процесс, и он должен выполняться только в момент использования. Поэтому я всегда рекомендую инжектить зависимости для Dagger/Hilt через Lazy (не путайте с kotlin.Lazy) или Provider. class ViewModel @Inject constructor( // Зависимость получается из графа сразу при создании private val useCase: DataUseCase, // Получаем зависимость из графа каждый раз при обращении Provider.get() private val useCaseFactory: Provider<DataUseCase>, // Получаем зависимость из графа при первом обращении // и затем она кэшируется в Lazy объекте private val useCaseLazy: Lazy<DataUseCase>, ) 💡 Чтобы перейти на Lazy без боли в существующем коде — можно использовать делегаты свойств в Kotlin: // Вариант использования без Lazy class ViewModel @Inject constructor( private val useCase: DataUseCase ) // Миграция на Lazy без потери API совместимости class ViewModel @Inject constructor( useCaseFactory: Lazy<DataUseCase>, ) { private val useCase: DataUseCase by useCaseFactory } И небольшой хелпер, чтобы это работало красиво 👇 // Функция расширения для использования property делегата operator fun <T> Lazy<T>.getValue(thisRef: T, property: KProperty<*>): T = get() Таким образом, вы снижаете нагрузку на DI граф, откладываете инициализацию и избегаете ненужных каскадов при старте компонентов. #di#dagger#hilt#лучшиепрактики

Android Broadcast

@android_broadcast · Post #9738 · 09.12.2025 г., 12:05

🚀Cash App перевел Android-приложение на Metro — новый DI фреймворк для Kotlin Команда Cash App (Block) успешно мигрировала своё Android-приложение с Anvil/Dagger на Metro — современный фреймворк для dependency injection, разработанный Zac Sweers. Metro — это compile-time DI фреймворк, вдохновленный Dagger и Anvil, но реализованный как Kotlin compiler plugin. Он Kotlin-first, поддерживает K2 и работает значительно быстрее традиционных решений. Вобрал в себя всё лучшее от Dagger, Anvil и Kotlin-Inject Почему перешли на Metro? - Скорость сборки — ускорение инкрементальных сборок на ~60% - Поддержка Kotlin K2 — возможность использовать новейший компилятор Kotlin - Упрощение стека — отказ от kapt и Java-ориентированных инструментов - Современный подход — Kotlin-first дизайн и улучшенный DX - Более строгая валидация DI-графа - Улучшена безопасность типов (нуллабельность) - Поддержка KMP 📊 Результаты по скорости сборки: - Инкрементальные сборки → ускорение на 58-60% - Чистые сборки → ускорение на 17% - ABI-изменения → сборка за 11.9s вместо 28.8s Миграция 1500 модулей проводилась постепенно с двойной поддержкой двух DI фреймворков для безопасного перехода. В зависимости от настройки Gradle менялся DI и генерация кода. Впервые вижу подход, когда был описан граф для 2 разных DI с целью постепенной миграции. Миграцию с Koin на Metro так не сделать, но вот с Koin Annotations на Metro вполне может получится. #DI#KMP#Dagger#Metro#Android#AndroidDev#Anvil