DroDev | Мобильная разработка: мысли вслух
460 subscribers
104 photos
229 links
Обсуждаю и рассказываю как сделать жизнь разработчика в команде интересной, легкой и продуктивной.

По всем вопросам @dilix90
Download Telegram
#Mobius Piter 2020 по понятным причинам переезжает в онлайн.
Даты 22-25 Июня.

Было 2 дня, стало 4. Зависать в онлайне перед компом на протяжении долго времени тяжело, по-этому растянули конференцию на 4 дня.

Цена стала в 2 раза ниже, а именно 12 т.р. за участие.

Что неизменно - так это концентрация сильных докладов про мобильную разработку! https://bit.ly/3dmNBAq
Проект LifeViewer ищет разработчика для создания #Android версии приложения с нуля.

#iOS версия LifeViewer app:
https://apps.apple.com/ru/app/lifeviewer-productive-day/id1482922018 📲

Зарплатная вилка: 100'000 - 200'000 руб. на руки + опцион 💰

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

По всем вопросам 📝
- в телеграм (@Victor_Khodalov)
- на почту: victor@friendstech.co.uk

#Вакансия имхо интересная.
4,8 из 5 в #AppStore много стоит.
Наличие iOS версии - говорит о том, что ТЗ уже прям совсем готово 🚀
Последнее время пользуюсь #Android Studio из stable ветки и давно не заглядывал в canary... а зря....

В Android Studio 4+ завезли несколько интересных фич:

👉 Навигация по #Dagger коду.
Интересная фича, позволяет переходить непосредственно к Provided методам например, т.е. упрощает дебаг не самых очевидных связей.

👉 Как всегда заявлено улучшение скорости сборки и возможностей hot reload.

👉 Build Speed Window
Показывает слабые места вашей сборки. Удобно, особенно если у вас есть кастомные шаги сборки внутри.

👉 Live #Layout Inspector
Сам Inspector - очень полезная вещь, когда надо проверить верстку на реальном устройстве. Но раньше было необходимо получить snapshot, который можно исследовать. Теперь же можно смотреть верстку в режиме реального времени.

Это, по крайне мере для меня, выглядят прямо удобно. Но также внутри есть еще ряд интересны изменений, такие как Database Inspector, Native Memory Profiler, Эмулятор внутри студии и другие. Полный список как всегда доступен на офф. сайте.

А какой версией студии вы сами обычно пользуетесь? Stable или Canary? https://bit.ly/3c0bb4H
Android Studio из какой ветки вы обычно используете?
Anonymous Poll
86%
Stable
14%
Canary
Новая интересная #вакансия по #Android

Вилка ЗП: 1 300 - 2 000 $ на руки
Удаленная работа, полная занятость.

Неплохое комбо для РФ.

Нужен Android Developer на #Kotlin, чтобы разработать новое приложение для 1.2 миллиарда жителей Африки.

Обязанности, требования и что ждут от кандидата в целом как и у всех вакансий.

О компании:
Mojo - это команда разработчиков на рынке финтех услуг. Создают продукты для российских и международных компаний. Команда полного цикла, быстрые процессы, каждому небезразлично то, что мы делаем.

https://mojo.finance/

Все вопросы и отклики на вакансию присылать в Телеграм @iznak
Разработчику важно постоянно развиваться и быть в курсе последних технологий.
Это позволяет эффективнее решать задачи, расти по карьере и быть востребованным специалистом.

На канале @android_school_ru каждую неделю автор публикует собственные практические мини-курсы на 1-2 часа, помогающие освоить фишки #Android.
Все курсы бесплатные и разделены по категориям. Вы всегда можете найти новый для вас материал, хотя бы потому что знать всё и всегда - не получится 😉

Каждый мини-курс нацелен на отработку конкретного навыка, например работа с #Room, #AlarmManager или #RxJava.
Результат каждого курса - рабочее приложение 📲

Из последнего:

👉 Чем отличается Dependency injection от Service Locator ?
👉 Тестируем миграции версий базы данных в Room
👉 Разработка приложения Фитнес-календарь на базе AlarmManager

Автор канала Михаил.
Он имеет большой опыт разработки и ранее работал в Rambler, Alibaba Group, а сейчас разрабатывает приложение с аудиторией 10+ млн. пользователей.
А еще автор является преподавателем онлайн-курсов в Нетологии и Отус.

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

Это все здорово и наверное правильно, но что точно стоит помнить (по моему опыту), делая свои проекты:


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

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

👉 Вы должны быть вашим же первым пользователем. Особенно в "пет" проекте. Делать приложения для веганов, когда вы едите мясо даже на десерт - так себе история.

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


Подведем итог на позитивной ноте. Заниматься личными проектами, учавствовать в opensource разработках и тд - хороший способ прокачать навыки и попробовать что-то новое. Но ожидания завышать не стоит, чтобы потом не разочароваться. https://bit.ly/3ei97H9
#Google вплотную взялся за задачу «сделать жизнь #Android разработчиков проще».

Пару недель назад выкатили видео, в котором рассказали что нового и реально интересного есть в #Jetpack - наборе инструментов для андроид разработчика.

Из самого для меня интересного:

👉 #Hilt. Рекомендованная библиотека для Dependency Injection. Она построена на #Dagger, но реализует то, что обычно приходилось делать костылями. Теперь есть простой и понятный способ инжекстится в Android Framework и Jetpack library классы.
👉 Paging 3. Переписанная Paging 2 на корутинах. Вообще, попробовав раз корутины и поняв их идеологию, возвращаться к RX для простой многопоточность уже не захочется.
👉 Navigation с Dynamic feature. Сам навигационный компонент всё никак не доходят руки нормально попробовать, но выглядит интересно. Теоретически можно строить навигацию, предполагая что все экраны в наличии, а по факту динамически подгружать фичи по мере использования. Модулярность в действии.
👉 Упрощение Request #Permission. Наконец. Теперь в понятном виде, легко и непринужденно можно запрашивать Runtime Permissions. Раньше использовал RxPermissions, которые делали жизнь проще, но сейчас вообще шик.
👉 Autofill IME. Клавиатура вообще всегда была больным местом. Кстати, в андроиде, начиная с 11 с помощью WindowInsets появилась возможность (наконец!) синхронизировать контент приложения с клавиатурой. А тут еще подвезли интересный API, который позволяет отображать inline suggest в подсказках к клавиатуре.

В общем, кажется жизнь андроид разработчика налаживается 😉 https://bit.ly/3drdezJ
Недавно с коллегой обсуждали отличия юнит и функциональных тестов.
Как результат - появилась статья, в которой зафиксировал основные мысли и примеры.

Основные мысли:

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

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

А вы пишите тесты к вашему коду 🙈? https://bit.ly/3ghOIm8
Пишите ли вы тесты при разработке?
Anonymous Poll
38%
Да
62%
Нет
И #Kotlin #Coroutines и Architecture component - практически must have в сегодняшнем Android приложении.

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

👉 Часть 1: https://medium.com/androiddevelopers/livedata-with-coroutines-and-flow-part-i-reactive-uis-b20f676d25d7
👉 Часть 2: https://medium.com/androiddevelopers/livedata-with-coroutines-and-flow-part-ii-launching-coroutines-with-architecture-components-337909f37ae7
👉 Часть 3: https://medium.com/androiddevelopers/livedata-with-coroutines-and-flow-part-iii-livedata-and-coroutines-patterns-592485a4a85a

Как-то раньше я совсем не использовал Котлиновские #Flow, пора это исправить. Хороший повод выпилить RX из текущего проекта на корню 🙈
ДомКлик - проект при поддержке Сбербанка в сфере недвижимости ищет Android разработчика.

Почему я это читаю 🙈?
Месячная посещаемость 9.5млн по Similarweb, 4.6🌟 в маркете намекает, что у команды, стоящей за проектом есть о чем поучиться. Это именно продуктовая технологическая компания.

А еще у них есть блог на Хабре.
https://habr.com/ru/company/domclick/

Город: Москва, м.Кутузовская
Формат: офис, гибкий график
Занятость: полная
ЗП: от 150.000 до 300.000

Обазанности как обычно. Разработка приложений, поддержка, code review и вот это всё.

Требования тоже стандартные. Опыт от 1.5 лет. Понимание что такое Android 📱

Плюшки:

•  ДМС со стоматологией, льготная ипотека для сотрудников
•  Пин-понг, плойка, массажные кресла, кикер, библиотека, кофемашины на этажах, бесплатный спорт зал и подземный паркинг.
•  Отличный корпоративный университет, программы обучения в т.ч. за рубежом, конференции, митапы.
•  Все железо, необходимое для работы.
•  Гибкое начало рабочего дня и возможность работать удаленно.

https://team.domclick.ru/

Писать в телегу 24/7 @vamelan
Частенько в чате и группе спрашивают "у меня приложения падает, что делать"... Причем именно в таком формате и без пояснения что крешится, где. Про StackTrace говорить не приходится.

Этот факт побудил написать мини статью о том, что такое логирование, как использовать #logcat и вообще как помочь себе писать качественные Android приложения без боли и страданий. https://bit.ly/2Cxfc52
Техническая #конференция для команд мобильной разработки #Mobius 2020 уже 11–14 ноября, Online.

4 дня, несколько треков, более 30 технических докладов без воды о работе платформ (#iOS/#Android) и языков программирования (#Java/#Kotlin/#Swift) под капотом, инфраструктуре, трендах в мобильной разработке, спикеры с мировыми именами, воркшопы и Q&A-сессии.

Подробная программа появится на сайте конференции, там же можно приобрести билеты: https://bit.ly/30W66XK

Кроме билетов на Mobius действует единый билет на все осенние конференции JUG Ru Group: https://bit.ly/3hOrB3x
#Firebase от #Google, о котором ранее писал в том числе в блоге содержит прямо пул полезных инструментов для мобильного разработчика. От хостинга до аналитики с искусственным интеллектом и ML Kit. Сейчас хотел бы поговорить отдельно про Database функционал.

Fierbase Databse - по сути NoSql база в облаке. Довольно быстро настраивается, описываются правила доступа и можно работать. Все в целом неплохо… пока речь идет только о хранении данных одного пользователя. Так сказать такой облачный кэш для вашего приложения.

У нас начались с ним проблемы, когда захотели написать бэкофис под БД. Т.е. такую небольшую субдоминанта поверх, чтобы было удобно вести сервис. Так как это NoSql база, то в целом она плохо рассчитана на сильно связанные данные и таблицы, чтобы сделать простые отчеты через несколько таблиц пришлось повозиться. Но на этом самое веселое только началось.

Бесплатный режим Firebase включает 50 тысяч доступов на чтение. Вроде много. Я даже выставил «бюджет» в 5$ на всякий случай, чтобы заметить если вдруг что. Все заработало (не так быстро, как могло бы быть с SQL, но все же). А через неделю внезапно оказалось, что наши скрипты для бэра выжирали примерно 11 миллионов чтений в день 😄, что стоило примерно 100-200$ за эту неделю.

Опты с Firebase DB показал (я могу быть не прав, поправьте, если так), что
* Eдобно использовать, когда вам нужен простой бак, хранящий инфу одного пользователя
* Это может стоить дорого, а ограничить жестко возможности нет (только придет уведомление)
* Если вам нужен более продвинутый бэк, то, вероятно писать его поверх Firebase DB так себе идея. Лучше взять даже старый добрый MySQL и иметь контролируемое решение.

А что вы думаете про Firebase Datastore? (Именно про datastore, а не другие сервисы, о которых можно поговорить отдельно). https://bit.ly/31zSJgn
Запустили игру, почти тетрис, но не совсем 🙂
Сама игра на #Unity, первая версия зарелижена пока что только под #Android.

Интересный момент. Предыдущие игры делал от начала до конца самостоятельно. С #Tetcore же ко мне обратился приятель, который по сути разработал игру процентов на 80-90 и попросил помочь с финальными штрихами и релизом.

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

В итоге допилили управление и туториал и субъективно стало удобнее. (Но это не точно, ведь я тоже замылился по факту). И запустили AS IS. Получить фидбек от реальных людей лучше раньше чем позже.

К чему это я?

* Всегда проверяйте ваши идеи на совершенно не искушенных пользователях. То, что вам кажется 100% очевидным по факту может оказаться непреодолимым для большинства.
* Работа «по другую сторону баррикад» - именно не непосредственно в разработке, а со стороны продакт менеджмента дает понять почему порой на ваших проектах PM кажется вам каким-то странным 😉
* Баги будут всегда. Это нормально. Для нового продукта бывает критически важно вовремя запуститься, а не пытаться достичь недостижимого идеала.

И да, буду крайне признателен за оценочку в маркете 😉 https://bit.ly/3kgifj9
Наконец-так вышло то, что все* давно ждали!

*Не знаю как вы, но я и многие кого знаю из мобайла - точно.

#Google дал возможность оставлять отзыв о приложении прямо внутри приложения🌟

Теперь можно попросить пользователя оценить его опыт ровно тогда, когда он на это готов и не выгонять его из приложения при этом теряя конверсии. https://bit.ly/30IPbsR
#Google довольно давно веел фичу «Отчет о тестировании» в Google play developer console. Вероятно вы ей уже пользовались, но на всякий случай решил напомнить о ней еще раз.

Когда вы загружаете APK/AppBundle в консоль, то Google прогоняет на версии ряд тестов. Он запускает ваше приложение на живых девайсах и даже постит скриншоты в консоль 🔥

По факту тестирования на почту упадет письмо с результатами.

Примечательно, что тестирование запускается не только на релизной версии, но и даже на версиях, предназначенных для внутреннего тестирования. Кстати если, вы им еще не пользуетесь, советую присмотреться, туда можно вообще пушить с вашего CI: https://dimlix.com/deploy-android-app-with-ease/ 😉

Итого последовательность действий при релизе может быть такая:
* Закидываете релиз кандидата в internal channel в google play
* Тестируете сами и ждете тестов от Google
* Смотрите отчет, какие потенциальные проблемы есть, вплоть до того, какие кликабельные зоны меньше рекомендуемого
* Катите оттестированное приложение в релиз
* ...
* Профит!
Заметил (даже может быть очередной раз) полезную вещь про работу в команде.

С ~2016 года на всех проектах работал либо один, либо был самым сенсорным человеком на проектах. Порой коллеги в команде на замечания по коду на PR и в целом по общению говорили «о, круто\не знал такого\хорошое замечание». И сам, отвечая за техническую реализацию проекта в «одном лицо» смотришь на код и думаешь «ну вроде архитектура, код и вообще проект четкий, структурированный и тд».

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

На текущем проекте сместился больше в сторону лида (чуть больше менеджерская часть) и наняли именно технически сеньорного парня. И вот на протяжении некоторого времени происходят очень полезные и интересные изменения. И на код ревью и просто при обсуждении технической части проекта часто поднимается тема «в целом-то норм, но можно сделать вот так и вот, будет круче, проще и понятнее»… пробуешь… и правда, вроде и было не то, чтобы плохо, а стало заметно лучше.

О чем это я? Если есть возможность поработать в команде с технически сильным коллегой - стоит этим воспользоваться. Тут даже дело не в том, что он скажет как надо, а в том что можно подумать над проблемой «с разных сторон». Полагаю именно по-этому считается, что в компании (читай «стартапе») должно быть 2 учредителя. Монополярная точка зрения - довольно рискованный подход.