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

TGINSIGHT SIMILAR POSTS

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

Изходен канал @clockstackwheels · Post #406 · 1.07

Хотел сделать большое видео об этом, но пора признаться себе, что у меня никогда не будет на него времени (чтобы сделать качественно и интересно). Поэтому расскажу вам так. Уже второй сезон езжу вот на такой технике: трицикл Can-Am Spyder 2008 года. Решение его купить основывалось на трёх пунктах. 1. Очень давно присматривался и хотел попробовать 2. Никогда не езжу в городе и вообще не использую мотоцикл как транспорт, а только как средство для удовольствия в свободных от пробок местах 3. Катать жену более безопасным образом :) Сразу скажу: техника ровно такая, какой выглядит — очень спорная, очень своеобразная. Центральный недостаток с точки зрения внешнего наблюдателя обычно выглядит так: от мотоцикла ты вроде бы ожидаешь возможности ездить сквозь пробки, а если уж нет, тогда логично взять автомобиль — он комфортнее, может ездить в дождь и снег, везти больше вещей. Это всё правда, я сейчас езжу на автомобиле в том числе, и могу со всей ответственностью заявить, что автомобиль комфортнее и удобнее как способ передвижения. Дело только в том, что мотоцикл это не способ передвижения. Я писал об этом давно, ещё когда ездил на двухколёсной технике. Для перемещения своего тела из точки А в точку Б крайне непрактично использовать транспорт, который наиболее опасен именно в плотном потоке машин, требует специальной одежды и обуви, не позволяет с собой взять много вещей, одинаково плох и в дождь и в жару. Мотоцикл это средство для катания ради кайфа. Ты выбираешь под это время и место. И вот тут трицикл показывает себя хорошо: проходимость в пробках не важна, потому что ты в любом случае не выбрал бы пробки. Вообще, по секрету вам скажу, мотоциклисты не испытывают удовольствия от необходимости протискиваться между рядами. Это довольно стрессово — тебе приходится постоянно следить, чтобы и тебя никто не прижал, и ты никому зеркало не снёс. Рука устаёт от работы сцепления и тормоза. Толкотня, выхлопы, агрессивные взбешённые из-за долгого стояния водители. А если у тебя не компактный городской нейкед, а широкий павер-круизер или Голда, тебе порой вообще лучше занимать в пробке машиноместо и стоять вместе со всеми. В каком-то смысле даже лучше, если у тебя нет выбора "стоять в пробке или пытаться тесниться с опасностью и стрессом для себя". Зато, если ты выезжаешь ранним утром или поздним вечером на кольцевую, ЗСД, в область и в другие подобные места, чтобы прокатиться с ветерком, либо едешь в дальняк — вот здесь у трицикла есть ряд серьёзных преимуществ. Самое главное это безопасность: тебе не страшны ямы, колдобины, рельсы, разметка и скользкая дорога. У тебя нет опасности завалиться на бок, словить вобблинг или боковой ветер. Как следствие, ты можешь ездить, например, в обычной обуви и относительно простой плотной одежде. Поездки в дождь, если уж пришлось, тоже существенно проще. При этом ощущения полностью мотоциклетные — динамика и обзор, чувство скорости и управление — всё как у мото (на эту штуку нужны мотоциклектные права, и вообще по документам это мотоцикл). Ты получаешь такие же эмоции, при этом меньше рискуя: отлично подходит для тех, у кого взаимоотношения с мототехникой это не адреналиновая наркомания, а просто способ приобретать определённые впечатления, недоступные другим способом. Ну и много мелочей сверху: больше вещей с собой везёшь (спереди багажник под крышкой), на пересечённой местности не страшно завалиться на грязи, меньше устаёшь сам (не нужно держать равновесие корпусом), легче ездить вдвоём с кем-то и т.д. Скоро собираюсь в средний дальняк (до этого ездил в маленький), буду вам рассказывать по пути. #moto#hobby

Hashtags

Резултати

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

Търсене: #viewmodel

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

@android_broadcast · Post #9572 · 18.10.2025 г., 11:35

Вот реальная история, как знание механики работы ViewModel спасло мне вечер 👇 У меня приложение на Compose и Jetpack Navigation 3 (работает на основе состояния Back Stack). Экран «Навигатор файлов» открывает папки рекурсивно: по сути это тот же экран, но с другими данными. Все данные — из одной и той же ViewModel.❗️Баг: при переходе в папку навигация срабатывает, UI не меняется. Современные ИИ подсказали общие вещи, но не помогли — промты, видимо, подвели (тут мне ещё надо прокачать знания) 🙂 Вспомнил ключевой факт про архитектуру: 👉 Все ViewModel живут в ViewModelStore. 👉 В пределах одного ViewModelStoreOwner (Activity/Fragment/NavBackStackEntry) получение ViewModel по умолчанию идёт по типу. 👉 Если нужно несколько экземпляров одного типа на одном owner’е — используем key. Решение в одну строку — привязать ключ к ViewModel, связанный с текущей папкой: @Composable fun FileNavigator( folderId: Id, modifier: Modifier = Modifier, ) { // новый folderId → новый экземпляр ViewModel → новый UI-стейт val viewModel: FileNavigatorViewModel = viewModel( key = "files(rootId='$folderId')" ) // ... } Мини-чеклист, если ловите такой баг 👉 Один экран используется повторно с разными параметрами? → Нужен key. 👉 Меняется route, но owner тот же? → key обязателен. 👉 Используете Hilt/Koin? → У этих функций тоже есть параметр key (hiltViewModel(key=...), koinViewModel(key=...)). 👉 key должен детерминированно зависеть от входных данных (например, folderId). 👉 При навигации назад убедитесь, что ViewModel освобождается ожидаемо. Ещё нюанс - если у вас сложная иерархия графов, проверьте, к какому ViewModelStoreOwner вы реально привязаны. Рекомендую посмотреть мои видео по теме: 📹Разбор Jetpack Navigation 3 🪙Полный разбор Jetpack ViewModel в Android и Kotlin Multiplatform #android#compose#androidjetpack#viewmodel#архитектура

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 #9683 · 20.11.2025 г., 14:59

🚀Lifecycle 2.10.0 вышел в стабильной версии! Google выпустила мажорное обновление библиотек Lifecycle. Этот релиз сфокусирован на улучшении интеграции с Compose. ⚙️rememberLifecycleOwner для Compose Новый композабл позволяет создавать изолированные LifecycleOwner внутри UI. Идеально для компонентов, которым нужно независимое управление состоянием — например, для HorizontalPager, где только активная страница должна быть в состоянии RESUMED. @Composable fun MyComposable() { val lifecycleOwner = rememberLifecycleOwner( maxLifecycle = Lifecycle.State.RESUMED, parentLifecycleOwner = LocalLifecycleOwner.current, ) CompositionLocalProvider( LocalLifecycleOwner provides lifecycleOwner ) { // Дочерние композаблы теперь имеют собственный жизненный цикл } } 🚀 Интеграция с Navigation 3 Новый артефакт lifecycle-viewmodel-navigation3 предоставляет готовый декоратор для автоматической привязки ViewModel к отдельным экранам в Navigation 3. NavDisplay( backStack = backStack, entryDecorators = listOf( rememberSaveableStateHolderNavEntryDecorator(), rememberViewModelStoreNavEntryDecorator(), // Добавляем эту строку ), entryProvider = entryProvider { /* ... */ } ) Удобства для разработчиков: 👉 Идиоматичный Kotlin API для создания кастомных CreationExtras CreationExtras { this[MY_CUSTOM_KEY] = "myValue" } 👉 Метод savedStateHandle.saved() теперь нативно поддерживает nullable типы 👉Конструкторы SavedStateHandle помечены как @VisibleForTesting ⚠️ Важное изменение Повышение minSdk с API 21 до API 23 — убедитесь, что ваше приложение соответствует новым требованиям. #Jetpack#Lifecycle#Compose#Navigation#ViewModel#Kotlin