Android Live 🤖 – Telegram
Android Live 🤖
5.28K subscribers
52 photos
1 video
800 links
Самые свежие новости, новинки и тренды Android от практикующего разработчика.


Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog

Рекламу не размещаю
Download Telegram
Благодарю всех за участие в конкурсе! В скором времени будут объявлены результаты.
👍1
Android ColorFilter Mode
#разработка 

На прошлой неделе столкнулся с задачей динамического создания кнопок разных цветов из кастомного drawable. 

Задача достаточно простая: нужно было создать кнопку, а дальше сделать setBackgroundResource() и выбрать необходимый файл. Дальше задать необходимый цвет при помощи метода setColorFilter

Однако, в моем случае, у каждой кнопки была обводка. То есть, в drawable задана <stroke>, а после применения фильтра она пропадала. Пришлось задаться вопросом и подробнее изучить тему Mode для ColorFilter. 

ColorFilter используется для нескольких целей. Например, им можно поменять Canvas, если вы создаете с нуля свою View. Или же для изменения цвета и рендеринга ImageView и Drawable, что используется в большинстве случаев.

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

Подробнее о том, как работают фильтры можно найти в этой статье. В моем случае помог Mode MULTIPLY, который не затронул обводку у кнопки.
👍1
Результаты конкурса «Рождественская распродажа»
#конкурс

Итак, прошли выходные и я подвожу итоги конкурса. Всего прислано 72% решений на Java и 28% на Kotlin.

1) Java. Лучшие решения состоят из 47 символов. Таких решений было 3:

• return r>n?0:gamesCount(r-d>m?r-d:m,d,m,n-r)+1; — @smallcreep
• return n<m?0:gamesCount(r-d<m?m:r-d,d,m,n-r)+1; — @maxim_ivanov
• return n<r?0:r>m?1+gamesCount(r-d,d,m,n-r):n/m; — @warmouse

При помощи рандомайзера, победителем является @maxim_ivanov!

Отдельно хочу отметить решение автора @aIexmoran. Если предыдущие решения используют рекурсию, то решение автора нет. Это самое короткое решение без рекурсии — 48 символов.
• int i=0;while(m<=r){n-=r;r-=d;i++;}return i+n/m;

2) Kotlin. Тут было немного сложнее определить победителя.
В правилах я не указывал о том, что нельзя добавлять свои imports. С одной стороны, самым коротким было решение из 53 символов. Но также было решение из 58 символов, которое было похожим на короткое, но без импорта java.lang.Math.*. Принял решение, что было бы несправедливым не отметить автора второго решения. Поэтому, я считаю, что самыми короткими решениями на Kotlin — это решения из 58 символов. Под критерии подходят 2 решения:

• return if(n<r)0 else gamesCount(Math.max(r-d,m),d,m,n-r)+1 — @R1KUD0
• return if(r<=n)1+gamesCount(Math.max(r-d,m),d,m,n-r)else 0 — @Svyat

При помощи рандомайзера, победителем является @R1KUD0!

Ссылки на видео с использование рандомайзера тут и тут.

Напоминаю, что победители получат книги Егора Бугаенко «Elegant Objects»

Большое спасибо всем участникам конкурса! Мне очень понравился подобный формат, поэтому мы обязательно к нему вернемся.

Как вам подобный формат?
👍1
Еще немного о конкурсе

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

Бдительный подписчик обнаружил, что решение победителя не проходит некоторые из тестов, которые я не использовал для проверки, а именно:
15 5 3 24
ожидается результат — 1, реальный результат — 2
37 6 10 36
ожидается результат — 0, реальный результат — 1

Решение с рекурсией также не проходит некоторые из тестов:
37 6 10 36
ожидается результат — 0, реальный результат — -3
24 8 5 24
ожидается результат — 1, реальный результат — -1

Поэтому, из опубликованных решений правильным являются два решения:
• return r>n?0:gamesCount(r-d>m?r-d:m,d,m,n-r)+1; — @smallcreep
• return n<r?0:r>m?1+gamesCount(r-d,d,m,n-r):n/m; — @warmouse

Победителем конкурса является @smallcreep
Ссылка на рандомайзер тут.

Первый конкурс на канале, в предстоящих конкурсах я обязательно буду писать больше тестов для выбора победителя.
👍1
Друзья, сегодня последний день 2018 года.

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

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

С Новым, 2019 годом!
👍1
​​Деньги для разработчика
#мысли #комментарии

Спрашивали ли вы себя, для чего работаете? Почему интересовались IT и выбрали эту сферу в качестве ремесла? 

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

Надеюсь, что главный мотиватор писать код для большинства — это любовь к программированию. Иногда спрашиваю себя: занимался бы программированием, если бы у меня было необходимое количество денег? И да, уверен, что занимался бы. Мне нравится сам процесс написания кода и создания нового.

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

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

Второй пункт: деньги — это показатель ответственности. С ростом зарплаты чаще всего растет и зона ответственности. Сначала ты junior-разработчик и не отвечаешь за проект. Через некоторое время получаешь опыт, больше отвечаешь за проект, а также видишь прибавку к зарплате. Ответственность также мотиватор работы. Однако помните: чаще работодатель сам не проявляет инициативу повышения ЗП. Проявляйте инициативу сами: спросите, что вам нужно делать, чтобы получать больше. Не шантажируйте и не давите на работодателя. Порой после подобного вопроса, начальство вспоминает, что вы ответственный и важный сотрудник, и вас нужно мотивировать большей суммой, чем вам платят сейчас. Больше информации о повышении ЗП стоит почитать тут.

В третьих, деньги — это ресурс. Тут все просто. Чем больше денег, тем больше тебе доступно. На мой взгляд, зарплата разработчика позволяет закрыть все базовые потребности: еда, жилье, одежда, здоровье. Когда ты не задумываешься об этих вещах, то появляется возможность развиваться и расти в какой-то другой сфере, больше узнавать мир и становиться лучше. Это возможно благодаря деньгами.

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

А как вы считаете, чем является зарплата для разработчика?
Делитесь мнением в комментариях.
👍1
​​1-1
#разработка #опрос #комментарии 

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

Вторая причина — это отсутствие роста. Человек упирается в потолок на текущем месте, нет задач-вызовов и сложных проектов. От этого становится скучно и он уходит.

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

Помочь предотвратить последнюю причину может практика 1-1.

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

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

Сначала подобный формат вызвал у меня скепсис. Однако после некоторого времени я понял, что это действительно крутая практика, которая помогает работе.

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

Оставляйте свое мнение об этой технике в комментариях. 
А есть ли у вас в компании 1-1? 
👍1
Android Quiz
#статьи #опрос

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

На глаза попалась небольшая статья-опрос, где предлагается ответить на 13 вопросов. Все вопросы связаны с Android и Kotlin. Интересный квиз, и я спешу поделиться им с вами. Займет это буквально 5 минут времени. Но уверен, что вы сможете узнать оттуда что-то новое для себя.

Сколько баллов удалось набрать?
👍1
​​MotionLayout
#разработка

На прошедшем в 2018 году Google IO был представлен MotionLayout. Это новый класс, который помогает разработчикам управлять анимацией жестов. Является наследником ConstraintLayout, при этом переопределяя некоторые из его свойств.

Этот тип layout стоит использовать, когда у вас есть элементы с которыми взаимодействует пользователь, и им нужно добавить красивую анимацию. Происходит это следующим образом: создается исходная и конечная (если необходимо, то несколько промежуточных) схемы. Далее запускается переход и анимируются свойства, которые различны в первой и последующей схеме.

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

На самом деле, с нетерпением жду появления инструмента для предпросмотра анимаций, который описывался на докладе Google IO.

Кстати, тут можно найти вводную информацию про layout и доклад на Google IO, а тут репозиторий с примерами.
👎1
Layer-list и drawable
#разработка #статьи

Одним из частых кейсов в верстке является расположение одного TextView и ImageView: списки, боковое меню, заглушки. Думаю, что каждый делал подобные элементы.

Начинающие разработчики дейстуют так: делают LinearLayout, где располагают эти элементы с необходимой gravity. Однако опытные обращают внимание на сообщение от AndroidStudio: лучше сделать TextView и указать ему drawable в нужной позиции. Но как лучше сделать этот drawable?

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

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

Прочитать эксперимент можно тут, а здесь ссылка на приложение.
👍1
Друзья ежегодно устраивают опрос о рынке мобильной разработки в России.

Скоро будет отчет, предлагаю и вам принять участие в опросе.👇
👍1
Forwarded from Android Good Reads
Запускаю ежегодный опрос известности команд мобильной разработки 🔥🔥🔥

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

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

Опрос: http://bit.ly/2RoSPjA
Прошлое исследование: http://bit.ly/2Uld2bO
👍1
Что происходит при запуске Activity?
#разработка #статьи 

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

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

Ссылка на статью тут.
👍1
​​Don't kill my app!
#разработка 

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

Иногда эти изменения носят положительный характер. Например, говорят, что в следующем Android появится темная тема, хотя на некоторых прошивках она уже присутствует. Помню, как на тогда еще флагманском Samsung S5 с версией Android 5.0 была поддержка разблокировки по отпечатку пальца, что было новинкой для устройств в то время. 

Но иногда изменения носят отрицательный характер, и хуже всего то, что эти их сложно заметить. Например, чтобы увеличить время работы телефона, производители добавляют некоторые режимы и приложения для экономии заряда. Они могут убивать ненужные, по их мнению, приложения из фона, отключать фоновые функции и т.д. Часто из-за подобных приложений smartphones превращаются в dumbphones, а страдают пользователи: приложения перестают работать так, как планировали разработчики. Ну и разработчки также не рады: сложно оптимизировать свои приложения под все «выходки» вендоров. 

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

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

В декабре 2018 года вышла релизная версия Flutter. И если до релиза к нему относились с настороженностью, то сейчас наблюдаю достаточно много активности вокруг этого фреимворка.

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

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

Как вы думаете, что станет с Flutter в будущем? Взлетит он или нет? Заменит нативную разработку? А может у вас уже есть опыт написания своих приложений на нем.

Пишите в комментариях или в личные сообщения.

Ну и небольшой опрос: что будет с Flutter?
👍1
Как увеличить скорость работы Android Studio?
#разработка

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

И вроде компьютеры становятся мощнее, а оптимизация операционной системы и Android Studio лучше, но при этом все равно скорость не увеличивается.

Есть несколько решений, которые помогут улучшить ситуацию. О некоторых из них можно прочитать в этой статье.

Еще одна рекомендация — отключение ненужных плагинов. Для этого нужно открыть File -> Settings -> Plugins и отключить в списке ненужные плагины.

Например, можно попробовать отключить следующие: Android APK Support, Android Games, Android NDK, App Links Assistant, Copyright, Coverage, CVS Integeration, Editor Config, Fabric for Android Studio, Firebase (App Indexing, Services, Testing), Github, Google (Cloud Tools Core, Cloud Tools for Android, Developer Samples, Login, Services), Markdown Support, Mercurial, integration, hg4idea, Settings repository, Subversion integration, Task management, Test recorder, TestNG-J, YAML
👍1
Недавно я публиковал на канале ссылку на ежегодный опрос известности команд мобильной разработки.

Сегодня публикую результаты опроса.

Приятно, что среди ответов на вопрос «Что слушаете и читаете?» в разделе Android присутствует и мой канал. Большое вам спасибо! 🥳
👍1
Git bisect
#разработка

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

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

И тут на помощь мне пришел инструмент, который я не использовал раньше. Называется он git bisect. Я нашел проблемный коммит за 4 шага и примерно 20 минут.

Чтобы его использовать необходимо:
1) Открыть консоль git и перейти в папку проекта.
2) Ввести git checkout <commit hash>, где вместо скобок записать коммит, в котором проявилась проблема.
3) Начать процесс поиска при помощи команды git bisect start.
4) Пометить этот коммит плохим при помощи команды git bisect bad.
5) Пометить коммит, где точно нет проблемы при помощи команды git bisect good <commit hash>.
6) Далее повторяете процесс. Каждый раз git будет переключать в нужный коммит между предыдущим хорошим и плохим коммитом при помощи бинарного поиска. Собираете проект и проверяете, проявляется ли проблема. Если да, то вводите git bisect bad, если же нет, то git bisect good.
7) После завершения поиска вводите git bisect reset, чтобы вернуть репозиторий в начальное состояние.

У вас получится найти проблемный коммит за log n шагов, где n — число коммитов между первыми помеченными коммитами.
👍1
Иногда на моем канале появляются анонсы интересных для разработчиков мероприятий. Недавно ко мне обратились с просьбой рассказать о предстоящем хакатоне, PhotoHack: Visual Messaging.

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

Он будет 16-17 марта 2019 года в ВДНХ, павильон № 461 “Умный город”. Призовой фонд 500 000 рублей.

Участие бесплатное. Надо просто зарегистрироваться на сайте.

Прием заявок до 13 марта.

Сайт мероприятия: http://bit.ly/2IR2q3B
👍1
​​Еще немного про анимации
#разработка #статьи

Для многих разработчиков написание анимаций — это отдельная и непростая задача.

Мне нравится, что сейчас создание анимаций становится более простой задачей.

Если хочешь красивые статические анимации — можешь использовать Lottie. Если хочешь красивые переходы между View, в то время как пользователь взаимодействует с приложением, то есть новый MotionLayout, о котором я недавно писал.

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

Вчера наткнулся на статью об этих анимациях, где автор рассказывает о специальной библиотеке, которая помогает работать с ними. Рекомендую ознакомиться со статьей и применять эти анимации в своих приложениях. Не стоит тащить в свой проект всю библиотеку ради одной анимации, но у вас всегда есть возможность посмотреть в исходный код.
👍1
​​Давно у нас не было топа статей из Medium
#статьи #medium

1) Using Dagger in a multi-module project — (8 минут)
Использование многомодульных приложений сегодня является не только хорошей, но и необходимой практикой, особенно в больших приложениях. Одним из самых сложных этапов является использование dependency injection. В статье автор делится опытом использования Dagger в многомодульных приложениях. Особенно полезно, если вы на пути перехода вашего монолита на многомодульность.

2) Android Instant Apps 101: what they are and how they work — (6 минут)
Небольшая статья про Android Instant Apps: это часть приложения, которая доступна пользователю без установки самого приложения на телефон. Я не часто вижу их при установке приложений из Google Play, но, возможно, он подходит для конкретно вашего случая.

3) My Most Used Android Studio Shortcuts — (7 минут)
Полезная статья-справка о горячих клавишах в Android Studio. Думаю, что каждый найдет себе несколько полезных сочетаний клавиш, которые в перспективе ускорят разработку.
👍1