Авторская песочница о карьере в IT в роли Mobile Dev (Android, Kotlin, Multiplatform, AI) и разных вещах, которые мне интересны.
Автор: @michaelbel
Материалы: android-career.com
Забустить: t.me/boost/foundout
Задонатить: boosty.to/michaelbel
Post #275
340
15. При рефакторинге класса-обёртки для RxJava нашёл 40 перегрузок метода
16. ExoPlayer оказался для меня самым проблемным SDK: документация никакая, примеров нормальных не найти. Я не знал, что приложение должно отслеживать входящий звонок, чтобы передавать ему аудиофокус, ставя проигрывание на паузу. У наших пользователей после окончания звонка внезапно воспроизводилось видео из свернутого приложения.
17. Делали кэширование видеозаписей. Забыли про пользователей в роуминге. Посыпались жалобы от туристов, у которых наше приложение съело весь трафик. С тех пор эту историю выслушивают все, кто меня собесит.
18. С Paging Library огреб проблем не меньше, чем с эксоплеером. Прокрутка начала троттлиться из-за неправильного сохранения PagingKey в Room.
19. На бэке добавился новый статус, который в таблице Room хранился в поле с типом
20. Бэк стал слать пустой
21. Поймал неконсистентную эмиссию данных из таблиц Room. Flow нужно собирать в
22. Отвалилось отображение пушей. Потому что загрузил метод
23. Забыл добавить готовые ProGuard-директивы из файла
24. Разнес сборку debug и release на отдельные CI-джобы, но не настроил общий Gradle-кэш. Раннеру не хватило памяти: debug собрался, а release отменился.
25. Для тестирования ML Kit временно добавил в манифест атрибут
26. Загрузил в репозиторий на гитхабе keystore-файл и ключи для подписи релизной сборки, полагая что приватность репозитория гарантирует безопасность.
27. В комментарий к задаче в джире опубликовал фрагмент лога, в котором засветился секретный токен.
28. На одной работе запушил коммит, подписанный корпоративной электронной почтой со второй работы. Теперь не использую
29. Сидел на дейли в AirPods. Вышел встретить курьера, который потерял подъезд. Чтобы расслышать его, нажал кнопку на наушнике – не заметив, что тем самым включил микрофон. Обматерил и курьера и всех на созвоне.
30. Конечно же на первой работе я закоммитился сделать таску за два дня, не проверив доступы. Накануне вечером открываю фигму, а там restricted access. Cпас коллега, у которого были права выдавать инвайты.
Список неполный, постоянно пополняется.
Под конец несколько духоподъемных цитат, чтобы снизить чувство бесполезности усилий:
😠 Не ошибается тот, кто ничего не делает.
😚 Важно не никогда не ошибаться, а побеждать чаще, чем ошибаться.
🥃 Единственная настоящая ошибка – та, из которой ты ничего не извлёк.
onSubscribe с разными параметрами. IDE подсветила половину как неиспользуемые и я их радостно удалил. В результате вызовы переключились на другие перегрузки, параметры изменились и асинхронщина поломалась.16. ExoPlayer оказался для меня самым проблемным SDK: документация никакая, примеров нормальных не найти. Я не знал, что приложение должно отслеживать входящий звонок, чтобы передавать ему аудиофокус, ставя проигрывание на паузу. У наших пользователей после окончания звонка внезапно воспроизводилось видео из свернутого приложения.
17. Делали кэширование видеозаписей. Забыли про пользователей в роуминге. Посыпались жалобы от туристов, у которых наше приложение съело весь трафик. С тех пор эту историю выслушивают все, кто меня собесит.
18. С Paging Library огреб проблем не меньше, чем с эксоплеером. Прокрутка начала троттлиться из-за неправильного сохранения PagingKey в Room.
19. На бэке добавился новый статус, который в таблице Room хранился в поле с типом
Enum. Старая версия приложения при чтении передавала эту незнакомую строку в Enum.valueOf(). Вылет с IllegalArgumentException.20. Бэк стал слать пустой
id, надо было в Room для primary-ключа сделать такое: id.ifEmpty { portion }. Перепутал portion с локальным полем position, которое постоянно инкрементируется. Надобавлялась куча дубликатов.21. Поймал неконсистентную эмиссию данных из таблиц Room. Flow нужно собирать в
combine(), а операции вставки выполнять в единой транзакции.22. Отвалилось отображение пушей. Потому что загрузил метод
onMessageReceived тяжёлой асинхронной логикой. FCM держит FirebaseMessagingService в памяти недолго, затем прибивает. Об этом я не знал.23. Забыл добавить готовые ProGuard-директивы из файла
missing_rules, которые указываются при выполнении таски minify. Релизное приложение вылетело в рантайме.24. Разнес сборку debug и release на отдельные CI-джобы, но не настроил общий Gradle-кэш. Раннеру не хватило памяти: debug собрался, а release отменился.
25. Для тестирования ML Kit временно добавил в манифест атрибут
android:debuggable="true". Коммит попал в репозиторий. Специалисты по безопасности потребовали убрать этот флаг из релизной сборки.26. Загрузил в репозиторий на гитхабе keystore-файл и ключи для подписи релизной сборки, полагая что приватность репозитория гарантирует безопасность.
27. В комментарий к задаче в джире опубликовал фрагмент лога, в котором засветился секретный токен.
28. На одной работе запушил коммит, подписанный корпоративной электронной почтой со второй работы. Теперь не использую
git config --global.29. Сидел на дейли в AirPods. Вышел встретить курьера, который потерял подъезд. Чтобы расслышать его, нажал кнопку на наушнике – не заметив, что тем самым включил микрофон. Обматерил и курьера и всех на созвоне.
30. Конечно же на первой работе я закоммитился сделать таску за два дня, не проверив доступы. Накануне вечером открываю фигму, а там restricted access. Cпас коллега, у которого были права выдавать инвайты.
Список неполный, постоянно пополняется.
Под конец несколько духоподъемных цитат, чтобы снизить чувство бесполезности усилий:
😠 Не ошибается тот, кто ничего не делает.
😚 Важно не никогда не ошибаться, а побеждать чаще, чем ошибаться.
🥃 Единственная настоящая ошибка – та, из которой ты ничего не извлёк.














