Не смахивай приложения
Многие прогрессивные ребята говорят, что на смартфоне не нужно смахивать приложения из апп свитчера. Ведь умные операционки автоматически приостанавливает неиспользуемые приложения, управляют памятью, выгружают из фона и вообще тратят больше энергии на запуск, чем на восстановление. Сижу в айфончике по 18 часов в день и скажу, что тупее совета не слышал.
Конечно же нужно смахивать приложения на смартфоне. То есть закрывать их. Убивать процесс. И не париться, что в следующий раз оно запустится с холодного старта.
Recent menu – удобный способ быстро переключаться между приложениями: в одном скопировать, в другом вставить. Если не смахивать приложения, карусель быстро забивается, и пользоваться ей становится неудобно. Валидно, если у тебя всего 20 приложений и все помещаются на один экран. Но когда их 200 и чтобы просто заказать еду нужно открыть 6 разных – это не работает.
Также смартфон начинает тормозить, когда свернуто слишком много приложений. От этого просто не спастись. Хотелось бы, чтобы при сворачивании приложения сохраняли стек экранов и не заставляли заново втыкать на долгий сплэш скрин – но такого нет. Особенно этим болен инстаграм. Нужно 6 раз кликнуть, чтобы добраться до рилса в сохраненках. Свернул – развернул – потерял стек – повторил. Никакой пользы от сворачивания.
И как невероятно приятно смахнуть все приложения – будто отметил дела зелёными чекбоксами. Мозг радуется и получает свое ощущение завершённости.
Многие прогрессивные ребята говорят, что на смартфоне не нужно смахивать приложения из апп свитчера. Ведь умные операционки автоматически приостанавливает неиспользуемые приложения, управляют памятью, выгружают из фона и вообще тратят больше энергии на запуск, чем на восстановление. Сижу в айфончике по 18 часов в день и скажу, что тупее совета не слышал.
Конечно же нужно смахивать приложения на смартфоне. То есть закрывать их. Убивать процесс. И не париться, что в следующий раз оно запустится с холодного старта.
Recent menu – удобный способ быстро переключаться между приложениями: в одном скопировать, в другом вставить. Если не смахивать приложения, карусель быстро забивается, и пользоваться ей становится неудобно. Валидно, если у тебя всего 20 приложений и все помещаются на один экран. Но когда их 200 и чтобы просто заказать еду нужно открыть 6 разных – это не работает.
Также смартфон начинает тормозить, когда свернуто слишком много приложений. От этого просто не спастись. Хотелось бы, чтобы при сворачивании приложения сохраняли стек экранов и не заставляли заново втыкать на долгий сплэш скрин – но такого нет. Особенно этим болен инстаграм. Нужно 6 раз кликнуть, чтобы добраться до рилса в сохраненках. Свернул – развернул – потерял стек – повторил. Никакой пользы от сворачивания.
И как невероятно приятно смахнуть все приложения – будто отметил дела зелёными чекбоксами. Мозг радуется и получает свое ощущение завершённости.
Как разделить Android-приложение на Google и Huawei с помощью Flavors
Элегантное разделение проекта на отдельные сборки для магазинов Google Play, Huawei AppGallery и F-Droid, используя механизм Product Flavors. Он позволяет в рамках одной кодовой базы собирать APK с разными SDK, конфигурациями и зависимостями.
Код разнесен по платформенным модулям :gms, :hms и :foss. Все они реализуют общий контракт из :common, где описан интерфейс AppInteractor. Благодаря этому основной код приложения работает с единой абстракцией, не зная, какой именно сервис подключён – Google или Huawei.
Каждая реализация живет в своём модуле и подключает нужные зависимости: FirebaseAnalytics для Google и HiAnalytics для Huawei. В FOSS-вариант не подключается ничего. Связывание выполняется через модуль :inject, где с помощью Hilt определяется, какая реализация будет подставлена в зависимости от активного flavor.
В приложении задаются три flavors: gms, hms и foss. implementation-конфигурации гарантируют, что в сборку попадет только нужный код. Для плагинов добавлены переменные, вынесенные в buildSrc, чтобы подключать их условно.
Результат – три полностью автономных APK: один использует сервисы Google, другой – Huawei, а третий подходит для F-Droid и устройств без проприетарных SDK. Такой подход даёт гибкость и минимум дублирования, а главное – позволяет поддерживать все экосистемы Android-устройств из одной кодовой базы.
🐗 Смотреть на Ютубе
🐗 Смотреть на Бусти
🐗 Исходники на Гитхабе
🐗 Документация в Роадмапе
#video@foundout
Элегантное разделение проекта на отдельные сборки для магазинов Google Play, Huawei AppGallery и F-Droid, используя механизм Product Flavors. Он позволяет в рамках одной кодовой базы собирать APK с разными SDK, конфигурациями и зависимостями.
Код разнесен по платформенным модулям :gms, :hms и :foss. Все они реализуют общий контракт из :common, где описан интерфейс AppInteractor. Благодаря этому основной код приложения работает с единой абстракцией, не зная, какой именно сервис подключён – Google или Huawei.
Каждая реализация живет в своём модуле и подключает нужные зависимости: FirebaseAnalytics для Google и HiAnalytics для Huawei. В FOSS-вариант не подключается ничего. Связывание выполняется через модуль :inject, где с помощью Hilt определяется, какая реализация будет подставлена в зависимости от активного flavor.
В приложении задаются три flavors: gms, hms и foss. implementation-конфигурации гарантируют, что в сборку попадет только нужный код. Для плагинов добавлены переменные, вынесенные в buildSrc, чтобы подключать их условно.
Результат – три полностью автономных APK: один использует сервисы Google, другой – Huawei, а третий подходит для F-Droid и устройств без проприетарных SDK. Такой подход даёт гибкость и минимум дублирования, а главное – позволяет поддерживать все экосистемы Android-устройств из одной кодовой базы.
#video@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Расшифровка KMP-собеса
Когда сталкиваешься с задачей применить нейросети, быстро обнаруживаешь, что вокруг один скам на скаме. Работающих сервисов почти нет: донатные помойки на чужом API, либо кривые решения с рекламой.
У меня наметился собес на Kotlin Multiplatform девелопера, начал готовиться. Решил взять топ-100 вопросов и заучить ответы. Для этого расшифровать этот недавний собес с ютуба и вытащить оттуда все вопросы.
Хорошо, что это делается понятно и бесплатно. Сначала нужно достать mp3 из видео. Его продолжительность – 2 часа. Весит такой файл в битрейте 320 kbps почти 300 MB. Гугл не хочет, чтобы ты скачивал видосики с его ютуба. В поисковой выдаче не будет сервиса загрузки видео на комп. Немцы также не поощряют интернет-пиратство, поэтому надо еще и впн отключить. Идем в DuckDuckGo и снимаем галку безопасный поиск. Первая ссылка будет рабочей.
Затем надо установить Whisper от OpenAI для расшифровки аудио в текст. Для запуска понадобится Python. Причем не самый новый, подойдет версия 3.12.5. Дальше через CLI скормить ей аудиофайл. Прогнал на модели large-v3 с самой высокой точностью. Более легкие (medium/small/base/tiny) работают быстрее, но чаще ошибаются. Ждешь дольше, чем смотреть сам видос на скорости 0.5. Зато на выходе пять файлов: .txt, .srt, .tsv, .vtt и .json, включая полный транскрипт всей аудиозаписи и сегменты с таймкодами.
.txt сразу отправляется в ChatGPT, который достает из него список вопросов для собеса. Даже на категории поделил:
Когда сталкиваешься с задачей применить нейросети, быстро обнаруживаешь, что вокруг один скам на скаме. Работающих сервисов почти нет: донатные помойки на чужом API, либо кривые решения с рекламой.
У меня наметился собес на Kotlin Multiplatform девелопера, начал готовиться. Решил взять топ-100 вопросов и заучить ответы. Для этого расшифровать этот недавний собес с ютуба и вытащить оттуда все вопросы.
Хорошо, что это делается понятно и бесплатно. Сначала нужно достать mp3 из видео. Его продолжительность – 2 часа. Весит такой файл в битрейте 320 kbps почти 300 MB. Гугл не хочет, чтобы ты скачивал видосики с его ютуба. В поисковой выдаче не будет сервиса загрузки видео на комп. Немцы также не поощряют интернет-пиратство, поэтому надо еще и впн отключить. Идем в DuckDuckGo и снимаем галку безопасный поиск. Первая ссылка будет рабочей.
Затем надо установить Whisper от OpenAI для расшифровки аудио в текст. Для запуска понадобится Python. Причем не самый новый, подойдет версия 3.12.5. Дальше через CLI скормить ей аудиофайл. Прогнал на модели large-v3 с самой высокой точностью. Более легкие (medium/small/base/tiny) работают быстрее, но чаще ошибаются. Ждешь дольше, чем смотреть сам видос на скорости 0.5. Зато на выходе пять файлов: .txt, .srt, .tsv, .vtt и .json, включая полный транскрипт всей аудиозаписи и сегменты с таймкодами.
.txt сразу отправляется в ChatGPT, который достает из него список вопросов для собеса. Даже на категории поделил:
опыт, роль, зона ответственности
1. Расскажи про свой опыт мобильной разработки и конкретно про работу с KMP.
2. В чём состоит работа команды мобильной инфраструктуры, какие задачи она решает и где проходит граница её ответственности?
3. В каких проектах и в каком объёме использовался Compose Multiplatform и общий код?
4. Приходилось ли интегрировать общий KMP-код в iOS через Swift и какие трудности возникали?
5. Как распространялась KMP-библиотека между проектами, какие подходы пробовали и что выбрали?
архитектура и модули
6. Какие модули выделить при миграции на KMP и как разделить бизнес-логику, платформенный слой и UI?
7. Какие недостатки есть в текущей архитектуре (Activity, ViewModel, Repository) и как переработать структуру слоёв?
8. Как относишься к использованию Android-специфичных сущностей (Context, Color, Date, LiveData) в коде общего модуля?
9. Какие части проекта не вынести в KMP без адаптации и как ее организовать?
10. Как изменить работу с базой данных, чтобы она стала мультиплатформенной и работала на iOS и Android?
базы данных и хранилища
11. Какой движок хранения данных выбрать для KMP-проекта и почему?
12. Как организовать фабрику БД в KMP при разных драйверах и настройках платформ?
13. Как решать вопрос схемы, миграций и доступа к базе в KMP, чтобы код был единым на обеих платформах?
14. Как заменить SharedPreferences на KMP-совместимое хранилище?
DI и зависимости
15. Какой DI-фреймворк оптимален для KMP и почему?
16. Чем DI с кодогенерацией отличается от DI без неё и почему это важно в KMP?
17. Как внедрять зависимости в общий код и платформенные реализации без дублирования?
сетевой слой
18. Чем заменить Retrofit в KMP и почему предпочтителен Ktor?
19. Как организовать API, сериализацию и обработку ошибок, чтобы всё работало на обеих платформах?
UI и презентационный слой
20. Если UI на iOS остаётся нативным, а на Android – Compose или XML, как настроить общие ViewModel, чтобы их жизненный цикл согласовывался на обеих платформах?
21. Как связать жизненный цикл SwiftUI/UIViewController с жизненным циклом ViewModel?
22. Как организовать форматирование данных (дат, сумм, цветов, ресурсов), чтобы UI-логика не попадала в общий модуль?
23. Почему хранение UI-логики (строк и цветов) в модели данных – плохая практика и как это исправить?
expect/actual и платформенные зависимости
24. Какие зависимости стоит выносить в общий код через expect/actual, а какие – через DI?
25. Какие ограничения у expect/actual и когда этот механизм лучше не использовать?
26. Как передавать Android Context или iOS-специфичные объекты в общий модуль?
27. Какие best practices есть для организации платформенных реализаций?
Interop (Kotlin → iOS)
28. Какие основные проблемы есть в текущем Objective-C Interop?
29. Как преобразовать Kotlin enum в удобный Swift enum?
30. Как исправить ситуацию, когда generic из Kotlin становится nullable в Swift?
31. Когда нужна обёртка для Flow, чтобы корректно использовать его из Swift?
32. Какие готовые решения есть для безопасной работы с Flow и suspend-функциями в Swift?
33. Какие ограничения есть у suspend в Swift и как правильно передавать completion-callbacks?
34. Что такое Swift Export и какие задачи он решает по сравнению с interop?
35. Как подключать стороннюю iOS-библиотеку через cinterop и что он генерирует?
36. Какой формат у сгенерированных хедеров и как Kotlin-код получает доступ к Objective-C API?
37. В чём разница между статическим и динамическим iOS-фреймворком и какой вариант выбрать?
38. Зачем нужен XCFramework и какие проблемы он решает?
компиляция и память (Kotlin/Native)
39. Чем компиляция JVM отличается от Kotlin/Native на уровнях фронтенда и бэкенда?
40. Что такое FIR/IR и какую роль они играют при компиляции в Native?
41. Чем память Kotlin/Native отличается от JVM GC и iOS ARC?
42. Как решается проблема циклических ссылок между объектами Kotlin и Swift/Objective-C?
43. Какие риски возникают при смешении моделей GC и ARC в одном приложении?
44. Какие стратегии работы с памятью рекомендуются при interop и где нужно быть осторожным?
🐗 А здесь правильные ответы.
1. Расскажи про свой опыт мобильной разработки и конкретно про работу с KMP.
2. В чём состоит работа команды мобильной инфраструктуры, какие задачи она решает и где проходит граница её ответственности?
3. В каких проектах и в каком объёме использовался Compose Multiplatform и общий код?
4. Приходилось ли интегрировать общий KMP-код в iOS через Swift и какие трудности возникали?
5. Как распространялась KMP-библиотека между проектами, какие подходы пробовали и что выбрали?
архитектура и модули
6. Какие модули выделить при миграции на KMP и как разделить бизнес-логику, платформенный слой и UI?
7. Какие недостатки есть в текущей архитектуре (Activity, ViewModel, Repository) и как переработать структуру слоёв?
8. Как относишься к использованию Android-специфичных сущностей (Context, Color, Date, LiveData) в коде общего модуля?
9. Какие части проекта не вынести в KMP без адаптации и как ее организовать?
10. Как изменить работу с базой данных, чтобы она стала мультиплатформенной и работала на iOS и Android?
базы данных и хранилища
11. Какой движок хранения данных выбрать для KMP-проекта и почему?
12. Как организовать фабрику БД в KMP при разных драйверах и настройках платформ?
13. Как решать вопрос схемы, миграций и доступа к базе в KMP, чтобы код был единым на обеих платформах?
14. Как заменить SharedPreferences на KMP-совместимое хранилище?
DI и зависимости
15. Какой DI-фреймворк оптимален для KMP и почему?
16. Чем DI с кодогенерацией отличается от DI без неё и почему это важно в KMP?
17. Как внедрять зависимости в общий код и платформенные реализации без дублирования?
сетевой слой
18. Чем заменить Retrofit в KMP и почему предпочтителен Ktor?
19. Как организовать API, сериализацию и обработку ошибок, чтобы всё работало на обеих платформах?
UI и презентационный слой
20. Если UI на iOS остаётся нативным, а на Android – Compose или XML, как настроить общие ViewModel, чтобы их жизненный цикл согласовывался на обеих платформах?
21. Как связать жизненный цикл SwiftUI/UIViewController с жизненным циклом ViewModel?
22. Как организовать форматирование данных (дат, сумм, цветов, ресурсов), чтобы UI-логика не попадала в общий модуль?
23. Почему хранение UI-логики (строк и цветов) в модели данных – плохая практика и как это исправить?
expect/actual и платформенные зависимости
24. Какие зависимости стоит выносить в общий код через expect/actual, а какие – через DI?
25. Какие ограничения у expect/actual и когда этот механизм лучше не использовать?
26. Как передавать Android Context или iOS-специфичные объекты в общий модуль?
27. Какие best practices есть для организации платформенных реализаций?
Interop (Kotlin → iOS)
28. Какие основные проблемы есть в текущем Objective-C Interop?
29. Как преобразовать Kotlin enum в удобный Swift enum?
30. Как исправить ситуацию, когда generic из Kotlin становится nullable в Swift?
31. Когда нужна обёртка для Flow, чтобы корректно использовать его из Swift?
32. Какие готовые решения есть для безопасной работы с Flow и suspend-функциями в Swift?
33. Какие ограничения есть у suspend в Swift и как правильно передавать completion-callbacks?
34. Что такое Swift Export и какие задачи он решает по сравнению с interop?
35. Как подключать стороннюю iOS-библиотеку через cinterop и что он генерирует?
36. Какой формат у сгенерированных хедеров и как Kotlin-код получает доступ к Objective-C API?
37. В чём разница между статическим и динамическим iOS-фреймворком и какой вариант выбрать?
38. Зачем нужен XCFramework и какие проблемы он решает?
компиляция и память (Kotlin/Native)
39. Чем компиляция JVM отличается от Kotlin/Native на уровнях фронтенда и бэкенда?
40. Что такое FIR/IR и какую роль они играют при компиляции в Native?
41. Чем память Kotlin/Native отличается от JVM GC и iOS ARC?
42. Как решается проблема циклических ссылок между объектами Kotlin и Swift/Objective-C?
43. Какие риски возникают при смешении моделей GC и ARC в одном приложении?
44. Какие стратегии работы с памятью рекомендуются при interop и где нужно быть осторожным?
Please open Telegram to view this post
VIEW IN TELEGRAM
Подписочная модель
Никто не вспомнит каким был интернет без подписок. Целое приложение или его функциональность покупались единоразово. Музыку продавали по 11₽ за песню. Я сам реализовывал такие покупки через Google Play Billing.
Потом мир захватили ежемесячные подписки. Или сразу на год со скидкой. Такие модели популярнее из-за предсказуемых доходов, и потому что юзеры просто забывают отписываться.
Я решил посчитать свои подписки. Рационализировать их полезность. Каждый новый сервис с метафорой про чашку кофе не догоняет, что я уже плачу за целое ведро. И чем оно больше, тем меньше хочется хлебать еще.
🐗 Telegram Premium
2 990₽ за 2 года
Подписку отхватил по хэллоуинской акции. Ранее стоила 1 990₽ в год.
Плюшки:
• Загрузка файлов до 4 ГБ
• Удвоенные лимиты
• Расшифровка голосовых
• Анимированные эмодзи
• Автоархивирование
• Отключение рекламы
• 3 реакции на сообщение
• Чеклисты
🐗 Тариф «Весь МТС Супер 1 Гб/с»
1 190₽ в месяц
+ 99₽ в месяц за аренду роутера
Перешел на МТС, так как он был единственным провайдером в доме.
Плюшки:
• Домашний интернет в двух диапазонах – 2.4 ГГц и 5 ГГц
• Мобильный интернет 30 ГБ
• Онлайн кинотеатр KION
🐗 МТС Premium
2 990₽ в год
Без этой подписки тариф слишком кастрированный.
Плюшки:
• 3 000₽ кэшбэка в год (окупается)
• Мобильный интернет 50 ГБ
• Бесплатная раздача трафика
• Бесплатный старт самокатов Юрент
• Кэшбэк 10% на аренду в Belkacar
• +5 минут к бесплатному ожиданию в Belkacar
🐗 T-Premium Silver
Бесплатно
В этот банк приходит зарплата. Картами не пользуюсь. Открывал счет когда обслуживание было платным.
Плюшки:
• Бесплатное обслуживание счетов
• Металлическая карта MIR Supreme
• Бесплатные проходы в бизнес-залы
• Компенсация каршеринга
• Кэшбэк 30 000₽ в месяц
• Кэшбэк 7% за авиабилеты
• Кэшбэк 10% за отели
• Повышенные ставки по вкладам
• Страховка в поездках
• Консьерж-сервис
• Доставка наличных
• Бесплатные переводы на карты других банков
• Скидка на тариф Т-Мобайл
🐗 Т-Мобайл
150₽ в месяц
Вторая/третья симкарты нужны чтобы регать дополнительные аккаунты в телеге, хедхантере, гугле и эппле. Тариф оплачиваю не каждый месяц, а только в поездках по России. Чтобы было 2 активных оператора. Застревал в лесу без сети.
Плюшки:
• 5 ГБ интернета
• Виртуальный номер
🐗 INSNC Smart Classic
4.9 BYN в месяц
Это за три открытых счета в белорусской Альфе: в долларах, в евро и в белорусских рублях.
Плюшки:
• Пластиковые дебетовые карты
• Добавляются в Apple Pay
🐗 Яндекс Плюс
3 490₽ в год
Эта подписка окупает себя каждый месяц. Иногда по 2-3 раза. Яндекс является монополистом на рынках такси и доставки еды. Живя в Москве, невозможно не пользоваться их сервисами на постоянной основе.
Плюшки:
• Повышенная ставка по вкладам
• Возможность тратить баллы Плюса
• Кэшбэк во всех сервисах
• Фильмы в Кинопоиске
• Книги в Яндекс Книгах
• Музыка в Яндекс Музыке
• Приглашение близких
🐗 Яндекс Движ
399₽ в год
Подключается как дополнительная опция к мультиподписке. Все ради самокатов.
Плюшки:
• 0₽ за старт самокатов
• Скидка 10% на поездки в Драйве
🐗 Яндекс Диск
1 290₽ в год
Там у меня лежат купленные когда-то курсы. Подумываю отменить, но лень все перемещать.
Плюшки:
• 200 ГБ дополнительного места
• Загрузка файлов до 50 ГБ
• Фильтр спама в почте
🐗 Whoosh Pass
999₽ в год
Покупаю каждый сезон, чтобы всегда брать первый попавшийся самокат. Вушами пользовался в Москве и в Сочи.
Плюшки:
• 0₽ за старт
• Бронь 20 минут
🐗 ChatGPT Plus
$20 в месяц
Каждый второй месяц бесплатно. Пока моя единственная платная нейросеть. Возможно скоро добавится Gemini.
Плюшки:
• Более умная модель и thinking-режим
• Расширенные лимиты
• Быстрее и больше генерации картинок
• Deep Research и агентный режим
• Память, проекты и задачи
• Приоритетный доступ
🐗 Apple iCloud+ 2 ТБ
Бесплатно
128 ГБ встроенной памяти в айфоне не хватает совсем.
Плюшки:
• 2 ТБ в хранилище
• Скрытые email-адреса
Никто не вспомнит каким был интернет без подписок. Целое приложение или его функциональность покупались единоразово. Музыку продавали по 11₽ за песню. Я сам реализовывал такие покупки через Google Play Billing.
Потом мир захватили ежемесячные подписки. Или сразу на год со скидкой. Такие модели популярнее из-за предсказуемых доходов, и потому что юзеры просто забывают отписываться.
Я решил посчитать свои подписки. Рационализировать их полезность. Каждый новый сервис с метафорой про чашку кофе не догоняет, что я уже плачу за целое ведро. И чем оно больше, тем меньше хочется хлебать еще.
2 990₽ за 2 года
Подписку отхватил по хэллоуинской акции. Ранее стоила 1 990₽ в год.
Плюшки:
• Загрузка файлов до 4 ГБ
• Удвоенные лимиты
• Расшифровка голосовых
• Анимированные эмодзи
• Автоархивирование
• Отключение рекламы
• 3 реакции на сообщение
• Чеклисты
1 190₽ в месяц
+ 99₽ в месяц за аренду роутера
Перешел на МТС, так как он был единственным провайдером в доме.
Плюшки:
• Домашний интернет в двух диапазонах – 2.4 ГГц и 5 ГГц
• Мобильный интернет 30 ГБ
• Онлайн кинотеатр KION
2 990₽ в год
Без этой подписки тариф слишком кастрированный.
Плюшки:
• 3 000₽ кэшбэка в год (окупается)
• Мобильный интернет 50 ГБ
• Бесплатная раздача трафика
• Бесплатный старт самокатов Юрент
• Кэшбэк 10% на аренду в Belkacar
• +5 минут к бесплатному ожиданию в Belkacar
Бесплатно
В этот банк приходит зарплата. Картами не пользуюсь. Открывал счет когда обслуживание было платным.
Плюшки:
• Бесплатное обслуживание счетов
• Металлическая карта MIR Supreme
• Бесплатные проходы в бизнес-залы
• Компенсация каршеринга
• Кэшбэк 30 000₽ в месяц
• Кэшбэк 7% за авиабилеты
• Кэшбэк 10% за отели
• Повышенные ставки по вкладам
• Страховка в поездках
• Консьерж-сервис
• Доставка наличных
• Бесплатные переводы на карты других банков
• Скидка на тариф Т-Мобайл
150₽ в месяц
Вторая/третья симкарты нужны чтобы регать дополнительные аккаунты в телеге, хедхантере, гугле и эппле. Тариф оплачиваю не каждый месяц, а только в поездках по России. Чтобы было 2 активных оператора. Застревал в лесу без сети.
Плюшки:
• 5 ГБ интернета
• Виртуальный номер
4.9 BYN в месяц
Это за три открытых счета в белорусской Альфе: в долларах, в евро и в белорусских рублях.
Плюшки:
• Пластиковые дебетовые карты
• Добавляются в Apple Pay
3 490₽ в год
Эта подписка окупает себя каждый месяц. Иногда по 2-3 раза. Яндекс является монополистом на рынках такси и доставки еды. Живя в Москве, невозможно не пользоваться их сервисами на постоянной основе.
Плюшки:
• Повышенная ставка по вкладам
• Возможность тратить баллы Плюса
• Кэшбэк во всех сервисах
• Фильмы в Кинопоиске
• Книги в Яндекс Книгах
• Музыка в Яндекс Музыке
• Приглашение близких
399₽ в год
Подключается как дополнительная опция к мультиподписке. Все ради самокатов.
Плюшки:
• 0₽ за старт самокатов
• Скидка 10% на поездки в Драйве
1 290₽ в год
Там у меня лежат купленные когда-то курсы. Подумываю отменить, но лень все перемещать.
Плюшки:
• 200 ГБ дополнительного места
• Загрузка файлов до 50 ГБ
• Фильтр спама в почте
999₽ в год
Покупаю каждый сезон, чтобы всегда брать первый попавшийся самокат. Вушами пользовался в Москве и в Сочи.
Плюшки:
• 0₽ за старт
• Бронь 20 минут
$20 в месяц
Каждый второй месяц бесплатно. Пока моя единственная платная нейросеть. Возможно скоро добавится Gemini.
Плюшки:
• Более умная модель и thinking-режим
• Расширенные лимиты
• Быстрее и больше генерации картинок
• Deep Research и агентный режим
• Память, проекты и задачи
• Приоритетный доступ
Бесплатно
128 ГБ встроенной памяти в айфоне не хватает совсем.
Плюшки:
• 2 ТБ в хранилище
• Скрытые email-адреса
Please open Telegram to view this post
VIEW IN TELEGRAM
100₽ в месяц
Почти бесплатно, учитывая плюшки. Конфиг Нидерланды/Германия. Outline есть на всех платформах. Не работает с мобильной сетью.
Плюшки:
• Безлимитный трафик
• Высокая скорость
• Низкий пинг
• Работает на 2 устройствах
4 488₽ в год
Нужна, чтобы проходить игрульки на плойке.
Плюшки:
• Все из Essential + Extra
• Каталог классики
• Пробные версии игр
• Облачное хранилище сейвов
2 990₽ в год
Столько с меня содрали перекупы на Авито. Это на украинский аккаунт в PS5.
Плюшки:
• Доступ к библиотеке игр EA
• Триалы новых игр
3 949₽ в месяц за 5 подписок.
Поддерживаю творчество авторов и состою в их закрытых сообществах. Не планирую останавливаться. Если разгоняете что-то про мобилку и выживание в цифровую эпоху – дайте знать.
P.S. от каких подписок отказался:
Больше никто меня на подписку не прогрел.
Please open Telegram to view this post
VIEW IN TELEGRAM
У меня есть привычка в телеграм каналах, которые читаю, ставить реакции на посты, чтобы отмечать их как просмотренные. Благодаря премиуму, на каждый пост я леплю по 3 реакции.
Тяжелее всего мне читать каналы, в которых реакции отключены. Я не могу быстро понять читал я пост или нет.
В iOS-клиенте телеги запоминание позиции скролла работает каким-то магическим образом. При повторном открытии канала мне часто показывается пост, который я уже видел. Не всегда работает перемотка только к новым непрочитанным постам.
Я асинхронно читаю где-то 150 каналов и чтобы не терять время на выбор реакций просто прожмякиваю 3 самые первые. Иногда там пальцы вниз 👎, клувни 🤡 и говно 💩, я не смотрю. Уж простите.
На посты, которые мне невероятно понравились (вот бы я такой написал) влупливаю телеграм стар⭐️ . Если автор канала у себя их включил конечно же. Эти полтора рубля еще никого не сделали богатым. Зато в телеге удобно потом в настройках пролистать весь список таких оцененных постов.
Такие же бзики у меня с рилсами, которые кидают в дм и всеми видео на ютубе, которые посмотрел.
Тяжелее всего мне читать каналы, в которых реакции отключены. Я не могу быстро понять читал я пост или нет.
В iOS-клиенте телеги запоминание позиции скролла работает каким-то магическим образом. При повторном открытии канала мне часто показывается пост, который я уже видел. Не всегда работает перемотка только к новым непрочитанным постам.
Я асинхронно читаю где-то 150 каналов и чтобы не терять время на выбор реакций просто прожмякиваю 3 самые первые. Иногда там пальцы вниз 👎, клувни 🤡 и говно 💩, я не смотрю. Уж простите.
На посты, которые мне невероятно понравились (вот бы я такой написал) влупливаю телеграм стар
Такие же бзики у меня с рилсами, которые кидают в дм и всеми видео на ютубе, которые посмотрел.
Please open Telegram to view this post
VIEW IN TELEGRAM
1 8 6 3 1 1 1
Как не болеть
Из года в год при наступлении холодов обсуждаем как не болеть. Я открыл в этом деле серебряную пулю.
Болеет человек разумный не из-за холода, а из-за вирусов. Гуляешь в переполненных местах или сидишь дома – не так важно. Зимой при отоплении воздух становится сухим, слизистая носа пересыхает и проклятым вирусам становится легче цепляться за клеточную поверхность. Когда же воздух влажный, вирус вместе со слюнями и соплями улетает в пищевод, где долго не прожить.
То есть воздух надо увлажнять. С этим хорошо справляется увлажнитель воздуха. Регулярно заливать в него водичку. И пусть отрабатывает. В пересушеном воздухе 20-30% влажности. Надо нагнать 40-50%.
Можно спать 5 часов, запивать лейс краб колой, скуфидонить, выгорать и глотать колеса. Главное – делать это в квартире с влажность воздуха > 40%. Проверено на себе. Два года без соплей.
Из года в год при наступлении холодов обсуждаем как не болеть. Я открыл в этом деле серебряную пулю.
Болеет человек разумный не из-за холода, а из-за вирусов. Гуляешь в переполненных местах или сидишь дома – не так важно. Зимой при отоплении воздух становится сухим, слизистая носа пересыхает и проклятым вирусам становится легче цепляться за клеточную поверхность. Когда же воздух влажный, вирус вместе со слюнями и соплями улетает в пищевод, где долго не прожить.
То есть воздух надо увлажнять. С этим хорошо справляется увлажнитель воздуха. Регулярно заливать в него водичку. И пусть отрабатывает. В пересушеном воздухе 20-30% влажности. Надо нагнать 40-50%.
Можно спать 5 часов, запивать лейс краб колой, скуфидонить, выгорать и глотать колеса. Главное – делать это в квартире с влажность воздуха > 40%. Проверено на себе. Два года без соплей.
Navigation3
Перетащил свою kmp-поделку на новую библиотеку навигации от гугла. Для приложения на 7 экранов процесс занял 1 час.
Начиналась навигация с переходов между активити с помощью интентов. Потом single-activity + фрагменты. Потом Cicerone. Потом Navigation Component с XML-графами. Потом Navigation Compose. Потом эта же навигация стала Type safe.
И вот теперь мы здесь.
Сегодня котируется подход practice-first, когда сначала код за тебя пишет агент, а уже потом ты разбираешь теорию, чтобы запомнить её через опыт, а не абстрактные определения.
В гугле это осознали и выкатили инструкцию для LLM, как мигрировать с 2 версии навигации на 3. Все что требуется – запустить агента и подождать несколько минут. Я попробовал Gemini 3 Pro в Android Studio и ChatGPT 5 в Codex. Обе справились почти на отлично. Нейросеть от гугла больше понимает за андроид-проекты, а не за kmp. Даже зависимости подключила android-only. В проект влил ветку, созданную в Codex.
Отдельное спасибо агенту, что сообразил обновить koin-модули вьюмоделей, так как в новой навигации больше нет удобного получения аргументов из SavedStateHandle.
Приложение запускается и тыкается. Что пришлось поменять:
• У метода NavDisplay три перегрузки и агент взял ту, где напрямую не используется back stack. Я хоть новостей и не читал, но перед глазами мелькали релизноуты как удобно там экраны добавлять через .add и удалять через .removeLastOrNull. Поэтому поменял перегрузку и управление стеком.
• Агент забыл привязать жизненный цикл ViewModel к entry, а не ко всему NavHost. Добавил rememberViewModelStoreNavEntryDecorator.
• В Nav2 при жесте назад по умолчанию использовалась fade-анимация. Вернул ее в Nav3, переопределив predictivePopTransitionSpec. Новая анимация по умолчанию пока слишком кривая.
Хороший пример kmp-проекта на Nav3 – официальное приложение kotlin-konf. Многим оттуда вдохновился.
Теперь, когда все сделано, можно начинать изучать, что нового в этой навигации. И потом мигрировать проект посложнее.
Перетащил свою kmp-поделку на новую библиотеку навигации от гугла. Для приложения на 7 экранов процесс занял 1 час.
Начиналась навигация с переходов между активити с помощью интентов. Потом single-activity + фрагменты. Потом Cicerone. Потом Navigation Component с XML-графами. Потом Navigation Compose. Потом эта же навигация стала Type safe.
И вот теперь мы здесь.
Сегодня котируется подход practice-first, когда сначала код за тебя пишет агент, а уже потом ты разбираешь теорию, чтобы запомнить её через опыт, а не абстрактные определения.
В гугле это осознали и выкатили инструкцию для LLM, как мигрировать с 2 версии навигации на 3. Все что требуется – запустить агента и подождать несколько минут. Я попробовал Gemini 3 Pro в Android Studio и ChatGPT 5 в Codex. Обе справились почти на отлично. Нейросеть от гугла больше понимает за андроид-проекты, а не за kmp. Даже зависимости подключила android-only. В проект влил ветку, созданную в Codex.
Отдельное спасибо агенту, что сообразил обновить koin-модули вьюмоделей, так как в новой навигации больше нет удобного получения аргументов из SavedStateHandle.
Приложение запускается и тыкается. Что пришлось поменять:
• У метода NavDisplay три перегрузки и агент взял ту, где напрямую не используется back stack. Я хоть новостей и не читал, но перед глазами мелькали релизноуты как удобно там экраны добавлять через .add и удалять через .removeLastOrNull. Поэтому поменял перегрузку и управление стеком.
• Агент забыл привязать жизненный цикл ViewModel к entry, а не ко всему NavHost. Добавил rememberViewModelStoreNavEntryDecorator.
• В Nav2 при жесте назад по умолчанию использовалась fade-анимация. Вернул ее в Nav3, переопределив predictivePopTransitionSpec. Новая анимация по умолчанию пока слишком кривая.
Хороший пример kmp-проекта на Nav3 – официальное приложение kotlin-konf. Многим оттуда вдохновился.
Теперь, когда все сделано, можно начинать изучать, что нового в этой навигации. И потом мигрировать проект посложнее.
F1
В этом году наверстал два тренда, которые всегда игнорировал. Первый – мне подарили PS5, теперь я тоже говорю, что Элли – мискаст. Второй – начал шарить за лор Формулы 1.
Мне всю жизнь было плевать на гонки. Особенно на формулу. Какие-то миллионеры, в экипировке, на которой места нет без рекламы, катаются кругами. Уже от скуки дергаюсь.
Но за последние пару лет все поменялось. И в этом большая заслуга самих менеджеров формулы. Они агрессивно перестроили маркетинг. Сделали гонку модной и привлекательной. Охватили большую аудиторию.
• Отправили старых руководящих пердунов на пенсию
• Продали стриминг эпплу
• Выкатили игру на последнюю плойку
• Снимают сериал на нетфликс
• Сняли 2.5 часовую рекламу с Бредом Питтом
• Бесконечные рилсы и контент в соцсетях
• Позвали Ханса Циммера, чтоб залупендил саундрек
• Финалы катают в ОАЭ – безвиз + удобный часовой пояс
• Трехдневный фестиваль с фанзоной, едой и мерчом
Так что я, отсмотрев десяток рилсов, видос полное руководство на ютубе, прочитав три статьи в википедии и спросив у перплексити что там и куда, теперь малость шарю за Ферстаппена, Норриса, Леклера, пит-стоп, оверкат и сейфти-кар.
Посмотрел только финал, зато какой!Впервые с 2021 года новый победитель, с логотипами джеминай на тачке и андроида на каске, значит наш слон.
В этом году наверстал два тренда, которые всегда игнорировал. Первый – мне подарили PS5, теперь я тоже говорю, что Элли – мискаст. Второй – начал шарить за лор Формулы 1.
Мне всю жизнь было плевать на гонки. Особенно на формулу. Какие-то миллионеры, в экипировке, на которой места нет без рекламы, катаются кругами. Уже от скуки дергаюсь.
Но за последние пару лет все поменялось. И в этом большая заслуга самих менеджеров формулы. Они агрессивно перестроили маркетинг. Сделали гонку модной и привлекательной. Охватили большую аудиторию.
• Отправили старых руководящих пердунов на пенсию
• Продали стриминг эпплу
• Выкатили игру на последнюю плойку
• Снимают сериал на нетфликс
• Сняли 2.5 часовую рекламу с Бредом Питтом
• Бесконечные рилсы и контент в соцсетях
• Позвали Ханса Циммера, чтоб залупендил саундрек
• Финалы катают в ОАЭ – безвиз + удобный часовой пояс
• Трехдневный фестиваль с фанзоной, едой и мерчом
Так что я, отсмотрев десяток рилсов, видос полное руководство на ютубе, прочитав три статьи в википедии и спросив у перплексити что там и куда, теперь малость шарю за Ферстаппена, Норриса, Леклера, пит-стоп, оверкат и сейфти-кар.
Посмотрел только финал, зато какой!
1 9 3 2 1
Android | Михаил Белый
Рождественский дроп
Юху, 300 уважаемых читателей у канала. Держать строй спартанцы. Не отписываемся!
Если победишь – пиши в бота.
Юху, 300 уважаемых читателей у канала. Держать строй спартанцы. Не отписываемся!
Если победишь – пиши в бота.
Утопил очки за $500 в океане. Как говорится, остров меня не принял.
Это последняя фотка в них. Ко мне на лежак приполз геккон🦎.
С одной стороны досадно, только чехол и остался. С другой – побит рекорд авито-скама.
Это последняя фотка в них. Ко мне на лежак приполз геккон🦎.
С одной стороны досадно, только чехол и остался. С другой – побит рекорд авито-скама.
Коллекционный юзернейм
Пристроил завалявшиеся тоны в телеграм кошеле, чтобы купить дополнительный юзернейм для канала.
Любое такое имя должно быть коллекционным, то есть приобретенным на аукционе/у владельца на площадке Fragment.
После покупки имя принадлежит тебе как цифровой актив и может перепродаваться. А право собственности переходит на кошелек, который использовался для покупки.
Можно пойти и выкупить юзернейм на площадке. Но проще заранее застолбить его в телеграме и затем преобразовать в NFT. Для этого открывается аукцион. Длится неделю. Минимальная ставка – 10 TON. Никому нет дела до этих торгов и ставка как правило не перекрывается.
Потом уже купленный юзернейм можно присвоить личному профилю, публичным группам и каналам. И активировать в настройках.
Изначально мне нужен был коллекционный юзернейм, чтобы присвоить его боту, который работает здесь в закрытом чате. Это единственный способ включить для него премиум функции. Но в момент привязки просят единовременно занести 1000 TON. А-ху-еть. Курс еще и вырос. Отказался.
@android_career
t.me/android_career
android_career.t.me
Пристроил завалявшиеся тоны в телеграм кошеле, чтобы купить дополнительный юзернейм для канала.
Любое такое имя должно быть коллекционным, то есть приобретенным на аукционе/у владельца на площадке Fragment.
После покупки имя принадлежит тебе как цифровой актив и может перепродаваться. А право собственности переходит на кошелек, который использовался для покупки.
Можно пойти и выкупить юзернейм на площадке. Но проще заранее застолбить его в телеграме и затем преобразовать в NFT. Для этого открывается аукцион. Длится неделю. Минимальная ставка – 10 TON. Никому нет дела до этих торгов и ставка как правило не перекрывается.
Потом уже купленный юзернейм можно присвоить личному профилю, публичным группам и каналам. И активировать в настройках.
Изначально мне нужен был коллекционный юзернейм, чтобы присвоить его боту, который работает здесь в закрытом чате. Это единственный способ включить для него премиум функции. Но в момент привязки просят единовременно занести 1000 TON. А-ху-еть. Курс еще и вырос. Отказался.
@android_career
t.me/android_career
android_career.t.me
Криптовалютное будущее
Когда-то давно выходил сериал Мистер Робот. Там персонажи расплачивались за все криптой по QR-кодам. Я смотрел на все это и думал: нихуясе будущее. Поскорей бы и у нас.
Прошло время и оказалось, что поторопился с выводами. Никакой революции не случилось. Криптовалюты и блокчейны, на которых они работают, чрезвычайно медленные и очень дорогие.
У меня полгода в телеграм-кошельке пылились 50 USDT и я от нечего делать решил их задепать на Полимаркете за Трампа, когда в США шли выборы. Пополнить полимаркет из РФ тот еще квест. Раньше я юзал Бинанс. Потом русских оттуда попросили и я переполз да Байбит. Из телеги перегнал USDT туда. Потом оттуда перегнал их в Gate через блокчейн Солана. Там купил на них USDC и через Полигон перегнал их уже на Полимаркет. Он работает только с USDC и Полигоном.
Переводы чудовищно медленные, могут идти до 10 минут. Транзакции стоят по 1 доллару. Если бы Виза сотку сжирала за перевод – она бы обанкротилась. А тут терпим. В итоге ставка сыграла и я поднял бабла. Но пока гнал выигрыш обратно в телеграм – по пути растерял половину на комиссиях. Одни расстройства.
Даже в самой телеге надо звездами платить за переводы между кошельком и TON. Нельзя купить сколько надо звезд – бери только 500 штук.
Спасибо крипте за возможность вывести котлету денег в другую юрисдикцию, минуя красный коридор. В остальном она мне не нравится.
Когда-то давно выходил сериал Мистер Робот. Там персонажи расплачивались за все криптой по QR-кодам. Я смотрел на все это и думал: нихуясе будущее. Поскорей бы и у нас.
Прошло время и оказалось, что поторопился с выводами. Никакой революции не случилось. Криптовалюты и блокчейны, на которых они работают, чрезвычайно медленные и очень дорогие.
У меня полгода в телеграм-кошельке пылились 50 USDT и я от нечего делать решил их задепать на Полимаркете за Трампа, когда в США шли выборы. Пополнить полимаркет из РФ тот еще квест. Раньше я юзал Бинанс. Потом русских оттуда попросили и я переполз да Байбит. Из телеги перегнал USDT туда. Потом оттуда перегнал их в Gate через блокчейн Солана. Там купил на них USDC и через Полигон перегнал их уже на Полимаркет. Он работает только с USDC и Полигоном.
Переводы чудовищно медленные, могут идти до 10 минут. Транзакции стоят по 1 доллару. Если бы Виза сотку сжирала за перевод – она бы обанкротилась. А тут терпим. В итоге ставка сыграла и я поднял бабла. Но пока гнал выигрыш обратно в телеграм – по пути растерял половину на комиссиях. Одни расстройства.
Даже в самой телеге надо звездами платить за переводы между кошельком и TON. Нельзя купить сколько надо звезд – бери только 500 штук.
Спасибо крипте за возможность вывести котлету денег в другую юрисдикцию, минуя красный коридор. В остальном она мне не нравится.
Вкусная несъедобная сущность
«HR получит свой процент – а ты вкусный оффер»
«Мои менти лутают самые вкусные офферы»
«В ВК тоже вкусно работается»
«На вкусные вакансии собешусь»
У меня уши в трубочку сворачиваются от таких эпитетов. Скрип пенопласта легче переносить. Ну какой к черту вкусный оффер? Оголодал – поешь. Даже «сочный» теперь звучит не так мерзко.
Без негатива.
Всем добра и позитива.
«HR получит свой процент – а ты вкусный оффер»
«Мои менти лутают самые вкусные офферы»
«В ВК тоже вкусно работается»
«На вкусные вакансии собешусь»
У меня уши в трубочку сворачиваются от таких эпитетов. Скрип пенопласта легче переносить. Ну какой к черту вкусный оффер? Оголодал – поешь. Даже «сочный» теперь звучит не так мерзко.
Без негатива.
Всем добра и позитива.