Виктор Лапин

Виктор Лапин

Неделя
Dec 28, 2020 → Jan 3, 2021
Темы

Архив недели

Понедельник


Всем привет! Меня зовут Виктор (можно просто Витя, все свои), я по мере сил и навыков рулю мобильной разработкой в компании Адвантум. Компания небольшая, занимаемся по большей части продуктовой разработкой. Постараюсь не сильно грузить в новогоднюю неделю.

Примерное расписание тем на неделю: Пн: разработка приложений Вт-Ср: железо, разработка прошивок Чт: безопасность Пт: общение Сб: Chrome OS Вс: что останется Если вдруг жизнь внесет коррективы, сделаю тут тред с изменениями

@mobileunderhood а можно спойлер и что будет про хромос?
Пока что планирую поделиться впечатлениями от самой оси после двух лет использования, со стороны обычного юзера и со стороны разработчика twitter.com/pingwinator/st…

@mobileunderhood а сравнение с dex будет?
Dex ни разу руками не щупал, сравнить не получится... twitter.com/pingwinator/st…

Но можно попробовать сравнить в режиме диалога, если у кого-нибудь есть опыт работы с Dex

Ну что, лопаты и вентиляторы готовы, начинаем набрасывать 🙂 Как вы обычно действуете при виде новой красивой и модной-молодежной библиотеки под ваш стек?

@mobileunderhood Sample проекты для тестирования на бенче никто не запрещал)
Разумеется 🙂 twitter.com/anioutkajarkov…

@mobileunderhood Не важна версия, важно то, решает ли это что-то новое проблему лучше, чем уже используемые вещи -> нужна проблема из вашего мира, на которой это можно проверить
А если проблемы нет, ее надо выдумать и решить. Без всякого сарказма, так рождаются pet проекты twitter.com/ruggerprogramm…

@ruggerprogrammr @mobileunderhood А вот и нет, не все так просто. Вот есть корутины и рх. Многие проблемы рх решает лучше, но все равно придётся тащить корутины, потому что легче захантить модных смузихлебов, которым нужен хайповый стек) И ты себе представить не можешь НАСКОЛЬКО таких много.
Кстати забавно, что я постепенно прихожу к противоположному мнению - типовые задачи мобильного разработчика лучше/проще/быстрее вывозят корутины twitter.com/Andrey__Danilo…

А вообще, определение стека под конкретный проект считаю одной из своих обязанностей как лида

@mobileunderhood @ruggerprogrammr @Andrey__Danilov Для бизнеса ВСЁ сплошные затраты, кроме чистой прибыли
Это надо отлить в бронзе и повесить у входа в офис, я считаю 😀 twitter.com/lightdelay/sta…

@mobileunderhood @lightdelay @Andrey__Danilov В смысле без видимой пользы? Возможность нанимать из большего пула, уменьшать bus factor из-за древних технологий (в другую сторону тоже возможе перекос), привлекательность для кандитатов - это то, что можно объяснить без технических терминов
Ну смотрите, это суть есть масштабный рефакторинг. Он требует людских и временнЫх ресурсов. Людям понадобится перевести в конце месяца оклад на карточку. А с точки зрения новых фич не поменялось вообще ничего, приложение будет работать точно так же. Сплошной убыток. twitter.com/ruggerprogramm…

Кандидатами хорошо обосновывать, когда ваша компания долго и со скрипом ищет новых разработчиков и не может никого нанять из-за стека. А если есть условная команда, умеющая в Rx (продолжая аналогию), ее еще и переучивать придется, КПД упадет. Опять убыток 🙂

@mobileunderhood А как стек определяете? Просто по ощущению, в андройде есть по два стула на каждый пункт(rx-корутины, коин-даггер, etc) и каждый пункт это больше дело вкуса, чем сравнение технологий.
Спасибо, что упомянули Koin 🙂 всей душой к нему прикипел twitter.com/DKolponosov/st…

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

На тему Dagger/Koin есть пример из жизни. Одно из наших приложений в debug варианте позволяет выбрать хост, с которым будет общаться. Есть dev площадка, test и prod

И вот тут как раз идельно зашел койн, потому что он а) работает в runtime; и б) работает отложенно (lazy init). Мы можем сначала выбрать нужный хост, а потом поднять ретрофит уже с правильным base url

Использование в подобном кейсе даггера, на мой взгляд, сильно переусложняет модель

Ну что, лопаты и вентиляторы готовы, начинаем набрасывать 🙂 Как вы обычно действуете при виде новой красивой и модной-молодежной библиотеки под ваш стек?
Подводим итоги опроса - победили "умеренные" 🙂 Распишу свою логику знакомства с новыми библиотеками и фреймворками twitter.com/mobileunderhoo…

Если я сам нахожу какую-то полезную библиотеку, или мне показывает ее кто-то из коллег, первым делом надо внимательно изучить доки. Цель данного этапа - внятно ответить на вопрос "зачем?"

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

А вот уже после этого, если библиотека действительно сильно упрощает жизнь, можно попробовать запустить ее в прод

Но если версия библиотеки ниже 1, то нужно сразу закладывать будущие изменения api

А вообще говоря, очень здорово, когда есть большой выбор и можно похоливарить про "Rx vs Корутины" и тому подобное. Завтра поговорим про железо, поделюсь болью 🙂

Вторник


Ну что, про железо... Платформенная разработка - это вообще другой мир

У нас в Адвантуме сейчас есть один такой проект, пилим его уже чуть больше года, так что впечатлений много

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

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

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

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

Кто-то возможно помнит, я несколько лет назад на митапчике в Мэйле громко поинтересовался, а можно ли собирать приложения на котлине вместе с прошивкой 😁 так вот - можно, причем в 10+ вроде как есть даже нативная поддержка. У нас тут андроид 9, поэтому пришлось пошаманить

Если кому интересно/актуально про сборку котлин приложений - маякните, разверну мысль 🙂

Проблема номер один при платформенной разработке - информацию буквально приходится искать по крупицам. Если вы занимаетесь железом, и у вас что-то не работает, поздравляю, you're on your own

У Гугла есть базовая документация по сборке AOSP, которая чаще всего бесполезна за пределами т.н. happy path. Приходится долго выискивать блоги и статьи, где такие же энтузиасты работали с чем-то похожим. Статьи эти могут быть датированы даже 2009 годом, приходится адаптировать

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

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

И тут не могу не поблагодарить команду SlimRoms. Сам проект уже года 3 как мертв, но ребята до сих пор на связи и всегда готовы подсказать. И вообще, опыт, полученный в той команде, очень многое мне добавил в профессиональном плане

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

Помучавшись немного сам, я попросил помощи у одного из разработчиков CandyRoms, и оказалось, что виноват сборщик 🙂 Одна небольшая правка - все заработало. Но без посторонней помощи я бы разбирался очень долго

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

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

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

Китайцы честно прислали пример работы с gpio. Для 7-го андроида. У нас, напомню, 9-й

Я вот думаю, что на этом твите @ftsymbal начал широко улыбаться 😀

В общем пришлось писать самому, подгоняя решение под ответ

Третья проблема платформенной разработки - это особенности логики работы конкретного девайса. Например, мы делаем видеорегистратор. У него нет экрана

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

В общем, платформенная разработка резко повышает уровень креативина в крови 🙂

Я кстати очень удивился, когда увидел Dagger в нескольких приложениях AOSP, например, звонилке

Еще есть забавный пример из жизни, про "исходники платформы надо трогать по минимуму". Хотя я при этом прекрасно понимал, что и зачем я делаю 🙂

Поскольку прошивка общего назначения, то там разумеется из коробки было множество приложений, которые в конечном варианте не нужны совершенно: звонилка, музыкальный проигрыватель, еще что-то от Qualcomm, какие-то сервисы China Telecom, вот это все

Из всех возможных вариантов "разгрузить" прошивку, я выбрал самый анекдотичный 😀 Я добавил минимальный репозиторий, по сути из одного манифеста и мэйкфайла, и ему в LOCAL_OVERRIDES_PACKAGES дописал все ненужные приложения

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

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

Среда


А знаете что, в топку серьезные темы 31 декабря 😄 лучше про какой-нибудь work-life balance поговорим

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

Оболочка какого вендора доставляла вам больше всего проблем при разработке?

Оболочка какого вендора доставляла вам больше всего проблем при разработке?
Судя по всему, победил Apple 😅 twitter.com/mobileunderhoo…

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

Искренне не понимаю каким образом, но она умудряется ломать даже PackageInstaller

Т.е. пока "оптимизация" MIUI включена, нельзя программно инициировать установку приложения. Если отключить, все прекрасно работает

А самое плохое решение по якобы "оптимизации" оболочек - это выкинуть все системные логи уровнем ниже info. Это победа с большим отрывом

Разработчики кастомных прошивок тоже бывало этим грешили, но им простить можно - они от незнания. Нашли классный коммит, в котором написано "ускорение системы", сделали cherry-pick, попробовали - а вроде и правда быстрее

Прошу прощения, у нас тут в самом разгаре мероприятие под названием "а давайте еще вот эту фичу сделаем до НГ". Временно не очень активен

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

И вот тут стало совершенно очевидно, что дни кастомов сочтены окончательно. Их просто нет. Кто-то еще по старой привычке что-то пытается собирать под Пиксели

Возможно где-то еще жив LineageOS, но даже у него список поддерживаемых телефонов просел в разы по сравнению с днями расцвета

Во-первых, оно стало не очень-то и надо. Андроид все-таки растет и становится лучше. Уже не требуется поверх накручивать 85 разных фишечек для облегчения использования

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

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

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

Все остальное было легкой иронией 🙂

Четверг


Доброе утро! Сегодня будет полдня тезисов, которые можно прочитать в любой книжке по управлению временем 😀 Поделюсь своими привычками, которые помогают не выгорать. На истину в последней инстанции, разумеется, не претендую

Для начала, особенно на удаленной работе, очень важен четкий график. Для этого у меня на умных колонках выставлено 4 будильника на рабочие дни: подъем, начало рабочего дня, обед, окончание рабочего дня

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

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

Еще очень помогает иметь хобби. Я сейчас не говорю про совсем очевидные вещи, семью, друзей и т.д. Должно быть какое-то занятие, которое помогает отвлечься

У меня таких занятий несколько, я их чередую в произвольном порядке. Люблю читать зарубежную фантастику (сейчас в процессе чтения "Дюны", например), люблю иногда поиграть, но исключительно на компе и против искусственного интеллекта

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

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

У меня есть еще одно хобби, которое может показаться странным - я разрабатываю тактическую пошаговую игру на Unity. Что важно, для десктопа 🙂

То есть еще раз, иногда вечером я закрываю Android Studio, открываю Unity и VS Code, и мои мозги от этого начинают отдыхать

Хотя казалось бы, те же яйца, только в профиль 🙂

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

Дает мощный заряд оптимизма, возвращает веру в человечество и вот это вот все 😀

Приходит осознание, что наверное не все я делаю неправильно

Есть еще одна сторона медали - бывают моменты в работе, когда "прям прет, все получается, щас я им всем покажу". И тогда человек начинает пахать, не обращая внимание на время, сон, еду и т.д.

Да, вы всем щас покажете. Но ценой последующего спада, который при таком подходе неминуем. Если можно договориться именно на такой график, и всех все устраивает - пожалуйста, ваше право

Я все равно стараюсь соблюдать график, потому что на дистанции полезнее держать плюс-минус один и тот же уровень, чем работать всплесками

Еще бывают сезонные спады. У меня они, к счастью, прогнозируемые - вторую половину апреля и вторую половину октября с точки зрения продуктивности я овощ 😄

В эти периоды всегда стараюсь брать по неделе отпуска, причем оповещаю об этом заранее, чтобы лучше планировать мобильную разработку

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

То есть средний уровень по больнице мы держим, просто конкретно мой вклад как разработчика в такие периоды сильно ниже 🙂

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

А теперь я временно поотсутствую, т.к. салатики ждут 🙂

Ну что, с наступающим Новым годом, уважаемые коллеги 🙂 Всем здоровья, в первую и в главную очередь

Мне лично очень не хватает оффлайна. Очень хотелось бы его возвращения в следующем году. Да, я оптимист, но когда еще загадывать желания, как не сейчас? 🙂

Пятница


Ну что, все живы? 🙂

А помните времена, когда поздравляли друг друга смсками в районе полуночи, и сотовые операторы не успевали обработать такое количество сообщений? 😅

За это 1 января я уже провел больше времени в видео звонках, чем за весь декабрь 😅

Я смотрю, времена смс прям затрагивают струны души 😁

Суббота


Всем привет! Сегодня выскажусь про опыт общения с Chrome OS. Как так вышло, для чего пригодилось/не пригодилось, есть ли польза разработчику

В конце 2018-го (были же времена) у меня появилась перспектива поездки в Польшу на заработки. А поскольку ноута у меня на тот момент не было, пришлось срочно озаботиться этим вопросом

 
Как минимум, нужно было с чего-то показывать слайды + немного лайв кодинга. Выбор на тот момент был следующий: брать знакомую вдоль и поперек Win10, или поэкспериментировать. Макбук не рассматривался по идейным соображениям

Тяга к экспериментам перевесила, и так я стал гордым владельцем Google Pixelbook топовой конфигурации

С тех пор прошло два года, пиксельбук до сих пор является верным и надежным travel companion

Так что умеет хромось? Во-первых, разумеется, это браузер хром. Веб-приложения можно "устанавливать" локально, ярлыки для пользователя ничем не отличаются от любых других приложений. Можно открывать в отдельном окне для ощущения "нативности"

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

Синхронизация через учетку, само собой, на месте, как на ПК или телефонах. Включая установленные расширения. Это приятно

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

Как раз в начале 2019-го появился баг: включенная андроид подсистема отъедала строго 100% процессора. Пришлось временно выключить до отмашки, что все починили

В-третьих, в хромось постепенно добавили еще и специально тюнингованный Debian. Он тоже с претензией на нативность, но тут уже видны шероховатости

Как минимум, линукс подсистема долго стартует. Ткнул в терминал - и ждешь пока оно там заведется. В последних версиях хотя бы добавили индикатор прогресса

На выходе получается, что Chrome OS - этакий "jack of all trades". Умеет все, но ни в чем не блещет

Кстати, есть умельцы, которые заменяют на своих устройствах Debian на Arch. Я даже где-то методичку видел, что для этого нужно делать

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

Вариант №1: Android Studio. Да-да, на оф. сайте есть даже специальный пакет для хромоси, хотя по факту это обычный .deb. Устанавливается и работает нормально, только крайне желательно включить power save mode

Что гарантированно не заводится на хромоси - эмулятор, его можно даже не ставить. Достаточно долгое время это выглядело странно - мы можем писать код, но как его запускать и отлаживать, было решительно неясно

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

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

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

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

Вариант №2: VS Code. Ставится и работает опять же нормально, за то недолгое время, что я тестировал, багов не замечено. VS Codium тоже чувствует себя хорошо, если вдруг этот вариант вам ближе

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

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

По этой же причине в режиме планшета пиксельбук как минимум бесполезен - работать невозможно, система начинает себя вести медленно и не особо стабильно

И по этой же причине не надо даже задумываться о приобретении Pixel Slate, это кажется самый неудачный девайс из хромбуков

Линукс подсистема в хромоси не имеет адекватной поддержки аппаратного ускорения графики, поэтому для любых более-менее связанных с ней задач - не подходит

Побочный недостаток - встроенная шкурка Дебиана достаточно сильно тюнингована, поэтому некоторые линукс приложения могут отображаться некорректно. Как пример, SmartGit

Для тех, кто интересуется хромосью, не могу не порекомендовать одного из авторов Android Police, Кента Дюка. Парень делает шикарные обзоры значимых изменений в новых версиях оси, а также отдельно обзоры самых интересных/полезных флагов

На реддите его тоже можно найти, ник кажется kentexcitebot. Не реклама 🙂

Ссылки