Нужна ли безопасность в приложении?
#разработка #статьи
Когда только начинаешь программировать, то от приложения только одно требование: работоспособность.
Со временем начинаешь задумываться об архитектуре, паттернах программирования, качестве кода. Ну и о том, что пора бы не изобретать велосипеды, а использовать готовые решения.
Но даже достаточно опытные разработчики не задумываются о безопасности своих приложений. Думаю, что не составит труда найти в Google Play не обфусцированный код в приложениях, а также важные данные в открытом виде.
Чаще всего такая ситуация возникает из-за недостатка времени на разработку. Бизнес требует фич. А о безопасности вспоминают тогда, когда это угрожает бизнесу. К сожалению, не все заказчики понимают, что это приводит к снижению качества приложения.
Но тут ведь собрались люди, которые хотят делать качественные продукты. Поэтому, всегда нужно помнить о безопасности. Это очень большая тема, и не всегда знаешь, с чего начать.
Чтобы помочь в изучении криптографии, рекомендую цикл статей об этом. Всё изложено на простом языке, даже если вы ничего не понимаете в криптографии и безопасности.
Попался также интересный курс, у которого оценка 4.8 и одни положительные отзывы — Cryptography I на Coursera. Думаю, что тоже будет полезен для тех, кто интересуется безопасностью.
#разработка #статьи
Когда только начинаешь программировать, то от приложения только одно требование: работоспособность.
Со временем начинаешь задумываться об архитектуре, паттернах программирования, качестве кода. Ну и о том, что пора бы не изобретать велосипеды, а использовать готовые решения.
Но даже достаточно опытные разработчики не задумываются о безопасности своих приложений. Думаю, что не составит труда найти в Google Play не обфусцированный код в приложениях, а также важные данные в открытом виде.
Чаще всего такая ситуация возникает из-за недостатка времени на разработку. Бизнес требует фич. А о безопасности вспоминают тогда, когда это угрожает бизнесу. К сожалению, не все заказчики понимают, что это приводит к снижению качества приложения.
Но тут ведь собрались люди, которые хотят делать качественные продукты. Поэтому, всегда нужно помнить о безопасности. Это очень большая тема, и не всегда знаешь, с чего начать.
Чтобы помочь в изучении криптографии, рекомендую цикл статей об этом. Всё изложено на простом языке, даже если вы ничего не понимаете в криптографии и безопасности.
Попался также интересный курс, у которого оценка 4.8 и одни положительные отзывы — Cryptography I на Coursera. Думаю, что тоже будет полезен для тех, кто интересуется безопасностью.
Используемые библиотеки
#эксперимент
Хочу описать то, что мы используем в нашем эксперименте:
• Kotlin — ранее уже писал о том, что сейчас не вижу смысла начинать новые проекты не на Kotlin. Не так давно добавлена официальная поддержка Google, синтаксический сахар, меньшее количество кода и популярность делают этот язык привлекательнее, чем Java в Android;
• Clean Architecture — если выбирать сейчас между Architecture Components от Google и Clean, то я выбираю второе. В ней решено большинство типовых вопросов, есть крутое русскоязычное сообщество и отличный кукбук. Кроме того, написано много крупных проектов. Architecture Components тоже хорош, но все же это пока достаточно молодой компонент и не стал бы его использовать в коммерческих проектах, а только для проб в небольших проектах;
• RxJava 2 — мощная библиотека, ставшая неотъемлемой частью мира Android. Мы будем использовать её для запросов к серверу, обработки данных и управления многопоточностью;
• Retrofit — использование в запросах к серверу;
• Glide — для загрузки изображений с интернета. В качестве альтернативы можно использовать Picasso;
• Room — для внутренней базы данных. Пока не добавляли эту зависимость, но для базы данных лучше использовать её. На мой взгляд, это сейчас наиболее удобная из БД;
• Firebase — мы будем использовать этот сервис для пуш-уведомлений и альтернативы серверной части. Это тоже для меня будет эксперимент, я раньше использовал пуш-уведомления
Это не полный список используемых нами библиотек. Я не пишу тут support библиотеки, которые добавляются при создании проекта и обязательны, а также зависимости для социальных сетей. Это я буду описывать по мере использования их в проекте.
Первое задание — это подключить все зависимости. В следующем посте, я расскажу об этом, опишу, как сделать это правильнее и удобнее для использования.
#эксперимент
Хочу описать то, что мы используем в нашем эксперименте:
• Kotlin — ранее уже писал о том, что сейчас не вижу смысла начинать новые проекты не на Kotlin. Не так давно добавлена официальная поддержка Google, синтаксический сахар, меньшее количество кода и популярность делают этот язык привлекательнее, чем Java в Android;
• Clean Architecture — если выбирать сейчас между Architecture Components от Google и Clean, то я выбираю второе. В ней решено большинство типовых вопросов, есть крутое русскоязычное сообщество и отличный кукбук. Кроме того, написано много крупных проектов. Architecture Components тоже хорош, но все же это пока достаточно молодой компонент и не стал бы его использовать в коммерческих проектах, а только для проб в небольших проектах;
• RxJava 2 — мощная библиотека, ставшая неотъемлемой частью мира Android. Мы будем использовать её для запросов к серверу, обработки данных и управления многопоточностью;
• Retrofit — использование в запросах к серверу;
• Glide — для загрузки изображений с интернета. В качестве альтернативы можно использовать Picasso;
• Room — для внутренней базы данных. Пока не добавляли эту зависимость, но для базы данных лучше использовать её. На мой взгляд, это сейчас наиболее удобная из БД;
• Firebase — мы будем использовать этот сервис для пуш-уведомлений и альтернативы серверной части. Это тоже для меня будет эксперимент, я раньше использовал пуш-уведомления
Это не полный список используемых нами библиотек. Я не пишу тут support библиотеки, которые добавляются при создании проекта и обязательны, а также зависимости для социальных сетей. Это я буду описывать по мере использования их в проекте.
Первое задание — это подключить все зависимости. В следующем посте, я расскажу об этом, опишу, как сделать это правильнее и удобнее для использования.
Классно, когда подход к поиску сотрудников творческий.
Попался тест от АльфаБанк для программистов. Тест состоит из 10 задач по Java, iOS, Android или JavaScript на выбор. Как обещают, лучшим предложат работу в «Альфа-Банке».
Ссылка на тест.
На сколько вопросов ответили?
⚪️ — 8-10;
⚫️ — 5-7;
🔴 — 3-4;
🔵 — меньше 3.
Попался тест от АльфаБанк для программистов. Тест состоит из 10 задач по Java, iOS, Android или JavaScript на выбор. Как обещают, лучшим предложат работу в «Альфа-Банке».
Ссылка на тест.
На сколько вопросов ответили?
⚪️ — 8-10;
⚫️ — 5-7;
🔴 — 3-4;
🔵 — меньше 3.
Что важно в работе?
#думы
Вы не задавали себе вопрос: почему вы работаете именно в том месте, где сейчас?
Безусловно, если вам не нравится текущее место работы, то нужно его менять. Становиться лучше, что-то изучать, пробовать устровиться в «контору мечты». Но если говорим про работу, которая по душе, то задумывались ли вы, почему она вам нравится?
Для себя я уже давно выделил 3 главных критерия работы. Они равнозначны для меня, и если работа не отвечает одному из этих критериев, то она мне не по душе:
1) Деньги. Если человек получает за свой качественный труд мало денег, и нет перспективы дальнейшего роста, то вряд ли он будет держаться за это место и уйдет при первом более выгодном предложении. Для меня этот показатель очень важен, в общем-то как и для большинства людей.
2) Проект. Я люблю делать проекты, которыми пользуются люди. Очень нравится получать от них реакцию, видеть их отзывы. Если постоянно делать «проекты-однодневки», то это не принесет внутреннего удовольствия. При устройстве на работу я обязательно оцениваю проект, который буду писать.
3) Команда. Если в коллективе серпентарий и каждый готов сожрать друг друга, то вряд ли будешь получать удовольствие от работы. Важно также оценивать профессиональный уровень коллектива. Если вы будете тянуть всю работу на себе, при этом атмосфера в кабинете будет хорошей, то радости от создания продукта тоже будет не много, и скоро произойдет выгорание.
Кстати, вчера задумался о том, что у меня есть ещё вторичные критерии рабочего места. Пока придумал только один — лидерство руководителя.
Понял, что меня больше вдохновляет та работа, где руководитель качественно управляет коллективом; эффективный менеджмент, а не метод «кнута и кнута». Заряжает та команда, где я хочу взять какие-то профессиональный качества от начальника.
Ищите работу по душе, ведь на ней мы проводим треть жизни.
А скажите, довольны ли вы текущим местом работы?
#думы
Вы не задавали себе вопрос: почему вы работаете именно в том месте, где сейчас?
Безусловно, если вам не нравится текущее место работы, то нужно его менять. Становиться лучше, что-то изучать, пробовать устровиться в «контору мечты». Но если говорим про работу, которая по душе, то задумывались ли вы, почему она вам нравится?
Для себя я уже давно выделил 3 главных критерия работы. Они равнозначны для меня, и если работа не отвечает одному из этих критериев, то она мне не по душе:
1) Деньги. Если человек получает за свой качественный труд мало денег, и нет перспективы дальнейшего роста, то вряд ли он будет держаться за это место и уйдет при первом более выгодном предложении. Для меня этот показатель очень важен, в общем-то как и для большинства людей.
2) Проект. Я люблю делать проекты, которыми пользуются люди. Очень нравится получать от них реакцию, видеть их отзывы. Если постоянно делать «проекты-однодневки», то это не принесет внутреннего удовольствия. При устройстве на работу я обязательно оцениваю проект, который буду писать.
3) Команда. Если в коллективе серпентарий и каждый готов сожрать друг друга, то вряд ли будешь получать удовольствие от работы. Важно также оценивать профессиональный уровень коллектива. Если вы будете тянуть всю работу на себе, при этом атмосфера в кабинете будет хорошей, то радости от создания продукта тоже будет не много, и скоро произойдет выгорание.
Кстати, вчера задумался о том, что у меня есть ещё вторичные критерии рабочего места. Пока придумал только один — лидерство руководителя.
Понял, что меня больше вдохновляет та работа, где руководитель качественно управляет коллективом; эффективный менеджмент, а не метод «кнута и кнута». Заряжает та команда, где я хочу взять какие-то профессиональный качества от начальника.
Ищите работу по душе, ведь на ней мы проводим треть жизни.
А скажите, довольны ли вы текущим местом работы?
Runtime Permissons — это зло?
#разработка #думы #дизайн
В выходные прочитал мнение, что анонсированные в Android Marshmallow разрешения налету — это плохо.
Во-первых, подобные сообщения блокируют работу приложения. Представьте, что у вас есть стороннее приложение, которое снимает фото. Вы заметили отличный кадр и хотите оперативно заснять увиденное. Но вместо того, чтобы использовать функцию приложения, нужно дать ему разрешение. Пока делаете это, момент может быть упущен.
Во-вторых, разработчикам необходимо добавлять проверки в код. Стандартные проверки сделаны не достаточно удобно, и многие в качестве альтернативы используют сторонние библиотеки. Это решает часть проблем, но все равно появляется лишние строки кода.
В-третьих, подобные уведомления портят дизайн приложения. Они системные, их нельзя кастомизировать.
Какие же альтернативные варианты?
Например, давать пользователю при установке приложения выбор: или разрешить делать какой-то набор разрешений, как было до Android Marshmallow, или же разрешать всё налету, как сейчас.
Думаю, что в этих мыслях есть доля правды. Идея давать доступ к системным компонентам налету отличная. Сам часто запрещаю доступ к локации, фото и контактам, когда не понимаю, зачем этого хочет приложение. А насчет правильности реализации — действительно есть вопросы, но достойной альтернативы, кроме описанной выше, я не вижу.
#разработка #думы #дизайн
В выходные прочитал мнение, что анонсированные в Android Marshmallow разрешения налету — это плохо.
Во-первых, подобные сообщения блокируют работу приложения. Представьте, что у вас есть стороннее приложение, которое снимает фото. Вы заметили отличный кадр и хотите оперативно заснять увиденное. Но вместо того, чтобы использовать функцию приложения, нужно дать ему разрешение. Пока делаете это, момент может быть упущен.
Во-вторых, разработчикам необходимо добавлять проверки в код. Стандартные проверки сделаны не достаточно удобно, и многие в качестве альтернативы используют сторонние библиотеки. Это решает часть проблем, но все равно появляется лишние строки кода.
В-третьих, подобные уведомления портят дизайн приложения. Они системные, их нельзя кастомизировать.
Какие же альтернативные варианты?
Например, давать пользователю при установке приложения выбор: или разрешить делать какой-то набор разрешений, как было до Android Marshmallow, или же разрешать всё налету, как сейчас.
Думаю, что в этих мыслях есть доля правды. Идея давать доступ к системным компонентам налету отличная. Сам часто запрещаю доступ к локации, фото и контактам, когда не понимаю, зачем этого хочет приложение. А насчет правильности реализации — действительно есть вопросы, но достойной альтернативы, кроме описанной выше, я не вижу.
Хочу поделиться с вами удобным решением типичной задачи в Android-разработке.
Задача.
Имеется n-полей для ввода текста, а также кнопка, которая отправляет данные с этих полей ввода. Нужно, чтобы все поля были заполнены. Если хоть одно не будет заполнено, то это не даст отправить данные (блокирует кнопку). Кнопка изначально будет заблокирована, так как ни в одном из полей нет текста.
Решение.
Одним из распространенных способов решения является добавление
В качестве альтернативы могу предложить решение через
Получилось 5 строк кода, благодаря которым мы без труда решили задачу.
Интересны ли вам видеть на канале подобные #советы?
Задача.
Имеется n-полей для ввода текста, а также кнопка, которая отправляет данные с этих полей ввода. Нужно, чтобы все поля были заполнены. Если хоть одно не будет заполнено, то это не даст отправить данные (блокирует кнопку). Кнопка изначально будет заблокирована, так как ни в одном из полей нет текста.
Решение.
Одним из распространенных способов решения является добавление
TextWatcher и дальнейшая обработка там блокировки кнопки. Решение имеет не мало кода и выглядит это не красиво. В качестве альтернативы могу предложить решение через
RxJava и RxBinding. Нужно использовать функции Observable.combineLatest() и RxTextView.textChanges(). Примерный код функции тут. Как-то Telegram не умеет красиво верстать исходный код.Получилось 5 строк кода, благодаря которым мы без труда решили задачу.
Интересны ли вам видеть на канале подобные #советы?
Важность сервиса
#думы
Сегодня в Google Play огромное количество приложений. Но небольшой процент из них пользуется популярностью. В чем же секрет подобных приложений? На мой взгляд, на это влияет несколько факторов.
1. Решают проблемы. Пользователь загружает то приложение, которое облегчает жизнь. Хочешь выучить английский? Вот приложение с набором слов, грамматики и нестандартными упражнениями. Хочешь заказать еду? Вот сервис, который обеспечит быструю доставку любимых продуктов. Никто не оставляет на телефоне бесполезные приложения.
2. Имеют приятный дизайн. Сейчас уже не достаточно просто следовать рекомендациям Google по дизайну, чтобы сделать прорывной продукт. Если посмотреть на лучшие приложения, то они содержат интересные дизайнерские решения, плавные анимации и огромное внимание к деталям.
3. Дают чуть больше, чем конкуренты. Уверен, что всем нравится получать бо́льшее за меньшие усилия. Здорово, когда сервис предлатает какую-то незначительную, но приятную мелочь после определенных действий. Например, при заказе авиабилета можно показать пару интересных, но не заезженных мест из этого города и погоду в этот день.
Подумайте, что вы можете улучшить в своих приложениях, и старайтесь создавать максимально крутые продукты.
#думы
Сегодня в Google Play огромное количество приложений. Но небольшой процент из них пользуется популярностью. В чем же секрет подобных приложений? На мой взгляд, на это влияет несколько факторов.
1. Решают проблемы. Пользователь загружает то приложение, которое облегчает жизнь. Хочешь выучить английский? Вот приложение с набором слов, грамматики и нестандартными упражнениями. Хочешь заказать еду? Вот сервис, который обеспечит быструю доставку любимых продуктов. Никто не оставляет на телефоне бесполезные приложения.
2. Имеют приятный дизайн. Сейчас уже не достаточно просто следовать рекомендациям Google по дизайну, чтобы сделать прорывной продукт. Если посмотреть на лучшие приложения, то они содержат интересные дизайнерские решения, плавные анимации и огромное внимание к деталям.
3. Дают чуть больше, чем конкуренты. Уверен, что всем нравится получать бо́льшее за меньшие усилия. Здорово, когда сервис предлатает какую-то незначительную, но приятную мелочь после определенных действий. Например, при заказе авиабилета можно показать пару интересных, но не заезженных мест из этого города и погоду в этот день.
Подумайте, что вы можете улучшить в своих приложениях, и старайтесь создавать максимально крутые продукты.
Подключение зависимостей
#эксперимент
Первое задание, которое необходимо выполнить в рамках эксперимента — это подключение зависимостей.
Обычный путь подключения зависимостей — добавление в
В проектах используется не одна зависимость, а несколько десятков. В итоге появляется неуправляемый и нечитаемый список. Иногда бывает так, что в проекте остаются неиспользуемые зависимости, и только за счет того, что программист не в состоянии найти строку кода, где они подключаются.
Для группировки зависимостей рекомендую использовать Gradle structure. Как сделать подобную структуру прочитайте тут.
В результате получаем структуру, которая имеет несколько преимуществ:
1) Читаемость. У нас появляется столбик с версиями библиотек, который лучше читается из-за уменьшения количества текста.
2) Единство версий в модулях. Если в прокте включено несколько модулей, то появляется возможность описывать версию зависимости в одном месте. Кстати, использование различных версий зависимостей может привести к некорректной работе приложения. Наш подход исключает такое поведение.
3) Переиспользование версии в смежных зависимостях. Во всех проектах используются
#эксперимент
Первое задание, которое необходимо выполнить в рамках эксперимента — это подключение зависимостей.
Обычный путь подключения зависимостей — добавление в
build.gradle на уровне модуля строки вида: implementation 'com.android.support:support-v4:27.1.0'В проектах используется не одна зависимость, а несколько десятков. В итоге появляется неуправляемый и нечитаемый список. Иногда бывает так, что в проекте остаются неиспользуемые зависимости, и только за счет того, что программист не в состоянии найти строку кода, где они подключаются.
Для группировки зависимостей рекомендую использовать Gradle structure. Как сделать подобную структуру прочитайте тут.
В результате получаем структуру, которая имеет несколько преимуществ:
1) Читаемость. У нас появляется столбик с версиями библиотек, который лучше читается из-за уменьшения количества текста.
2) Единство версий в модулях. Если в прокте включено несколько модулей, то появляется возможность описывать версию зависимости в одном месте. Кстати, использование различных версий зависимостей может привести к некорректной работе приложения. Наш подход исключает такое поведение.
3) Переиспользование версии в смежных зависимостях. Во всех проектах используются
com.android.support библиотеки, которые должны иметь одинаковые версии. При таком подходе получаем возможность повышения версии в одном месте.Конец недели, и вот вам новый топ статей из Medium.
#статьи #medium
1) Написание модульного приложения на Android. — (4 минуты)
В статье описан достаточно интересный принцип построения приложения на Android — модульный. После разбиения на модули получаем уменьшенное время сборки и повторное использование модулей.
2) Рассматриваем KTX для Android. — (13 минут)
Недавно компания Google анонсировала набор расширений Kotlin для Android-разработки. Автор подробно рассматривает нововведения, подкрепляя примеры кодом. Теперь разработка на Kotlin еще удобнее!
3) Приложение не отвечает. Что же делать? — (5 минут)
Небольшая статья о состоянии, когда «приложение не отвечает», что затрудняет использование приложения. Автор описывает способы выяснения и борьбы с этим состоянием.
#статьи #medium
1) Написание модульного приложения на Android. — (4 минуты)
В статье описан достаточно интересный принцип построения приложения на Android — модульный. После разбиения на модули получаем уменьшенное время сборки и повторное использование модулей.
2) Рассматриваем KTX для Android. — (13 минут)
Недавно компания Google анонсировала набор расширений Kotlin для Android-разработки. Автор подробно рассматривает нововведения, подкрепляя примеры кодом. Теперь разработка на Kotlin еще удобнее!
3) Приложение не отвечает. Что же делать? — (5 минут)
Небольшая статья о состоянии, когда «приложение не отвечает», что затрудняет использование приложения. Автор описывает способы выяснения и борьбы с этим состоянием.
Сегодня продолжу тему #советы
Задача
Есть два источника одних и тех же объектов. Например, база данных и сервер.
Данные, получаются из кэша БД быстрее, чем с сервера. Но актуальная информация на сервере. Хотим показать пользователю данные с кэша, а потом после прихода информации с сервера показать их.
Решение
Одним из рабочих вариантов - создание
Если не использовать Rx, то решение становится огромным куском кода.
В качестве альтернативы хочу предложить оператор
Читайте подробнее об операторе и изучайте исходный код.
Задача
Есть два источника одних и тех же объектов. Например, база данных и сервер.
Данные, получаются из кэша БД быстрее, чем с сервера. Но актуальная информация на сервере. Хотим показать пользователю данные с кэша, а потом после прихода информации с сервера показать их.
Решение
Одним из рабочих вариантов - создание
PublishSubject, который подписывается на изменение данных, и в который попадает информация из каждого Observable. Если не использовать Rx, то решение становится огромным куском кода.
В качестве альтернативы хочу предложить оператор
Observable.concatEager(observables). Он принимает список Observable, который включает в себя получение данных из кэша и из сети. В результате получение будет запущенно параллельно, и вернутся данные из кэша, затем из сети. Важно помнить о порядке входящих источников. Читайте подробнее об операторе и изучайте исходный код.
Multicursor в Android Studio
#разработка
Сегодня хочу поделиться с вами одним недооцененным инструментом в Android Studio, который увеличивает скорость написания кода и рефакторинга. Этот инструмент Multicursor.
Суть инструмента заключается в выделении нужных, дублированных областей кода и установки курсора в конце каждой выделенной области. Это позволяет одновременно редактировать эти строки. Выделять можно бесконечное количество строк.
Для вызова инструмента выделите часть строки и нажмите
Сейчас эта функция является для меня незаменимым помощников при рефакторинге кода и написании похожего кода. Чтобы лучше понимать всю мощь, прочитайте статью и обязательно попробуйте этот инструмент. Уверен, что вы будете использовать его постоянно.
Используйте все возможности Android Studio для увеличения скорости своей разработки.
#разработка
Сегодня хочу поделиться с вами одним недооцененным инструментом в Android Studio, который увеличивает скорость написания кода и рефакторинга. Этот инструмент Multicursor.
Суть инструмента заключается в выделении нужных, дублированных областей кода и установки курсора в конце каждой выделенной области. Это позволяет одновременно редактировать эти строки. Выделять можно бесконечное количество строк.
Для вызова инструмента выделите часть строки и нажмите
CTRL + G (ALT + J в Windows/Linux). После этого курсор дублируется к такой же строке кода. Сейчас эта функция является для меня незаменимым помощников при рефакторинге кода и написании похожего кода. Чтобы лучше понимать всю мощь, прочитайте статью и обязательно попробуйте этот инструмент. Уверен, что вы будете использовать его постоянно.
Используйте все возможности Android Studio для увеличения скорости своей разработки.
Как отрефакторить ресурсы?
#статьи #разработка
Этап рефакторинга кода — один из важных этапов при разработке проекта. Постепенно приложение обретает всё больше функций, и появляется необходимость оптимизировать старый код.
При этом не всегда понятно, как правильно рефакторить, чтобы ничего не отломалось.
Рекомендую изучить статью, где автор говорит о рефакторинге ресурсов приложения.
Если вкратце, то:
• изменение
• создание тем на основе этих файлов;
• создание стилей и их применение к проекту;
• переименование
Важно помнить, что рефакторинг стоит делать небольшими шагами и сливаться с текущим проектом, чтобы не появилось конфликтов при слиянии.
#статьи #разработка
Этап рефакторинга кода — один из важных этапов при разработке проекта. Постепенно приложение обретает всё больше функций, и появляется необходимость оптимизировать старый код.
При этом не всегда понятно, как правильно рефакторить, чтобы ничего не отломалось.
Рекомендую изучить статью, где автор говорит о рефакторинге ресурсов приложения.
Если вкратце, то:
• изменение
colors.xml и dimens.xml;• создание тем на основе этих файлов;
• создание стилей и их применение к проекту;
• переименование
drawable.Важно помнить, что рефакторинг стоит делать небольшими шагами и сливаться с текущим проектом, чтобы не появилось конфликтов при слиянии.
Немного о перфекционизме
#статьи #дизайн
Сегодня прочитал статью про перфекционизм в дизайне. Задавали ли вы вопрос, почему появляется это явление?
Автор рассказывает о перфекционизме на примере дизайнера Вовы, который сутками вымеряет пиксели в макете. Вскоре работа перестает доставлять удовольствие, появляется изнурение и чувство вины за то, что не можешь нарисовать идеально.
А что же говорить про Android-разработчиков? Возможно, мы тратим время на верстку экранов в маленьких разрешениях, борьбу с поворотами экранов, супер плавную анимацию, а также на идеально красивый код, который полностью покрыт тестами. В результате может появиться неудовлетворенность работой, провал сроков. А если другой разработчик скажет, что код некачественный, то и конфликтом в команде.
А ещё один из недостатков работы с перфекционистом — боязнь делегирования и страх довериться команде. Он считает, что лучше него никто не сделает задачу. Это, опять же, приводит к провалу по срокам.
Думаю, что следует у себя в голове установить рамки дозволенного перфекционизма. Не пишите тест только ради его наличия. Нужно доверять своей команде, общаться с ней и говорить о проблемах, с которыми сталкиваешься. Бывает, что свежий взгляд другого человека на проблему, позволяет мгновенно решить её.
Помните, что нет ничего идеального. Как бы не ужасно это звучало, в природе все неидеально. Посмотрев на свой код через год, то можете ужаснуться от решений, которые использовали.
Ну и последнее. Фильтруйте критику, которую получаете. Бывают люди, которые хотят показать свою правоту, доказать, что они лучше вас, но не указать на ошибки.
А вы перфекционист?
#статьи #дизайн
Сегодня прочитал статью про перфекционизм в дизайне. Задавали ли вы вопрос, почему появляется это явление?
Автор рассказывает о перфекционизме на примере дизайнера Вовы, который сутками вымеряет пиксели в макете. Вскоре работа перестает доставлять удовольствие, появляется изнурение и чувство вины за то, что не можешь нарисовать идеально.
А что же говорить про Android-разработчиков? Возможно, мы тратим время на верстку экранов в маленьких разрешениях, борьбу с поворотами экранов, супер плавную анимацию, а также на идеально красивый код, который полностью покрыт тестами. В результате может появиться неудовлетворенность работой, провал сроков. А если другой разработчик скажет, что код некачественный, то и конфликтом в команде.
А ещё один из недостатков работы с перфекционистом — боязнь делегирования и страх довериться команде. Он считает, что лучше него никто не сделает задачу. Это, опять же, приводит к провалу по срокам.
Думаю, что следует у себя в голове установить рамки дозволенного перфекционизма. Не пишите тест только ради его наличия. Нужно доверять своей команде, общаться с ней и говорить о проблемах, с которыми сталкиваешься. Бывает, что свежий взгляд другого человека на проблему, позволяет мгновенно решить её.
Помните, что нет ничего идеального. Как бы не ужасно это звучало, в природе все неидеально. Посмотрев на свой код через год, то можете ужаснуться от решений, которые использовали.
Ну и последнее. Фильтруйте критику, которую получаете. Бывают люди, которые хотят показать свою правоту, доказать, что они лучше вас, но не указать на ошибки.
А вы перфекционист?
Пик Балмера
#статьи #думы
Слышали ли вы о Пике Балмера? Он был открыт компанией Microsoft в 80-х годах, и утвержается, что при концентрациях алкоголя в крови от 0,129% до 0,138% человек получает «сверхпрограммистские» способности.
Был проверен эксперимент. Набиралась группа программистов, которые писали код на своем любимом языке. Эти языки рангжировали от простых до сложных. Затем, участникам предлагалась доза алкоголя, которая постепенно увеличивалась. Данные о качестве кода тщательно фиксировались учеными. Цель — понять, как алкоголь влияет на способность писать код. Результат на картинке ниже.
Пока ученые пытались разобраться в цифрах, программисты взяли инициативу в свои руки и устраивали подобные мероприятия самостоятельно. Даже появился The Ballmer peak-a-thon, где девизом является фраза “Drink (and hack) for Science!”
Так и действительно, существует ли этот феномен? Стоит ли бежать к начальнику с этой инновационной идеей? На самом деле, есть объяснение.
Дело в работе нашего мозга. Алкоголь притупляет внимание и скорость реакции. Чем больше алкоголя, тем больше эти изменения. Мозг пытается бороться с этим, и старается перераспределить те ресурсы, что у него остались и отсетить не важное. В результате, пока еще соображалка работает, но человек не обращает внимание на всякие мелочи и появляется этот эффект.
Для повышения концентрации и качества работы, побольше отдыхайте, занимайтесь спортом и делайте перерывы на работе, как бы это не было сложно. Замечал, что 2-3 небольших перерыва в день на партию в теннис повышали рабочий ритм, и я ощущал себя менее уставшим.
Больше информации в статье. Там же ссылки на обсуждения и больше научных фактов. Ну и отдыхайте побольше!
#статьи #думы
Слышали ли вы о Пике Балмера? Он был открыт компанией Microsoft в 80-х годах, и утвержается, что при концентрациях алкоголя в крови от 0,129% до 0,138% человек получает «сверхпрограммистские» способности.
Был проверен эксперимент. Набиралась группа программистов, которые писали код на своем любимом языке. Эти языки рангжировали от простых до сложных. Затем, участникам предлагалась доза алкоголя, которая постепенно увеличивалась. Данные о качестве кода тщательно фиксировались учеными. Цель — понять, как алкоголь влияет на способность писать код. Результат на картинке ниже.
Пока ученые пытались разобраться в цифрах, программисты взяли инициативу в свои руки и устраивали подобные мероприятия самостоятельно. Даже появился The Ballmer peak-a-thon, где девизом является фраза “Drink (and hack) for Science!”
Так и действительно, существует ли этот феномен? Стоит ли бежать к начальнику с этой инновационной идеей? На самом деле, есть объяснение.
Дело в работе нашего мозга. Алкоголь притупляет внимание и скорость реакции. Чем больше алкоголя, тем больше эти изменения. Мозг пытается бороться с этим, и старается перераспределить те ресурсы, что у него остались и отсетить не важное. В результате, пока еще соображалка работает, но человек не обращает внимание на всякие мелочи и появляется этот эффект.
Для повышения концентрации и качества работы, побольше отдыхайте, занимайтесь спортом и делайте перерывы на работе, как бы это не было сложно. Замечал, что 2-3 небольших перерыва в день на партию в теннис повышали рабочий ритм, и я ощущал себя менее уставшим.
Больше информации в статье. Там же ссылки на обсуждения и больше научных фактов. Ну и отдыхайте побольше!
Результаты первого месяца
#эксперимент
Пора описать результат первого месяца эксперимента.
Сейчас мы изучили компоненты Clean Architecture. Снова рекомендую для изучения замечательный кукбук. Там можно найти всю информацию для того, чтобы правильно писать приложение.
Мы стараемся придерживаться той стрктуры пакетов, что описана там.
Больше всего сложностей при разработке возникло понимание, что такое View. Точнее, как верно инициализировать. По сути View — элемент архитектуры, которая не должен отвечать за данные, а только получать их, а также передавать реакцию пользователя с экрана. Это интерфейс, который имплементит Activity, Fragment или другие компоненты, отвечающие за вывод информации. Ну и о ней всегда знает только Presenter.
Для взаимодействия между View и Presenter, а также правильным управлением жизненным циклом, рекомендую использовать библиотеку Moxy. Она избавит вас от управления поворотами экрана и другой нудной работы. Думаю, что к ней стоит переходить, когда есть понимание, за что отвечает каждый компонент архитектуры.
Сейчас также выполняется авторизация пользоваться через Firebase. Обернуто это через RxJava 2, что, кстати, получилось быстро. Но это только начало работы с этой огромной библиотекой, поэтому ещё будет много нюансов.
Первая и достаточно распространенная проблема — выполнение длительных операций в main thread. У вас не получится сделать это для получения данных из сети, но Firebase это успешно выполняет. Правильно всегда делать длительные операции в другом потоке. Отличный гайд про потоки в Rx тут.
Из небольших проблем могу выделить дизайн. Пока этот пункт остается открытым, поэтому мы еще не касались верстки.
В общем, разработка проекта идет, и вскоре я дам ссылку на репозиторий, где каждый сможет посмотреть текущий прогресс.
#эксперимент
Пора описать результат первого месяца эксперимента.
Сейчас мы изучили компоненты Clean Architecture. Снова рекомендую для изучения замечательный кукбук. Там можно найти всю информацию для того, чтобы правильно писать приложение.
Мы стараемся придерживаться той стрктуры пакетов, что описана там.
Больше всего сложностей при разработке возникло понимание, что такое View. Точнее, как верно инициализировать. По сути View — элемент архитектуры, которая не должен отвечать за данные, а только получать их, а также передавать реакцию пользователя с экрана. Это интерфейс, который имплементит Activity, Fragment или другие компоненты, отвечающие за вывод информации. Ну и о ней всегда знает только Presenter.
Для взаимодействия между View и Presenter, а также правильным управлением жизненным циклом, рекомендую использовать библиотеку Moxy. Она избавит вас от управления поворотами экрана и другой нудной работы. Думаю, что к ней стоит переходить, когда есть понимание, за что отвечает каждый компонент архитектуры.
Сейчас также выполняется авторизация пользоваться через Firebase. Обернуто это через RxJava 2, что, кстати, получилось быстро. Но это только начало работы с этой огромной библиотекой, поэтому ещё будет много нюансов.
Первая и достаточно распространенная проблема — выполнение длительных операций в main thread. У вас не получится сделать это для получения данных из сети, но Firebase это успешно выполняет. Правильно всегда делать длительные операции в другом потоке. Отличный гайд про потоки в Rx тут.
Из небольших проблем могу выделить дизайн. Пока этот пункт остается открытым, поэтому мы еще не касались верстки.
В общем, разработка проекта идет, и вскоре я дам ссылку на репозиторий, где каждый сможет посмотреть текущий прогресс.
Android Resource Usage Count
#плагин
Как только проект становится большим, то появляются ресурсы, которые не используются, но по-прежнему остаются в проекте.
В итоге эти ресурсы засоряют проект, но удалить их сразу не так просто: если использовать встроенный инструмент для рефакторинга, то он удалит неиспользуемые ресурсы. Однако, он оставит их, если они используются хотя бы один раз.
Предположим, что у нас один и второй разработчик добавил красный цвет. Достаточно одного красного, но оставаться в проекте будет несколько.
Чтобы упростить рефакторинг ресурсов, существует отличный плагин: Android Resource Usage Count. Он автоматически подсчитывает количество использования ресурсов и добавляет их количество слева. Если цвет не используется, то число помечается серым, если один раз — синим, и если несколько, то красным.
В итоге стоит задуматься: надо ли вам засорять приложение ресурсами, которые используются один раз?
На мой взгляд плагин работает хорошо, хоть иногда и не справляется с большим количеством строк. К установке рекомендую.
#плагин
Как только проект становится большим, то появляются ресурсы, которые не используются, но по-прежнему остаются в проекте.
В итоге эти ресурсы засоряют проект, но удалить их сразу не так просто: если использовать встроенный инструмент для рефакторинга, то он удалит неиспользуемые ресурсы. Однако, он оставит их, если они используются хотя бы один раз.
Предположим, что у нас один и второй разработчик добавил красный цвет. Достаточно одного красного, но оставаться в проекте будет несколько.
Чтобы упростить рефакторинг ресурсов, существует отличный плагин: Android Resource Usage Count. Он автоматически подсчитывает количество использования ресурсов и добавляет их количество слева. Если цвет не используется, то число помечается серым, если один раз — синим, и если несколько, то красным.
В итоге стоит задуматься: надо ли вам засорять приложение ресурсами, которые используются один раз?
На мой взгляд плагин работает хорошо, хоть иногда и не справляется с большим количеством строк. К установке рекомендую.
Какой интерфейс лучше?
#думы #дизайн
Если мы обратимся к Википедии, то найдем следующее определение интерфейса:
Интерфейс — «общая граница» между отдельными системами, через которую они взаимодействуют; совокупность средств и правил, обеспечивающих взаимодействие отдельных систем.
Если говорить простыми словами, то это прослойка, которая позволяет взаимодействовать разным системам. Возникает вопрос: какой интерфейс лучше всего?
Недавно прочитал статью, в которой рассказывали о книге Генриха Альтшуллера «Найти идею. Введение в ТРИЗ - теорию решения изобретательских задач». Автор доказал, что процесс изобретательства и творчества управляем и подвергается определенным законам.
Одним из тезисов, который там есть говорит о том, что технический объект идеален, когда его нет, но необходимая функция выполняется.
Если мы применим это определение к интерфейсу, то идеальный интерфейс — это такой, которого нет (или его не замечают), но он помогает дойти до нужной цели.
Например, недавний магазин Amazon, который работает без касс. Покупатель сам выбирает себе товары, кладет их в корзину и уходит с магазина. Деньги автоматически списываются с его счёта.
А что будет идеальным интерфейсом в мобильных приложениях?
Думаю, что сейчас можно только приблизиться к нему. Идеальным он станет тогда, когда человек сможет управлять телефоном, например, при помощи мысли.
Если говорить о приближенных к идеальным интерфейсам, то я вижу Google Play Music. На рабочий стол можно добавить виджет «Мне повезет», который позволит включить музыку за один клик. Кстати, голосовые помощники тоже делают интерфейс приближенным к идеальным.
Помните, что создавать сложно — легко. А сделать, чтобы было легко — дико сложно.
#думы #дизайн
Если мы обратимся к Википедии, то найдем следующее определение интерфейса:
Интерфейс — «общая граница» между отдельными системами, через которую они взаимодействуют; совокупность средств и правил, обеспечивающих взаимодействие отдельных систем.
Если говорить простыми словами, то это прослойка, которая позволяет взаимодействовать разным системам. Возникает вопрос: какой интерфейс лучше всего?
Недавно прочитал статью, в которой рассказывали о книге Генриха Альтшуллера «Найти идею. Введение в ТРИЗ - теорию решения изобретательских задач». Автор доказал, что процесс изобретательства и творчества управляем и подвергается определенным законам.
Одним из тезисов, который там есть говорит о том, что технический объект идеален, когда его нет, но необходимая функция выполняется.
Если мы применим это определение к интерфейсу, то идеальный интерфейс — это такой, которого нет (или его не замечают), но он помогает дойти до нужной цели.
Например, недавний магазин Amazon, который работает без касс. Покупатель сам выбирает себе товары, кладет их в корзину и уходит с магазина. Деньги автоматически списываются с его счёта.
А что будет идеальным интерфейсом в мобильных приложениях?
Думаю, что сейчас можно только приблизиться к нему. Идеальным он станет тогда, когда человек сможет управлять телефоном, например, при помощи мысли.
Если говорить о приближенных к идеальным интерфейсам, то я вижу Google Play Music. На рабочий стол можно добавить виджет «Мне повезет», который позволит включить музыку за один клик. Кстати, голосовые помощники тоже делают интерфейс приближенным к идеальным.
Помните, что создавать сложно — легко. А сделать, чтобы было легко — дико сложно.
Как создать красивые анимации?
#дизайн #статьи
Уже не раз на этом канале упоминалось то, что в современных приложениях важны анимации. Без них приложение теряет живость и отзывчивость, ну и, конечно, красоту.
Недавно на глаза попались статьи, авторы которых дизайнеры.
В первой статье говорится об анимациях движения. Любое приложение состоит из многих двигающихся элементов, поэтому важно сделать их максимально плавными. Давая кучу примеров, автор говорит о принципах построения таких анимаций. Раньше не задумывался о том, что анимации подвержены определенным законам.
Во второй статье автор сравнивает хорошие и отличные анимации. О том, как сделать переходы между экранами, открытие списков и показ всплывающих меню идеальными, вы прочитаете в этой статье.
Эти две статьи сделаны без привязки к операционной системе. Так что эти принципы можно использовать для создания прекрасных интерфейсов не только на Android.
#дизайн #статьи
Уже не раз на этом канале упоминалось то, что в современных приложениях важны анимации. Без них приложение теряет живость и отзывчивость, ну и, конечно, красоту.
Недавно на глаза попались статьи, авторы которых дизайнеры.
В первой статье говорится об анимациях движения. Любое приложение состоит из многих двигающихся элементов, поэтому важно сделать их максимально плавными. Давая кучу примеров, автор говорит о принципах построения таких анимаций. Раньше не задумывался о том, что анимации подвержены определенным законам.
Во второй статье автор сравнивает хорошие и отличные анимации. О том, как сделать переходы между экранами, открытие списков и показ всплывающих меню идеальными, вы прочитаете в этой статье.
Эти две статьи сделаны без привязки к операционной системе. Так что эти принципы можно использовать для создания прекрасных интерфейсов не только на Android.
Новый топ статей из Medium.
#статьи #medium
1) Модули, модули повсюду. — (8 минут)
В последнее время часто попадаются статьи, где описывается модульная архитектура. Такой подход значительно увеличивает скорость сборки приложения и делает простым повторное использование компонентов. Автор делится опытом о рефакторинге приложения в сторону модульной архитектуры.
2) Flutter: Routes and Navigation. — (6 минут)
Сейчас у сообщества на слуху Flutter. Уверен, что вы слышали об этом фреймворке, который позволяет писать кроссплатформенные приложения. Есть много статей о написании приложений, и эта статья поможет вам написать простое приложение на Flutter, что позволит больше вникнуть в разработку на нем.
3) Анатомия аналитики от Google. — (20 минут)
Для того, чтобы делать продукт лучше, придумано много инструментов для аналитики. Одним из самых популярных инструментов для аналитики является Firebase и Google Analytics. В статье автор делится подробным описанием этого инструмента. Возможно, вы используете не всю мощь Firebase. Для себя узнал о BigQuery.
#статьи #medium
1) Модули, модули повсюду. — (8 минут)
В последнее время часто попадаются статьи, где описывается модульная архитектура. Такой подход значительно увеличивает скорость сборки приложения и делает простым повторное использование компонентов. Автор делится опытом о рефакторинге приложения в сторону модульной архитектуры.
2) Flutter: Routes and Navigation. — (6 минут)
Сейчас у сообщества на слуху Flutter. Уверен, что вы слышали об этом фреймворке, который позволяет писать кроссплатформенные приложения. Есть много статей о написании приложений, и эта статья поможет вам написать простое приложение на Flutter, что позволит больше вникнуть в разработку на нем.
3) Анатомия аналитики от Google. — (20 минут)
Для того, чтобы делать продукт лучше, придумано много инструментов для аналитики. Одним из самых популярных инструментов для аналитики является Firebase и Google Analytics. В статье автор делится подробным описанием этого инструмента. Возможно, вы используете не всю мощь Firebase. Для себя узнал о BigQuery.
Управление проектом
#эксперимент
В рамках нашего эксперимента хочу поделиться сервисом, который мы используем для работы в нашей небольшой команде. Это сервис Trello.
Весь интерфейс Trello выстроен на основе канбан-досок. На самом деле за непонятным названием скрывается логичная и простая доска с карточками, где есть несколько колонок. В нашем случае их 4: нужно сделать, в процессе, готово и проверено.
Trello очень полезный сервис для построения проектов в небольших командах. Для удобства есть мобильное приложение и куча возможностей форматирования как в задачах, так и в комментариях.
Единственным существенным недостатком является отсутствие спринтов. В альтернативах, например, в Jira и YouTrack есть такая возможность. Сейчас те задачи, которые выполнены и проверены отправляются в архив. Возможно, в будущем мы перейдем на альтернативу, но пока возможностей Trello достаточно.
Кстати, если вы хотите следить за нашим прогрессом, то вот наша доска.
Как всегда, я рад ответить на ваши вопросы.
А каким сервисом вы пользуетесь для управления проектами у себя в команде?
⚪️ — Trello;
⚫️ — Jira;
🔴 — YouTrack;
🔵 — другие.
#эксперимент
В рамках нашего эксперимента хочу поделиться сервисом, который мы используем для работы в нашей небольшой команде. Это сервис Trello.
Весь интерфейс Trello выстроен на основе канбан-досок. На самом деле за непонятным названием скрывается логичная и простая доска с карточками, где есть несколько колонок. В нашем случае их 4: нужно сделать, в процессе, готово и проверено.
Trello очень полезный сервис для построения проектов в небольших командах. Для удобства есть мобильное приложение и куча возможностей форматирования как в задачах, так и в комментариях.
Единственным существенным недостатком является отсутствие спринтов. В альтернативах, например, в Jira и YouTrack есть такая возможность. Сейчас те задачи, которые выполнены и проверены отправляются в архив. Возможно, в будущем мы перейдем на альтернативу, но пока возможностей Trello достаточно.
Кстати, если вы хотите следить за нашим прогрессом, то вот наша доска.
Как всегда, я рад ответить на ваши вопросы.
А каким сервисом вы пользуетесь для управления проектами у себя в команде?
⚪️ — Trello;
⚫️ — Jira;
🔴 — YouTrack;
🔵 — другие.
Stream API в Android
#советы #разработка
С недавних пор одной из моих любимых библиотек стала Lightweight Stream API. Она позволяет использовать возможности Stream API на Java 6 и 7, причем добавляет несколько новых фукнций. Библиотеку можно найти тут.
В чем же удобство Stream при разработке? Для себя я выделил несколько моментов:
1) Обработка null, используя
2) Иная обработка списков. Теперь можно использовать
3) Работа с
Ну и напоследок кусок кода, который мне очень нравится. Когда идет написание кастомной View и добавление атрибутов к ней, то появляется код, который выглядит не экстетично. Заменив всё на Stream API получим такую красоту.
Исходный код
#советы #разработка
С недавних пор одной из моих любимых библиотек стала Lightweight Stream API. Она позволяет использовать возможности Stream API на Java 6 и 7, причем добавляет несколько новых фукнций. Библиотеку можно найти тут.
В чем же удобство Stream при разработке? Для себя я выделил несколько моментов:
1) Обработка null, используя
Optional. Теперь можно уйти от проверки на null в большинстве объектов. Для этого надо воспользоваться функцией Optional.ofNullable()2) Иная обработка списков. Теперь можно использовать
Stream для работы со списком. После этого доступна куча операторов, которые вы можете найти по ссылке выше. В результате получаем изящную цепочку из операторов. 3) Работа с
Throwable. Теперь можно заменить try/catch на отдельный оператор, который легко включается в цепочку вызовов. Ну и напоследок кусок кода, который мне очень нравится. Когда идет написание кастомной View и добавление атрибутов к ней, то появляется код, который выглядит не экстетично. Заменив всё на Stream API получим такую красоту.
Исходный код
AttributeLoader тут.