От оптимизаций до Machine Learning: интервью с автором Android High Performance Programming |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-10-24 15:56 Почти год назад вышла книга Android High Performance Programming. Книжка классная – но требующая комментариев. Скоро автор прилетит в Россию на конференцию Mobius 2017 Moscow, и с ним можно будет пообщаться вживую. Чтобы скоротать ожидание, давайте пообщаемся с Энрике в формате хабро-интервью.
Java или Kotlin? Как писать быстрый код? Можно ли в мобильном приложении использовать Tensorflow и другое машинное обучение? Срочно жмите кнопку «читать дальше»! ? Итак, в гостях у нас Enrique L?pez Ma?as (Энрике Лопес Маньяс) — независимый IT-консультант и разработчик, обладатель звания Android Google Developer Expert. Занимается мобильными технологиями и программированием более 10 лет, входит в десятку самых активных в Германии участников сообщества Java Open Source. Последнее время «заболел» Big Data и ML-технологиями, о чем мы с ним тоже сейчас кратко поговорим. — Есть множество различных рекомендаций по оптимизации Android-приложений. Одни касаются кода, другие и вовсе относятся не только к платформе Android. Что, по вашему мнению, является самой распространенной ошибкой? Энрике Маньяс: Люди, разрабатывающие под Android, больше фокусируются на фреймворке, чем на языке. И сейчас, после активного освоения Kotlin, они делают это даже чаще, чем раньше. По моим ощущениям, большинство ошибок закладывается на уровне кода. И именно тут находится большое пространство для различных улучшений. В качестве примера можно привести утечки памяти. — Есть ли у вас какая-то любимая настройка в компиляторе или IDE, которую вы могли бы порекомендовать установить «по умолчанию»? Энрике Маньяс: Первым делом это Dracula mode. Я не могу работать с ярким экраном — глаза сразу устают. Кроме этого, есть еще пара трюков. Можно исключить из поиска директории temp и build. Это позволит сразу сэкономить много времени. Установка «Constant Conditions & Exceptions» вместе со строгими установками Error и Nullable — это хорошая отправная точка для того, чтобы избавится от багов. А семантическая подсветка помогает работать продуктивнее. — Есть ли у вас какая-то любимая утилита? Отладчик Lint или что-то вроде gfxinfo, systrace? Энрике Маньяс: Lint — это для каждодневного использования. Мне нравится SourceTree. Не только для визуализации бренчей и истории, но и для основных операций (add, commit, diff, и т.п.). Еще я обнаружил, что с консолью работать эффективнее. Да и весь Performance Profiling Tools kit от Android полезен, когда дело доходит до отладки. Думаю, что и battery profiling многие недооценивают зря. — Был очень удивлен, узнав, что ENUM-ы на Android занимают гораздо больше памяти, чем static-константы. Можете удивить чем-нибудь еще? Энрике Маньяс: Вот это еще может стать для вас сюрпризом: когда вы строите свой layout и добавляете его к activity, используя метод Activity.setContentView(), множество других представлений также добавляются к иерархии для создания желаемого UI. Владелец вьюшки (DecorView), как правило, не нужен, так как он перекрывается вашим собственным лейаутом. Вы можете избавиться от него и повысить производительность. — Можете ли вы разделить советы по улучшению производительности на какие-то группы? Что-то вроде: утечки памяти, многопоточность, верстка макета, работа с сетью/предварительная выборка данных… Энрике Маньяс: В своей книге я разделил рекомендации по оптимизации производительности на разные категории. Их можно взять за основу. Создание макета и построение эффективных представлений — это одна из групп. Память (включая, но не ограничиваясь утечками, JVM, JIT, лучшие практические приемы), многопоточность в Android, работа с сетью, безопасность. Закончить этот список можно работой с батареей. — Не хайпа ради. Просто интересны ваши предпочтения: Java/Kotlin, Kotlin или чистый Java. Что вы предпочитаете для разработки под Android и почему? Энрике Маньяс: Java родилась в 1995. После этого в свет вышло несколько версий, в которых наращивались и улучшались все первоначальные возможности. Сейчас мы имеем восьмую версию. 22 года для языка программирования можно считать вечностью, учитывая то, как сейчас развиваются технологии. И на данный момент некоторые его флаги трудно игнорировать. Как разработчик, я часто экспериментирую с разными языками. Scala является самым подходящим примером того, как язык может разрешить некоторые проблемы с флагами Java. Переломным моментом был тот, когда я увидел в действии Swift. Android нативно поддерживает весь набор функций Java 7, а Java 8 — лишь частично. И это не добавляет ему очков в сравнении с другими платформами. Однако этот пробел способен заполнить Kotlin. Kotlin — это современный язык (версия 1.0 была выпущена только в феврале 2016). Основной его задачей было не только закрыть недостатки Java, как это делает Scala, но и решить некоторые из текущих проблемных моментов (например, скорость компиляции). Если говорить о моих предпочтениях, то для Android это Kotlin. К сожалению, в реальном мире существует множество таких вещей как legacy-код, дедлайны… Потому не всегда есть возможность полноценного выбора. — Одна из официальных рекомендаций — выбор static вместо virtual. В этом случае вызовы будут на 15-20% быстрее. Но статические классы плохо подходят для тестирования и для последующих архитектурных изменений. Выходит, что static является совсем не злом, если говорить о разработке под Android? Энрике Маньяс: Идея предпочтительного использования static основана на том, что если ваша функция не может изменить какой-либо объект, то вы вполне можете сделать ее статичной, так как она не изменяет внутреннее состояние. Это также сказывается и на скорости исполнения. — Если у меня есть какое-то обычное мобильное приложение (не игра или какое-то приложение со своей собственной графикой). Должна ли меня как-то волновать поддержка 60 FPS? Энрике Маньяс: Вы всегда должны добиваться скорости отрисовки в 60 FPS в вашем мобильном приложении. Это означает, что экран должен обновляться с частотой 60 раз в секунду или раз в 16,6667 мс. Сложность может вызвать слишком частая прорисовка иерархии — то есть большое количество циклов CPU. Есть несколько вещей, которых мы должны придерживаться, и частота обновления — как раз одна из них. — В фильме «Сфера» была показана возможность найти любого человека на земле с помощью социальной сети. Как по мне, этот сценарий был актуален году эдак в двухтысячном. Как вы думаете, можно ли обучать машины с помощью социальной сети? Можете рассказать что-нибудь о интересных способах тренировки NN с ML или о том, что мы можем получить в будущем? Энрике Маньяс: Я нахожусь в восторге от тех художественных элементов, какие выдает, например, фреймворк Magenta. ML и NN всегда были сфокусированы на практических задачах, таких как распознавание изображений. Теперь же они начинают справляться с задачами, которые ранее были под силу только людям. В некоторых экспериментах (тут я рекомендую вам ознакомиться с книгой «Хомо Деус: Краткая история завтрашнего дня» за авторством Юваль Ной Харари) многие люди не могут отличить музыку, созданную машиной, от музыки, написанной человеком. Тот момент, когда машина сможет пройти тест Тьюринга в области художественной деятельности, можно смело называть наступлением сингулярности. — Как далеко мы сейчас находимся от того момента, когда программирование под мобильные устройства станет таким же простым, как и HTML? Что Вы думаете о приложениях, которые полностью состоят из интентов или используют облачные сервисы? О том способе создания приложений, когда разработчик просто комбинирует несколько сервисов и получает готовое приложение. Иногда встречаются приложения, которые на 80% состоят из библиотек, и только оставшиеся 20% — это код. Как перемещение в облако может затронуть производительность мобильных приложений? Энрике Маньяс: По мере появления новых возможностей и требований, а также увеличения мощностей аппаратных средств, процесс разработки становится все более сложным. Хотя, как и было сказано, компании, производящие софт, делают свое дело довольно хорошо (здесь я думаю в первую очередь о IntelliJ и их первоклассных инструментах). — Machine learning в большинстве случаев ассоциируется с распознаванием изображений и интеллектуальным обучением. Однако его потенциал гораздо шире. Какие сценарии вы считаете более подходящими под мобильные возможности Tensorflow? Энрике Маньяс: Использовать TensorFlow на мобильных устройствах имеет смысл, если вы хотите получить интерактивный эффект вместо отправки необходимых для обработки данных через REST API куда-то еще. Основные примеры, которые предоставляет Google, — это изображения. И в TensorFlow появляется смысл, когда файлы изображений имеют большой объем. Иначе их приходится отправлять на обработку (и получать обратно) через интернет — а это замедляет работу с ними. Если вы сможете обработать их на мобильном устройстве, будет эффективнее. Но есть также и другие примеры. Подумайте о переводах в режиме реального времени. Вероятно, вы хотели бы обрабатывать все локально, вместо того, чтобы отправлять информацию на сервер. Или же создание музыки и художественных произведений, как это уже может делать Magenta. ML уже сейчас зажигает и, конечно же, принесет множество новых возможностей в ближайшем будущем. Источник: habrahabr.ru Комментарии: |
|