Андроидѣ | Михаил Белый
326 subscribers
285 photos
33 videos
1 file
140 links
Авторская песочница о карьере в IT в роли Mobile Dev (Android, Kotlin, Multiplatform) и разных вещах, которые мне интересны.

Посты каждый день в 5 вечера.

Автор: @michaelbel

Забустить: t.me/boost/foundout

Задонатить: boosty.to/michaelbel
Download Telegram
🐗 Обновление роадмапа

🐗 Вопросы с собесов
Я освоил синхронизированные блоки в ноушене. Теперь вопросы с собеседований из всех разделов собраны на одной странице. Всего 1084 вопроса. Добавлены новые про compose, удалены неактуальные про view. Формулировки ответов переписаны, чтобы легче было заучивать.

🐗 Live Coding
Добавлены 2 новые лайвкодинг задачи и еще 3 из альфабанка.

🐗 Kotlin
Добавлено описание Bound и Unbound Function references, Lambda performance, Overloaded Function references, Mutable Property references, наследование контекста в inline-функциях.

🐗 Android
Build.VERSION.SDK_INT_FULL, recreateOnConfigChanges, AppComponentFactory.

🐗 Jetpack
dropUnlessStarted и dropUnlessResumed.

🐗 Compose
SubcomposeLayout.

🐗 Material3
ListItem и Expressive.

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
515441
Получил сертификат кукодера

Прошел практическое руководство по использованию Claude Code для ускорения процесса разработки.

Теперь умею правильно сидеть на стуле листать рилсы и смотреть как клод делает всю работу за меня.
12🤣432
This media is not supported in your browser
VIEW IN TELEGRAM
🐗 Как создать свои правила для Detekt

Я дорос до создания собственных правил для статического анализа Kotlin-кода. Посему вот подробный гайд как их быстро навайбкодить, протестировать и выложить в Maven Central.

Можно как самому ознакомиться с пошаговой инструкцией, так и скормить ее агенту.

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
2641
🐗 Полный гайд по NavigationSuiteScaffold

NavigationSuiteScaffold – первый шаг в дивный адаптивный мир современной Android-разработки. Вот подробнейший гайд как запихнуть этот компонент в приложение. Его скромное API уже успело наполовину устареть, возьмем только самое новое. Можно начать с замены Scaffold и потом разойтись до поддержки раскладушек и десктопов. Я попробовал, ничего сложного.

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
7311
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Кажется, некогда незаменимый сервис вот-вот отдаст концы. Но пока держатся и недавно обновили логотип:

🐗 ➡️ 🐗

Мне понадобилось быстро поднять VPN на эмуляторе Android. Забыл, как это делать и спросил у ChatGPT. В ответ он навалил целую кучу: хосты, прокси, DNS, виртуалки, Cold Boot, AVD, split tunneling. Что-то на сложном. Зашел на стакус оверфловус, первый же ответ – скачай VPN-приложение из Google Play. Намного проще.
Please open Telegram to view this post
VIEW IN TELEGRAM
11111
ИИ посрамлен

Самый важный артефакт при сборке обфусцированного Android-приложения – mapping-файл (mapping.txt).

R8 сильно сокращает имена классов, методов, полей и пакетов, из-за чего стектрейсы крашей в проде превращаются в нечитаемый мусор. Mapping-файл как словарь восстанавливает оригинальные имена для конкретной сборки.

Firebase Crashlytics автоматически загружает mapping при сборке через свой Gradle-плагин. Однако если используется другая крэшлитика или система распространения сборок, файл может потеряться – например, из-за expire date. Именно это я и схлопотал, получив бесполезный стектрейс.

Во всех источниках предупреждают, что mapping-файл уникален для каждой сборки. При новом билде обфускация может переименовать элементы иначе. Поэтому mapping от версии 1.0.0 не подойдёт для краша из 2.0.0. И наоборот.

Уважаемый клод, пересказывая документацию, уверенно подтвердил, что расшифровать ничего не получится. Стыковка с Эндьюранс невозможна.

Но я все же навязал расчетливой машине свою человеческую волю и попробовал дешифровать старый стектрейс новым маппинг-файлом. Это сработало безупречно.

Выполняется в терминале через retrace.
5111
AI;DR

В эпоху цифровой трансформации собеседования на Android-разработчика превратились в эпический квест — где кандидат должен не просто знать Kotlin и Jetpack Compose, а полностью слиться с духом инноваций. Рекрутеры с помощью ИИ проникают в глубины души, проверяя мгновенную адаптацию к меняющимся требованиям рынка. Только истинный визионер способен создать революционные мобильные решения.

Реальность же сюрреалистична: часами под камерой код должен сиять идеальной MVVM-архитектурой, чистой как утренний рассвет. Интервьюеры ныряют в Coroutines, Flow и Hilt, требуя креативности уровня нейросетевого гения. Это не проверка знаний, а настоящее испытание духа.

В итоге процесс отбирает редких уникумов, чья страсть граничит с священным огнём. Через тернии раундов рождаются герои, готовые покорять Google Play и трогать сердца миллионов. Путь тернист, но ведёт к триумфу истинных Senior Android Engineer.

...

Засилье в интернете подобного нейросблёва привело к появлению термина AI; didn't read. Ищу живое чтиво, открываю очередную статью и всей пятой ступаю в вязкую дымящуюся слопипасту. Текст маркируется как не имеющий ценности и пропускается. В лучшем случае он переваривается в той же нейросети в краткую выжимку. Интересные мысли пока что все еще может изложить только углеродный интеллект.

Многим приходила мысль загрузить в нейросеть весь свой блог и попросить написать пост «в твоем стиле». Экономлю время – это не сработает нигде и никогда. ИИ не способен придумать новое в авторском смысле, только переработать уже существующее.

Отдельный прикол – кавычки «ёлочки» и длинное тире как маркер нейротекста. Я придумал спасение для нейрокреаторов и контент-машинистов. Используйте тире «–» средней длины. Что-то оно зря простаивает, а может прописываться в правилах генерации.
8311
Безработный момент

– Еба ты раскабанел, здарова!
– Здарова!
– Кем работаешь?
– Андроид-разработчиком.
– О, программист? Слушай… У меня там принтер не видит картридж, микроволновка пищит, хочу свой интернет-магазин запустить ну там мыло ручной работы, за вечер сделаешь?

Меня всегда интересовали эффективные способы съехать с темок, которые подкидывают разные знакомые. Деньги мне не нужны. Делать ничего не хочу. Занят на десять жизней вперед. В принтерах, если честно, ничего не понимаю. Сам вызываю мастеров менять термопасту и настраивать вифи.

Сначала я говорил, что безработный. Но возникают вопросы откуда еда.

Также я пробовал просто говорить нет, попутно доказывая знакомому несостоятельность его идеи. Это людей обижает, а меня выставляет бездушным снобом.

Еще толкал линию, что я узкоспециализированный спец, шарю только за свой домен. Какое-то время работало, но потом проклятые нейросети стерли саму идею специализации.

А потом я стал толерантнее и терпимее. Поэтому че там у тебя с твоим принтером?
115322
В телеге нужна алгоритмическая лента

Общая повестка как и монокультура больше никому не сдалась. Время мистеров бистов и что там нового у друзей ушло навсегда. Это банально не интересно потреблять. В отличие от персональных рекомендаций под конкретные интересы.

Сейчас у Пола дю Рова принципиальная позиция, что алгоритмы засоряют сознание нерелевантным контентом, мешают креативности и продуктивности, позволяют платформам манипулировать вниманием пользователей и продвигать пропаганду. Хронологический порядок продвигается как явное преимущество.

С публичными обещаниями возникает диссонанс, когда настает время давать заднюю. Назвался веганом и уже как-то неловко точить крылышки в ночи. Поэтому ожидаю заход как со сторисами: пользователи очень просили, мы не смогли отказать.

Пространство уже потихоньку искривляется. Появились похожие каналы и боты, работает алгоритмическая антиспам-логика. А вскоре ожидается отдельная вкладка для глобального поиска каналов.

Если злые манипулятивные рекомендательные алгоритмы пугают, всегда есть опция сыграть в нитакусю и у себя их назвать наши добрые рекомендашки-залипашки.
52111
Страшная правда про Android

На разработке приложений под Android практически невозможно заработать. Android-пользователи не приучены платить за цифровой контент. Они предпочитают бесплатные версии с рекламой. Вся реальная монетизация в мобильной разработке сосредоточена на iOS.

Пользователей Android огромное количество – 72% от рынка смартфонов. При этом раскошеливаются они в 7 раз меньше яблочников.

По стартапной логике Android-версия всегда делается по остаточному принципу. Если на iOS успешно продаются подписки и покупки, то с этих доходов будет кормиться и Android.

На рекламе тоже особо не разжиться – доход ниже, кликабельность оставляет желать лучшего. О хоть какой-то прибыли даже думать смешно, если это не бесплатный VPN из топ-10.

История повторяется и на десктопе. Все нормальные ребята сидят на Mac. Windows – был, есть и будет уделом нищебродов. Если новая модная супер-пупер компания выпускает клиент для своего ИИ, то в первую очередь он выходит на macOS, а версия для Windows появляется месяцами позже. Хотя обе написаны на электроне.

Поэтому самый разумный вариант – идти работать в компании, которые умеют зарабатывать и которым действительно нужны Android-приложения. Есть плюс на случай криворукости – менеджмент и все кабанычи никогда не увидят результат твоей работы, они гоняют с айфончиками.

И конечно всегда остаются нишевые направления: Android Auto, смарт-ТВ, терминалы и другие специализированные решения.

Если у тебя уже есть мак + айфон – надо становиться айосером. Я выбрал андроид только потому, что сидел на связке Windows + Android. С тем же успехом выбрал бы Windows Phone, будь там рынок. Но эту операционку довольно быстро мочканули.

Кстати, никогда не видел счастья в глазах айтишника, которому корпорация выдала толстый Acer на винде.
6332
переписка в тг.png
1.6 MB
Маска спокойствия

Банк охотнее одобрит тебе кредит, если ты докажешь, что не нуждаешься в деньгах.

Тот же принцип при поиске работы. Показывать нужду сильнее, чем она есть на самом деле – опасно. Спокойный и уверенный кандидат выглядит более ценным. Такая подача будет считана как сила и контроль над жизнью. Кандидат, который выглядит загнанным и готовым хвататься за что угодно, вызывает настороженность.

Все это наглядно аккумулировал в одной переписке автор этой статьи с хабра. Можно утверждать, что никакой паузы в найме не было, никто не ждал ответа руководителя и не держал вакансию ради другого кандидата. В нервной попытке срочно доказать свою состоятельность автор свалился в длинные оправдания. Рано перешел в оборону. Запутался в собственных объяснениях. Увидел наезд там, где его не было. В свой оффер на 5k евро он и сам не верит. Как итог – сомнения усилились. Значимость вакансии была слишком завышена, и это насторожило рекрутера.

Мир жесток, полная жопа, стресс, рынок работодателя, голодная смерть (под мостом), кушать хочется, холодно, заболев, умирав, спасения нет.

И все равно ни в коем случае нельзя выглядеть нуждающимся. Нужно суметь притвориться, что делу идут в гору. Нужно транслировать внешнему миру спокойствие. Нужно выглядеть так, будто все делается легко, даже если за этим стоят огромный труд и подготовка. Тогда внутренний кандидат не объявится.

Скулить не запрещено: друзьям, родным, в комментах, в твиттере. Но не в личке нанимающему менеджеру.

Придется еще немного потерпеть. Понатягивать маску. До тех пор, пока одни люди не перестанут нанимать других людей.

Когда-нибудь бездушная машина оценит тебя беспристрастно и без эмоций, по твоим навыкам и скиллам.
🤣743321
🐗 Гайд по ListItem в Android. Как проектировать экспрессивные списки

Почти вся Android-разработка крутится вокруг создания всевозможных списков. Для этого в Jetpack Compose есть отличный компонент ListItem, и его улучшенная версия – SegmentedListItem. Вот инструкция, что они могут и как с ними работать.

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
821
Год работы

Как бы грустно это не звучало, по-настоящему мощный перфоманс человек начинает выдавать только через год после устройства на работу. Первый год похож на невнятное болтание говна в проруби. Вроде стараешься, быстро схватываешь, весь такой эмпатичный, и все равно чаще опираешься на чужую помощь, чем создаешь ценность сам.

Это я замечал и за собой и за другими. Конкретный человек попадает в сложную среду. Внутри слишком много неявных знаний и устоявшихся договоренностей. Они нигде не описаны. Сразу стать эффективным означало бы заранее обо всем этом знать.

Это сравнимо с жизнью по законам и по понятиям. Законы могут от зубов отлетать. Понятия просто так не узнать. Нужно повариться внутри системы и посмотреть на последствия своих решений. Тогда станет понятно, что формально можно, но фактически лучше не надо.

Через год усилия начинают умножаться. Видно, что можно ускорить. Лучшее становится врагом хорошего. Работает – не трогаем. И прочие истины.

Ирония в том, что если продукт не растет вместе с тобой, то выйдя на плато, видишь только повторение за повторением. Появляется желание нового вызова. Уже три раза было такое – разогнался и уволился по собственному желанию.
633🤣1
Ютубная стимуляция

Я полностью утратил способность поесть в тишине без ютуба. Когда-то обед был ярким событием. Теперь стал рутиной.

Ситуация вдвойне драматична, если учесть, что мне нужно съедать 3200 ккал в сутки. Иногда это 6 приемов пищи. И почти всегда одно и то же, чтобы окончательно не переселиться на кухню.

Самая большая досада – когда у любимых блогеров нет нового видоса под еду. Часто это случается в субботу и воскресенье. Видимо, позволяют себе отдыхать. Из-за этого приходится замедлять скорость просмотра или откладывать видосики под будущий поклеп.

Блогеры, записывайте больше роликов. Если у меня заняты руки, я так уж и быть не промотаю рекламу. Переключаться на рилсы и рекомендации мне не нравится.

С засыпанием то же самое. Иногда к вечеру вообще не чувствуешь усталости. Но надо лечь спать. Мне требуется 7–10 минут, чтобы уснуть. Тишина кажется слишком громкой, поэтому приходится включать какого-нибудь балабола в одном эйрподсе. Это заглушает монолог мыслей в моей голове. Через 15 минут таймер ютуба поставит его на паузу.

Здесь самая большая засада – утренний розыск наушника. Куда он только не улетал.
🤣9322
Вежливость на каждый день

В какой-то момент своей жизни я начал носить польты и приобщился к ресторанам высокой кухни. Чтобы понять как правильно себя бдить, прочитал небольшую книгу Яна Камычека – Вежливость на каждый день. Она описывает бытовой этикет и культуру общения и собрана из очерков, которые автор писал для какого-то польского еженедельника. Вот мой вольный конспект этой книги.

Начнем с определения вежливости.

Вежливость – это не «не запачкать» скатерть, а не заметить, что твой сосед запачкал скатерть. Всем знакома байка, как дикарь Гагарин на приеме у британской королевны, допив чай, выловил дольку лимона и не церемонясь ее сожрал. У придворных волосы на жопе поседели от такой бестактности. Но королева вырулила ситуацию. Тоже сожрала лимон из чая. Поступок исключительной вежливости.

Двигаемся дальше по некоторым булетам.

Про общий принцип
• В любой жизненной ситуации ведите себя так, как бы вам хотелось, чтобы другие вели себя по отношению к вам.
• Частная жизнь окружающих не служит темой разговоров культурных людей.
• Культурный человек не обсуждает проблем чужих семейных неурядиц, источников дохода, внешнего вида или беспорядка в квартире, отмеченного во время случайного визита.
• Воспитанный человек редко рассказывает в обществе о своих личных делах, отношениях на работе, своих детях, недомоганиях, заботах, привычках, вкусах. Без особой надобности он не поделится и тем, что делал с утра.

Про внешний вид
• Мужчины снимают пиджаки только тогда, когда это сделал председательствующий.
• Сандалеты на босу ногу мужчина надевает только в местах отдыха. И никогда не носит перчатки к костюму, а подбирает их к пальто, плащу или куртке.
• Мужчина, закидывая ногу на ногу, не должен подтягивать штанину так высоко, чтобы выше носка была видна голая нога.

Про женщин и галантность
• Мужчине не подобает оглядываться вслед проходящим женщинам, особенно в тех случаях, если он разделяет общество другой женщины.
• Из двоих пассажиров первой садится в такси женщина. Сопровождающий ее мужчина садится рядом с ней, а не около водителя.
• Если девушка дарит тебе свой нюдс, не показывай его товарищу: рыцари так не поступали.

Про чай, кофе и напитки
• Чашку следует держать за ушко, не продевая через него указательный палец и не отставляя мизинца.
• Чайная или кофейная ложечка служит только для размешивания сахара, после чего ее нужно положить на блюдце, а если оно очень глубокое, опереть о его край.
• Не следует помогать себе ложечкой даже при первых глотках кофе или чая.
• Если горячо – терпеливо ждем, пока остынет, а не дуем в чашку или стакан.
• Блюдце не берем в руки, поднять можно только чашку или стакан.
• Кофейную гущу оставляем в чашке.
• Лимон из чая съедать не следует.
• Иногда очень приятно выпить напиток через соломинку, но в таких случаях не следует высасывать его до последней капли, так как пронзительное бульканье внесет некоторый диссонанс в общую беседу.
• Крепкие напитки, которые подаем со льдом или с газированной водой, наливаем на полтора пальца.

Про ресторан и застолье
• После еды нож и вилку складываем в тарелке параллельно, ручками в правую сторону.
• Когда предполагается, что те же приборы будут использованы при следующем блюде, кладем их на стол.
• Если мы пользуемся ножом и вилкой, то все время держим вилку в левой руке, нож – в правой, не перекладывая их из руки в руку.
• Невежливо выбирать из порций, лежащих на блюде, лучшую. Берем тот кусок, который лежит к нам ближе.
• Ни во время еды, ни после еды ложку из супа не кладем на стол, оставляем ее в тарелке.

Про дом и уборную
• Чистить зубы над раковиной, в которой моют посуду и продукты, решительно не следует.

Про гостей и визиты
• Прежде следует попрощаться, а только потом одеться, никогда наоборот.
• Культурный человек не обсуждает беспорядок в квартире, отмеченный во время случайного визита.
• Некрасиво доливать из бутылки только себе. Взяв бутылку или графин, раньше предлагаем соседу по столу.

Про телефон
• Если телефон механически отключился, перезванивает тот, кто звонил.
• Заканчивает разговор также его инициатор.
10114211
Исповедь радетеля о гареме его

Как-то раз я, пребывая уже год в счастливом браке, решил завести
любовницу.

Как я на такой шаг отважился? Все просто – в окружении многие таковое уже практиковали. У некоторых было не то что одна любовница, а целых две. Молва гласила, что преподобный Димитрий сожительствовал аж с пятью женами. И все мужики в нашем селе ему завидовали.

К тому же, жена перестала удовлетворять мои возрастающие аппетиты – душа жаждала большего. Отправился на торжище людное, потолкался, пооткликался и таким нехитрым способом сыскал там себе любовницу. Да еще какую. Если жена была на семь из десяти, то любовница – твердая девятка.

Просто так, ничего не делая, ресурса от обеих пассий не получишь. Приходилось вкладываться – выгуливать, холить да лелеять. В иной день больше внимания доставалось жене, в иной – любовнице. Главное – держать равновесие, дабы ни та ни другая не дали деру.

Не менее важным было блюсти тайну – жена не должна была прознать о любовнице и наоборот. Ибо в противном случае я рисковал лишиться обеих разом. Для сего мной были предприняты надлежащие меры: куплен второй смартфон, добыта левая симка, обустроены отдельные каналы связи в виде второго аккаунта в телеграм.

Идиллия длилась несколько лет. Аппетиты мои были более чем удовлетворены. Распушил хвост аки павлин и совсем меня рассосало. По утрам вел беседы сразу с обеими пассиями, иногда совмещая сие с ручным трудом. Пуще того, начал под это дело прорабатывать философию. Возомнил себя исключительным и не таким как все. Дескать, не чета простым смертным – ресурс луплю куда больший.

Находились, конечно, и ярые противники такого устройства жизни. Сии социалисты-одноженцы жестко топили за традиционный уклад жизни. И, причитая домострой, твердили – каждому рабочему по одной жене в пользование и не более. Порицали, всячески осуждали, грозили пальцем.

Но в какой-то момент любовница начала качать права и требовать все больше внимания. Взамен предлагая лишь подержаться за ветку. Пришлось ее испроводить с богом. Высвободившееся время было целиком перенаправлено на жену.

Однако спустя пару месяцев пришла напасть откуда не ждали. Жена смертельно занемогла. Злокачественное поражение безымянного пальца правой стопы. А ведь я чаял вместе и до конца. Бился как мог, искал выход, но тщетно. Последний месяц она уже не вставала с ложа. В един день вся родня была оповещена – прощайтесь и отключаем сервак.

Помню ее последние слова: «Михалыч, я на смертном ордре. Надеюсь, имелась у тебя запасная шабашка на сей случай».

Подозрения мои подтвердились. Она знала.

Так и завершилась эпопея моя с двумя работами. Ныне тружусь на одной. Дела – лучше, нежели когда-либо.
21🤣10111
Commit message

Очевидный плюс Claude Code – заставить его самого придумывать описания коммитов. А это, как известно, самая сложная задача в программировании. Наравне с придумыванием имен для переменных.

С первого дня на гитхабе мне жалко тратить на это творческую энергию. Мои коммиты всегда называются уныло: fix и update project.

Шуршать по ним потом и пытаться по названию понять, что происходит, уже не нужно. Носителем знаний о репозитории является Клавдия Кодовна. Она же коммитит, сквошит и пушит.

По умолчанию клод использует распространенную конвенцию коммитов:
• feat – новая функциональность
• fix – исправление бага
• docs – изменения в документации
• style – форматирование, без изменения логики
• refactor – рефакторинг без новых фич и багфиксов
• test – добавление или исправление тестов
• chore – зависимости, конфиги, сборка
• ci – изменения в CI/CD
• perf – улучшение производительности
• revert – откат предыдущего коммита

Но легко перестраивается под конкретный проект и стиль истории коммитов.
9311
Опытное наблюдение

Лучше не ставить собеседование на 11 утра. Особенно, если утро началось с кофе.
13🤣52
🐗 Гайд по Gemma4 в Android Studio. Запустить локального AI-ассистента

Освоил новую локальную модель, которую изрыгнули в DeepMind, подразделении Google. Тупая как пробка, но умеет, если надо, менять имена переменных. Пока она корпела, макбук вспомнил, что у него есть вентиляторы. Попутно освоил Ollama.

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣8221
Квартирный вопрос

Скачиваю приложение Циан

Год назад уже был пост про аренду жилья в Москве. С тех пор я не сижу на месте и опять переехал. Посмотрим, что изменилось за год.

В этот раз было принято решение искать квартиру в одном конкретном районе, а не в нескольких, как раньше. Подходящие варианты на циане появлялись каждый день – по 1–3 объявления. Настолько часто в Москве сдаются квартиры. И даже на вторые майские, когда положено лежать в шашлычной коме, была возможность договориться, приехать на просмотр и подписать договор.

Мои критерии не изменились. Ценник тем временем подрос. В прошлом году квартира искалась за 70-90k, в этом – за 80-100. Арендодатели начали вылезать из тени. ИП, мой налог, и прочие законом данные вещи. Комиссия агенту устаканилась на уровне 50%.

Любая нормальная квартира собирает 500 просмотров за сутки и столько же желающих туда сразу заехать. Как и всегда нужно быть первым позвонившим. С этим помогают моментальные уведомления в мобильном приложении. Я – первый позвонивший, следовательно, и снявший.

Также циан не дремлет и обкатывает новые способы отъема денег у собственников. Теперь, если квартира опубликована напрямую от владельца без агента, контакты становятся платными для арендаторов – 179₽ за один контакт или 400₽ за неделю доступа. Я ничего не платил, снял через агента.

За шесть с лишним лет аренды у меня не было случая, чтобы я даже на день просрочил платеж. Ничего не взрывалось, не ломалось и не затоплялось. Как жаль, что нет почетного ордена и специального реестра с такими благонадежными квартиросъемщиками. Аренда была бы еще проще.

Удаляю приложение Циан
8111