Блог
«Стал уверенно искать работу где-то через полгода»
— Расскажи, пожалуйста, о себе. Где ты получил высшее образование?
— Я изучал технологии машиностроения в Уральском политехническом колледже, на бюджетном отделении. Мне близки технические науки. Потом устроился оператором станков на завод. Работал успешно, и начальство предложило мне стать технологом-программистом. Конечно, я не отказался, и всему научился прямо на рабочем месте.
— Что делает технолог-программист?
— Я писал управляющий код для станков. Для этого используется специализированное программное обеспечение, которое входит в группу CAMCAD. Станки режут, точат, изготовляют детали по чертежам. Я проработал в этой сфере пять лет, поменял несколько мест.
— Почему решил сменить профессию?
— На определённом этапе в моей работе потребовались знания JavaScript и HTML. Я начал изучать веб-разработку самостоятельно и постепенно понял, что я могу сменить сферу деятельности. Такие мысли появились и из интереса к программированию, и из-за того, что на заводе платили мало. На жизнь хватало, но хотелось большего.
Я скачивал книжки, смотрел видеоуроки, много читал. HTML освоил достаточно легко, а с JavaScript всё было сложнее — это же мой первый язык программирования. Потом понял, что информации в интернете недостаточно, к тому она плохо систематизирована. Поэтому задумался о том, чтобы найти курсы, где все сложные вопросы разбирались бы шаг за шагом. Кроме того, у меня бы появилась строчка об образовании в резюме.
— Сложно было совмещать учёбу с работой?
— Было просто, пока работал на старой работе, на заводе. В 95% случаев я успевал вовремя смотреть вебинары и делать практическое задание. Но вот когда устроился программистом, стало гораздо сложнее.
— Как ты нашёл работу по своей новой специальности, PHP-разработчика?
— Я почувствовал в себе нужную уверенность где-то через полгода после начала учёбы. Разместил резюме на hh.ru. Прошёл три-четыре собеседования с тестовыми заданиями в разных местах и устроился на нынешнюю работу — в екатеринбургскую компанию «Центр развития молодёжи». Месяц испытательного срока трудился удалённо, а потом вышел на постоянную работу в офис.
И вот тогда учиться стало гораздо сложнее. Работа отнимала куда больше сил и внимания, приходилось разбираться в новых задачах, в том числе дома. Но с тех пор прошёл год, и сейчас уже чувствую себя гораздо увереннее.
— Как адаптировался на новом месте и в новой профессии?
— Адаптироваться к работе было нетрудно, мне сложнее знакомиться с коллегами. Но они оказались хорошими людьми, меня тепло приняли, и я очень быстро втянулся.
— В чём состояла первая задача, которую тебе дали?
— Это был массовый редизайн небольшой части личного кабинета учителя на одном из наших образовательных проектов. Я справился со всем сам, хотя и пришлось повозиться. Сейчас, кстати, я бы выполнил эту задачу немного по-другому.
— Ты уже закончил обучение, но наверняка продолжаешь развиваться?
— Да, постоянно учусь, ведь всё запомнить невозможно, и на работе всегда есть вопросы, связанные то с PHP, то c JavaScript, то с HTML. Приходится подсматривать в справочники.
И для себя изучаю новые технологии, фреймворки, которые пригодятся в будущем. В свободное время делаю свои маленькие проекты. Это для меня лучший отдых, потому что мне действительно интересно.
— Чем занимается компания, где ты работаешь?
— «Центр развития молодёжи», или CERM.ru, — это образовательная онлайн-платформа с конкурсами-исследованиями для школьников, веб-тренажёрами по разным предметам, учебными пособиями, семинарами и конференциями для учителей.
— В офисе нравится работать или предпочёл бы удалённо?
— Насчёт удалённой работы я пока не уверен — только если взять небольшую подработку. Полностью переходить не готов — и опыта мало, и самодисциплина, честно говоря, хромает.
— Выросли ли доходы после смены профессии?
— Да, я доволен. Получать стал примерно в полтора раза больше. И очень удобно, что офис рядом с домом. Раньше до завода приходилось добираться целый час. Работа нормированная, вечерами мы не задерживаемся. Только если что-то очень срочное, можем на пару часов дольше пробыть в офисе, но такое бывает очень редко.
— Какой стек технологий ты используешь сейчас в работе?
— Нативные языки веб-разработки, то есть JS и PHP. Используем JS ES5, PHP 7, MySQL. Плюс немного мелких библиотек для фронт- и бэк-разработки.
— Какие у тебя планы на развитие?
— Планирую изучить Vue.js и связанные с ним библиотеки. Плюс укреплять знания в вебе.
Хотите узнать больше о выпускниках факультета веб-разработки GeekBrains? Вот их истории:
- Как я за 2 года прошел путь от ученика до веб-разработчика. Обучение давалось мне тяжело, но это того стоило.
- Поиск себя и быстрое погружение в веб-разработку: история Ильи Курбакова, который в 25 лет решил кардинально поменять направление в своей карьере
- Код пульсирует в мозгу и течет по венам: история Артема Шашкова
Перспективы AR: зачем дополнять реальность
Дополненная реальность, в отличие от виртуальной, не перемещает пользователя в цифровое измерение, она позволяет перенести практически всё что угодно в окружающую действительность. То есть, по сути, меняет мир в режиме реального времени, пусть и ненадолго. Футуролог Робер Скоубл предсказывает, что через три года AR будет использовать весь мир. Осталось разобраться, для чего может пригодиться дополненная реальность.
Привлечение посетителей
На один из самых очевидных способов использования дополненной реальности намекает всё тот же PokemonGo. Когда игра вышла, многие ТРЦ, кафе, рестораны организовали у себя покестопы — необходимые для тренеров остановки. Люди шли на точку, чтобы воспользоваться функциями игры, и по дороге совершали покупки.
При умелом подходе не обязательно использовать чужие игры, чтобы привлечь посетителей. Можно устраивать охоту за сокровищами в рамках сезонных распродаж или сделать покупки более персонализированными. Например, Ikea уже предложила покупателям возможность «примерить» мебель и другие крупные товары в своём интерьере с помощью приложения дополненной реальности.
Эмоциональное воздействие
Дополненная реальность может использоваться для продвижения товаров и услуг в разных сферах, если она создает эмоциональную связь между продукцией и потребителями. Это происходит с помощью демонстрации изделий и разработок в привычной для покупателей среде. Магазины одежды могут предлагать виртуальные примерочные, разработчики игр — «оживлять» персонажей в домах покупателей, туристические компании — отправить клиента в демонстрационный тур на 5–10 минут.
Обучение
Дополненная реальность даёт возможность по-другому взглянуть на образование, так как позволяет моделировать реальные ситуации. Например, будущее рабочее место можно воссоздать прямо в классе. Ученикам продемонстрируют, как с задачей справляется опытный специалист.
Технологию также можно научить показывать инструкции к оборудованию, если на него навести смартфон или специальное устройство. Это может быть перспективным при подготовке системных администраторов, сетевых инженеров.
Логистика
С помощью дополненной реальности упрощается работа на складах. Технология позволяет в режиме реального времени сканировать поступающие на полки предметы и вносить их в память системы. Таким образом, программа будет эффективнее человека определять, что где находится.
Компания DHL тестирует мобильные AR-системы, обеспечивающие распознавание объектов в реальном времени, считывание штрих-кодов и навигацию внутри помещений. Сотрудник со специальным прибором может легко найти коробки, не видимые невооружённым глазом, и построить наиболее оптимальный маршрут. Это сокращает время поисков нужного предмета и когнитивную нагрузку.
Удалённое сотрудничество
Дополненная реальность может помочь коллегам взаимодействовать по проектам, и для этого не обязательно находиться в одном офисе. Так, разработчики могут видеть один и тот же код и друг друга таким образом, что кажется, будто они сидят бок о бок. Технология также упрощает топ-менеджерам контроль за подчинёнными.
Дизайн
Дизайнеры уже оценили технологию дополненной реальности, так как она позволяет мгновенно увидеть, как разработка будет смотреться в реальном окружении. Больше не нужно объяснять заказчикам, что именно обозначают чертежи и визуализации. Чем доступнее будет технология AR, тем более широко она будет применяться в дизайне, сначала в крупных компаниях, затем в каждой дизайн-студии.
Связь нового поколения
Ещё недавно даже видеозвонки казались элементом фантастики, но сейчас пришло время следующего этапа развития средств связи. Разработчики предсказывают появление 3D-аватаров, с помощью которых можно будет обеспечить достаточно реалистичное присутствие собеседника во время разговора. Этот вариант использования дополненной реальности пригодится в бизнес-процессах и будет неоценим при коммуникациях между членами семьи, возлюбленными, друзьями.
Хирургия
Уже в ближайшее время дополненная реальность позволит хирургам проводить операции без больших разрезов. Врач будет точно знать, где находится проблемная область, без обширного доступа к месту вмешательства. AR используется для создания трёхмерной модели тела пациента на основании показателей КТ и МРТ. Благодаря этому хирург видит место работы до того, как возьмёт в руки скальпель.
Дополненная реальность также помогает просчитать риски и понять, что может пойти не так. Это особенно важно для неопытных хирургов и операций с высоким риском, например, на мозге.
Впрочем, нельзя сказать, что это вопрос ближайшего будущего. Технологии развиваются быстро, а медицина остаётся достаточно консервативной отраслью.
Навигация
На армейских самолётах и вертолётах данные уже выводятся на лобовое стекло. Это даёт лётчику возможность постоянно контролировать ситуацию, не отвлекаясь на приборную панель. Эксперты предсказывают, что технология перспективна и в ближайшее время будет внедряться и в гражданских транспортных средствах.
Спасательные операции
Дополненная реальность может облегчить работу спасателей. В России разработан шлем для работы в задымлённых помещениях. Благодаря головному убору, специалист знает, где находятся его коллеги, может обмениваться с ними изображениями окружающей местности, передавать данные в координационный центр.
Компания Mercedes ранее представила разработку Rescue Assist, предназначенную для спасения пострадавших в ДТП. Система определяет, как разрезать транспортное средство, чтобы эвакуировать водителя и пассажиров из повреждённого автомобиля.
Культурное просвещение
Самый простой способ использования дополненной реальности для просвещения — внедрение технологии в музеях. Посетителю не нужен экскурсовод или аудиогид, чтобы подробнее узнать об экспонате, достаточно навести на него смартфон, и вся нужная информация окажется на экране. Но на этом учреждения культуры не останавливаются.
Дарвиновский музей ещё в 2014 году предложил посетителям «оживить» галапагосскую черепаху, льва, антилопу в витринах, понаблюдать за ними, погладить и сфотографироваться на память.
Тем, кто всё ещё считает дополненную реальность элементом развлечения, стоит обратить внимание на интерес к технологии признанных пионеров IT-сферы. За первенство в отрасли конкурируют Apple, Google, Microsoft, Facebook. Аналитики считают, что в 2021 году рынок AR может вырасти до 200 млрд долларов.
По прогнозу аналитиков App Annie, прорыв в реализации потенциала дополненной реальности будет сделан уже в этом году. Правда, пока речь идёт в основном о мобильных приложениях, наслаивающих контекстную информацию на картинку реального мира. А футуролог Бретт Кинг считает, что технологии развиваются так быстро, что ближайшие 20 лет принесут человечеству гораздо больше изменений, чем предыдущие 250.
Как создать приложение для Android самому
Мобильная разработка развивается быстрыми темпами, но несмотря на более чем десятилетний путь, можно с уверенностью говорить, что разработка мобильных приложений и вся индустрия в целом находятся в самом начале своего пути. Далеко не у всех в мире есть смартфоны, далеко не все области применения и использования исследованы и раскрыты. В будущем обязательно появятся новые направления в разработке, отрасль будет расти вместе с востребованностью мобильных разработчиков.
Уже несколько лет на рынке разработки приложений под Андроид спрос превышает предложение, и такое состояние рынка сохранится в ближайшие годы. Если говорить о специфике разработки, то речь здесь идёт не только о смартфонах и планшетах. Каждый сможет найти направление себе по вкусу: носимая электроника, Android TV, Android в автоиндустрии, дополненная и виртуальная реальность, интернет вещей...
Но наиболее актуальной и востребованной сегодня является именно разработка мобильных приложений под Android. В этой статье я расскажу, как создать приложение для Андроид с нуля и какие инструменты вообще для этого понадобятся.
Разработка андроид приложений: минимальный набор знаний
На самом деле требований здесь немного, но глубина познаний в нужных областях должна постоянно расти. Вот чем очень не помешает овладеть:
- Языками программирования Java или Kotlin;
- Платформой Android Studio для разработки на платформе Android;
- Git;
- Основными библиотеками, которые вам сильно облегчат жизнь: Retrofit (для получения данных из интернета), Glide (для загрузки изображений)
- Архитектурными компонентами Андроид (чтобы писать чистый и надёжный код);
- Умением писать приложение в архитектуре MVP или MVVM (для надёжности приложения, его поддержки и развития).
На чём писать приложения для Android
В принципе для разработки нужна только Android Studio, которую можно бесплатно скачать с официального сайта. Это лучшая среда разработки андроид приложений из существующих на рынке. Подойдёт любая операционная система (Mac OS, Windows, Linux). Что касается аппаратной части, желательно иметь процессор не старше пяти лет и 8 гигабайт оперативной памяти (+ 1,5 ГБ свободного места на диске).
Если вы не знаете ничего о программировании и имеете только жгучее желание создавать, для начала нужно выучить хотя бы один язык программирования. На данный момент написать приложение для Android можно на Java или на Kotlin. Предпочтительный язык — Kotlin, но если вы планируете стать профессиональным разработчиком, то Java вам нужно хотя бы уметь «читать» (а лучше и писать на ней). Эти языки очень похожи, работают по одинаковым принципам и имеют очень похожий синтаксис. У нас на факультете Android-разработки мы начинаем изучать Java, а в середине обучения переходим на Kotlin. Так выпускник оказывается полностью подготовлен к профессии андроид-разработчика в плане языков программирования.
Чтобы с удобством изучать Java, установите среду разработки на Джаве — IntelliJ Idea Community Edition. Это бесплатная программа, лучшая на рынке. Инструкцию по установке можно найти в конце этой статьи, в дополнительных материалах.
Устанавливаем Git для хранения кода
Git — это полезный инструмент, который вам как разработчику рано или поздно понадобится. С его помощью можно хранить разные версии вашего приложения на компьютере или в облаке. Скачайте, установите его, а также прочитайте первые несколько глав из руководства. Достаточно первых трёх глав (Введение, Основы, Ветвление), чтобы освоиться с самыми полезными функциями:
После установки Git вы сможете сохранять разные версии кода вашего андроид-приложения на компьютере или в облаке:
Среда разработки андроид-приложений
Если вы уже освоились с Джавой или Котлином, можно переходить непосредственно к разработке андроид-приложений. Для этого нам понадобится Android Studio. Если у вас уже стоит Git, то к нему можно подключиться как показано на скриншоте выше.
Если вам по какой-то причине не нравится Android Studio, то можно установить Eclipse в качестве среды разработки андроид-приложений. Но Эклипс — это скорее исключение из правил. Подавляющее большинство разработчиков работают в Студии.
Также, если у вас процессор от AMD, то рекомендуется поставить в качестве эмулятора смартфона Genymotion. Если у вас процессор от Intel, то встроенного в Android Studio эмулятора будет более чем достаточно.
Разработка приложений под Android: начало
Давайте создадим наш первый проект и посмотрим, из каких компонентов он состоит. Если вы первый раз открыли Студию, то вам будет предложено выбрать какой-нибудь шаблон из набора:
Выберем Empty Activity и нажмём «Далее»:
Здесь по аналогии с IntelliJ Idea вы вводите название вашего проекта, пэкедж, выбираете язык программирования и нажимаете Finish. Перед вами откроется готовый проект, где вы и будете создавать своё приложение на Android.
Создаём эмулятор
Чтобы создать эмулятор, нажмите на AVD Manager:
В появившемся окне нажмите Create Virtual Device:
Выберите подходящий смартфон, который нужно сэмулировать:
Выберите версию операционной системы, для которой мы в первую очередь пишем приложение под Android (скорее всего, вам нужно будет её предварительно скачать, нажав Download):
Нажмите Finish:
В появившемся окне выберите созданный эмулятор и запустите его:
Эмулятор запустится в отдельном окне и появится рядом с кнопкой старта приложения. Нажмите на эту кнопку:
На эмуляторе запустится ваш проект:
Из чего состоит Android-приложение
Теперь давайте разберём, из каких компонентов состоит любое, даже самое простое приложение под Андроид. В папке java находится непосредственно код вашего приложения — тут вы будете создавать экраны и наполнять их содержанием:
В папке res находятся все ресурсы приложения, в том числе макеты ваших экранов и другие элементы дизайна. Тут вы будете заниматься вёрсткой экранов:
Манифест приложения содержит информацию обо всех экранах приложения:
Три основных экрана Android Studio — вот с чего начинается любое приложение под андроид. В том числе и ваше :)
Как разместить приложение в Google Play
Основной способ распространения андроид-приложений — это размещение на площадке Google Play. Кроме этого, приложения можно размещать и в Amazon AppStore, и в Yandex Store, в Shop Samsung App. Но следует помнить, что основной площадкой является Google Play. Магазин приложений Google устанавливается практически на все устройства с Android (кроме ряда «китайцев» и «индийцев»), и по умолчанию на всех этих устройствах включена опция установки приложений только с этой площадки.
Основные особенности Google Play:
- огромная база пользователей;
- очень много приложений: практически все существующие Android-приложения присутствуют на этой площадке;
- удобные инструменты для публикации;
- быстрая форма проверки приложений (через пару часов приложение будет уже доступно).
Давайте посмотрим, как выложить своё приложение в Google Play. Перед загрузкой приложения необходимо зарегистрировать аккаунт разработчика в Google Play. Обычно советуют использовать для этого не свой личный аккаунт (если у вас почта на Gmail), а специально создать для этого ещё один аккаунт. Это связано с тем, что если робот Google Play решит заблокировать аккаунт разработчика, то ваш личный аккаунт это не затронет. Откроем страницу регистрации:
И следуем простым шагам:
Важный момент: регистрация разработчика стоит 25 долларов США. Плата берётся единовременно.
Далее, чтобы опубликовать приложение, надо зайти в аккаунт разработчика и нажать «Новое приложение». Вы попадёте в консоль разработчика:
При заполнении различных форм перед публикацией приложения можно выбрать тип и описание вашего приложения (категория, ограничения аудитории по возрасту и т.п.), языки и страны распространения, цену в каждой из стран. Также необходимо выбрать изображения с приложением, экраны этого приложения, создать подписи и сделать ряд других вещей.
После этого необходимо проверить, что все формы заполнены
Кстати, у Google есть и свой список рекомендаций по поводу того, как опубликовать своё приложение.
Для заполнения формы с версиями приложений надо подготовить релизную версию вашего приложения. то уже не debug-версия вашего приложения, которая запускалась у вас до этого момента, в эмуляторе или под отладкой на устройстве, через кнопку Run.
Как подготовить релиз-версию приложения
Вы создали приложение под Android, и теперь, чтобы его выложить, необходимо сделать следующие шаги:
- Подготовить подпись приложения. Приложение подписывается уникальным криптографическим ключом.
- Подготовить пиктограмму приложения.
- Подготовить скриншоты (снимки экрана) приложения. Можно отдельно подготовить скриншоты для планшетов, телевизора и прочих устройств.
- Проверить манифест приложения. Проверяются права, версия приложения. Проверяются версии SDK, под какие готовится приложение. Удаляется логирование приложения. Проверяются ресурсы приложения.
- Собрать релиз-версию проекта и подписать её уникальным ключом.
- Подготовить удалённые сервера, если приложение работает с такими серверами.
- Протестировать релиз-версии подписанного приложения.
- После релиза приложения в магазине желательно скачать и удостовериться, что всё прошло гладко. Помните, пользователи будут очень недовольны и начнут минусовать ваше приложение, если новая версия будет падать или что-то случится при выкладке приложения, и оно станет неработоспособно.
Пройдёмся по важным понятиям на этом этапе.
Уникальный ключ приложения (сертификат)
Чтобы загрузить приложение на площадку и установить на устройство, требуется, чтобы приложение было подписано вашим уникальным криптографическим ключом. По этому ключу всегда можно отличить подлинность приложения и обновлений. Этот ключ находится у разработчика, он называется app singing key. А Keystore — это файл, в котором хранится ключ. У ключа есть имя и пароль, хранится ключ в keystore, от которого тоже должен быть пароль. Так много паролей нужно, чтобы никто не смог украсть ваше приложение.
Когда вы пишете приложение на андроид, то Android SDK автоматически подписывает debug версию, и кладёт цифровой сертификат и keystore в папку $HOME/.android/debug.keystore. Google Play не принимает debug ключи. Необходимо подписывать приложение релиз-сертификатом. Этот сертификат должен быть один на протяжении всей жизни приложения.
Существует два способа хранения ключа. Исходя из того, какой вы выберете, будет определяться схема подписи приложения:
Сервис Google Play
Если вы выбрали использовать Google Play App singing, вы подписываете приложение с ключом для загрузки его в Google Play (upload key), и уже сам Google Play подписывает приложение уникальным ключом, а впоследствии несёт ответственность за его хранение. Тогда при потере upload key (ключа для загрузки приложения) вы сможете верифицироваться с Google, и сгенерировать новый. Таким образом, вы сможете в любом случае загрузить обновления вашего приложения, даже если вы поменяли загрузочный ключ.
Самостоятельное хранение
Если вы сами храните ключ, то вся ответственность в этом случае лежит на вас. При потере ключа Google Play не сможет вам помочь и обновить приложение вы уже не сможете.
Как подписать приложение в Android Studio
Подпись можно сделать вручную или настроить всё так, чтобы приложение подписывалось в процессе сборки. Вот как сгенерировать новый ключ и keystore файл.
Зайдите в Build и выберите Generate Signed APK:
Выберите тип подписи:
В окне New Key Store заполните форму:
После компиляции проекта найдите получившийся файл:
Это уже готовый файл для загрузки его в Play Google.
Кроме того, нужно учесть, что иконка вашего приложения должна соответствовать определённым требованиям. Их можно прочитать на сайте, посвящённом Material Design.
Для публикации приложения после его загрузки обязательно нажмите кнопку «Просмотреть»:
И только после этого можно опубликовать приложение:
Перед публикацией приложения Google проверяет его, его описание, прочую информацию, и только после этого приложение появляется в Маркете.
Где ещё можно опубликовать приложение
Кроме Google Play, существуют и другие площадки для размещения приложений — Amazon Appstore, Shop Samsung App, Yandex Store. Некоторые разработчики также добавляют свои приложения и в эти альтернативные магазины. Вот некоторые причины:
- В альтернативных площадках условия могут оказаться выгоднее, регистрация на некоторых площадках бесплатная. В отличие от Google Play, который, как мы помним, требует единоразовый взнос в 25 долларов. Сторонние магазины могут привлекать пользователей, устраивая акции для покупателей.
- В основной площадке Google Play очень много приложений, и очень жёсткая конкуренция. Старые и популярные приложения часто оказываются выше новых в списках поиска.
- В Google Play существует фильтр, и если приложение не соответствует стандартам и принципам Google, то такое приложение удаляется, а аккаунт пользователя может быть заблокирован. Причём, зачастую, это «заслуга» автоматических сервисов.
Как монетизировать приложение
Если вы не крупная компания, которая распространяет свой продукт бесплатно (например какой-нибудь интернет-магазин, или банк), у вас есть несколько способов заработать на своём приложении:
- продажа самого приложения;
- вставка рекламы в приложения;
- продажа платных функций в приложении;
- продажа подписки на определённый период;
- донаты — добровольные платежи от пользователей.
Вам, как разработчику, нужно определиться со способом монетизации, который лучше всего соответствует вашему приложению. Баланс между количеством пользователей и прибылью — вещь очень хрупкая. Вот несколько рекомендаций от разработчиков Google, как его достичь:
- Изучайте сведения о приложениях из категории, к которой относится ваше. Узнайте, как другие разработчики получают средства за свои приложения и материалы, и определите, следует ли предложить пользователям альтернативные способы оплаты.
- Подумайте о том, как пользователи будут работать с вашим приложением. Это поможет вам определить наиболее подходящие способы монетизации. От частоты использования приложения зависит эффективность монетизации при помощи рекламы или покупок в приложении. Вы также можете предлагать пользователям приобрести версию приложения без рекламы.
- Используйте естественные расширения. Если функциональность можно расширить (например, добавить новые уровни в игре), рекомендуем сделать базовую часть бесплатной, а дополнительные функции продавать через приложение или на основе подписки.
- Продумайте структуру затрат в своём приложении. Если пользователи регулярно расходуют на ваш контент определённую сумму, вы можете внедрить подписки. Чтобы привлекать новых пользователей, предлагайте им бесплатный пробный период.
- Учитывайте особенности аудитории. Для некоторых аудиторий не всегда подходят реклама, подписки и покупки в приложении. Например, в детских играх пользователи охотнее платят за отсутствие рекламы. В таких случаях пользователям лучше предлагать версии приложений без рекламы.
- Назначайте цены с учётом особенностей целевой страны. Формируйте цены на приложения, покупки в них, а также подписки, исходя из уровня жизни, специфики ценообразования, стоимости аналогичных приложений и иных факторов в целевой стране.
После того как вы определитесь со способом монетизации, её можно будет настроить для вашего приложения в консоли разработчика. Вот и все основные шаги, который нужно учесть для создания и публикации приложения!
Полезные материалы для чтения и самоподготовки
Head First. Программирование для Android. Хотя эта книга немного устарела, она объясняет ключевые концепции очень интересным способом. Если вам понравился стиль Head First, вам будет приятно читать эту книгу.
Филлипс Б., Стюарт К., Марсикано К.Android. Программирование для профессионалов. 3-е издание. Действительно неплохая книга, которую можно смело рекомендовать начинающим разработчикам. В ней они смогут найти множество приёмов разработки приложений для Android, самостоятельный путь к которым довольно долог. Книга начинается с «Hello, world» и через теорию, упражнения и написание небольших приложений, обучает основному стеку технологий для создания Android-приложения. Требует среднего знания Java.
Исакова С., Жемеров Д. Kotlin в действии. Книга от создателей языка. Очень хорошо написана, советую.
Нуркевич Т., Кристенсен Б. Реактивное программирование с применением RxJava. Разработка асинхронных событийно-ориентированных приложений. Книга, которая на примере RxJava поможет понять вам, что такое реактивное программирование. Требует неплохого знания Java (по крайней мере, вы должны понимать, что такое обобщённые типы и лямбда-выражения) и предполагает последовательное чтение, так как материал подаётся шаг за шагом. Внимательный читатель получит полное представление об RxJava.
Напоследок — ещё пара статей на английском для тех, кто хочет разработать приложение на Android: «10 вещей, которые узнают новые Android-разработчики» и «12 методов, который должен знать каждый начинающий Android-разработчик».
Если вам было бы интересно почитать о каких-либо конкретных аспектах разработки под андроид — пишите в комментариях.
В этой статье я дал лишь базовые, минимально необходимые сведения, чтобы начать разработку андроид приложений с нуля. Чтобы стать полноценным, квалифицированным Android-разработчиком, эффективней всего будет пройти полноценную учебную программу, например, на факультете Android-разработки Geek University.
Как запустить рекламу в Facebook Ads: что важно не забыть
Подготовка
Для начала создайте пиксель Facebook и установите его на ваш сайт. Настройте для него необходимые события (заказ, покупка и т. д.), чтобы собрать аудиторию для ремаркетинга и оптимизировать рекламу по стоимости конверсии. Сориентироваться по потребностям и интересам аудитории поможет Facebook Audience Insights.
Настройка рекламной кампании
Выберите цель продвижения. Она зависит от того, что вы хотите: привлечь внимание (рассказать о продукте), сформировать интерес (побудить пользователей оставить свои контакты, скачать приложение и т. д.), найти клиентов (тех, кто уже готов купить ваш продукт).
Настройте геотаргетинг. Это нужно, чтобы объявления показывались пользователям в зависимости от их местоположения.
Укажите аудиторию, которой хотите показывать рекламу в фейсбуке. Рекомендуем начать с похожих (look-alike) и пользовательских (например, по спискам почтовых адресов) аудиторий. Look-alike аудитория — это пользователи, которые по своим интересам и поведению похожи на ваших существующих клиентов. Не забывайте и о подписчиках вашей бизнес-страницы — это лояльная аудитория, с которой стоит работать.
Важный совет: протестируйте рекламу в Facebook с таргетингом на широкую аудиторию. Если у вас правильно выбрана цель продвижения, соцсеть сама найдет пользователей, которые хорошо отреагируют на вашу рекламу. Если располагаете временем и бюджетом на эксперименты, попробуйте настроить детальный таргетинг.
Настройка размещения
В рекламном кабинете Facebook доступно несколько платформ — Facebook, Instagram, Audience Network и Messenger. В каждой свои места размещения — например, лента новостей и правый столбец в Facebook, лента и stories в Instagram. Выбрать подходящие под рекламную цель плейсменты поможет таблица. Доверить этот выбор можно и самому Facebook — тогда система подберет наиболее эффективные места размещения. После этого нужно настроить бюджет и график показа объявлений.
Создание объявлений
Составьте сразу несколько объявлений, чтобы выбрать из них самые эффективные.
Определитесь с форматом. Обычно видео или слайд-шоу работают эффективнее других форматов, но мы рекомендуем провести тест креативов.
Подберите яркие и эмоциональные изображения или видеоролики.
Придумайте цепляющий заголовок, напишите понятный текст и добавьте призыв к действию.
Перед запуском проверьте кампанию на распространенные ошибки — например, с помощью рекомендатора eLama.
Тестирование и оптимизация
Проведите сплит-тестирование, чтобы определить, какие варианты рекламы дадут наилучшие результаты.
Оптимизируйте рекламу по стоимости конверсии — так вы сможете охватить людей, которые с наибольшей вероятностью совершат нужное вам действие.
Увеличивайте ставку для успешных кампаний, но только до тех пор, пока реклама окупается.
И наконец, анализируйте результаты, чтобы принимать решения на основе данных, а не интуиции.
Чтобы получить более глубокие знания о рекламе не только на Facebook, но и на других платформах, приходите на факультет интернет-маркетинга GeekUniversity. При поступлении в октябре — скидки!
Для подготовки статьи использовались материалы сайта likeni.ru.
Пройти обучениеКак мастеру по ресницам стать дизайнером
Эта статья ― лишь небольшая часть того, что Кристина Анфалова рассказала в интервью для нашего проекта GeekSpeak, доступного только студентам платных программ GeekBrains.
Кристина Анфалова ― UX-дизайнер с 10-летним стажем. Работала с МТС, РОСАТОМ, «Газпром». Ведет блог для веб-дизайнеров.
Главные умения для дизайнера
В мою команду дизайнеры попадают чаще всего за горящие глаза. В большинстве случаев это люди, которые пишут мне в блог. Часто мы с ними общаемся и они скидывают свои работы. Либо это мои ученики, которым я преподаю на курсе.
По общению я понимаю, что этот человек «мой», он будет стараться, у него будут гореть глаза от наших проектов, даже не от самых интересных. Я обращаю внимание именно на это.
Хард-скиллы, качество работы ― это мы все уже потом в процессе подтягиваем, это не страшно если их нет, главное, чтобы человек подходил.
Опыт ничего не значит
На самом деле очень тяжело работать с людьми, у которых опыт примерно такой же, как у тебя. У меня есть команде парень, у которого опыт работы практически, как у меня ― 10 лет. И нам с ним тяжело, мы постоянно друг друга перетираем, иногда он меня не слушает, хотя надо бы. Иногда я его переделываю работу, чтобы клиент утвердил, а иногда получается наоборот, то есть такой взаимный обмен.
Бывало, когда мы не сходились с людьми, но по большей части это была проблема менеджмента, просто не подходил нам человек. Ну, и было, когда человек меня просто не слушал, у него тоже был достаточно большой опыт в дизайне. Он просто не хотел переучиться под новые стандарты, у него сформировался стек знаний, и получается все остановилось и дальше никуда. То есть он остановился в развитии, мы полгода с ним помучились, и в итоге разошлись.
Труд побеждает талант
Сколько я менеджеров переучила, и мастеров по наращиванию нет ресниц ― это просто. И все становятся очень хорошими дизайнерами, если они действительно любят это, есть у них есть заинтересованность в обучении и они стараются.
Бывает у человека нет таланта, но если у человека нет таланта в визуальном дизайне, то его можно просто аккуратненько подопнуть в UI/UX-дизайн и это будет правильно. То есть у тебя нет вкуса, но ты умеешь хорошо работать с аналитикой, и ты молодец.
Полная версия интервью доступна только студентам GeekBrains
Это лишь небольшая часть того, что Кристина Анфалова рассказала в интервью для нашего проекта GeekSpeak. В рамках этого проекта мы общаемся с известными учеными, разработчиками и бизнесменами, которые делятся своими знаниями и опытом, а также подробно рассказывают о таких темах, для понимания которых нужно прочитать десятки научных книг и статей, написать сотни тысяч строчек кода или основать несколько стартапов.
К каждому интервью прилагаются полезные материалы, которые спикеры советуют для саморазвития: книги, фильмы, лекции, презентации, подкасты и многое другое.
Посмотреть расширенное интервью и получить подборку материалов могут только студенты платных программ GeekBrains. Хотите стать одним из них? Выберите свою программу обучения здесь.
Android 12: что нового увидят пользователи и разработчики
Ежегодная конференция Google I/O предназначена не только для разработчиков, но и для обычных пользователей Android. На ней рассказывают про все новинки, которые появятся в ближайшее время, а также представляют новую версию операционной системы, которая «прилетает» на смартфоны осенью того же года. Давайте разбираться, о чем больше всего говорили в этом году и чем порадует нас Android 12.
Быстрый просмотр уведомлений и ассистент Google
В Android 12 внесли много изменений с точки зрения дизайна. Это самое большое количество изменений с 2014 года. Они касаются и цветовой гаммы, и формы, анимаций, а также доступа к наиболее используемым функциям. Вот лишь часть из них:
- ассистента Google теперь можно вызвать долгим нажатием на кнопку включения,
- свайп вниз по экрану открывает все уведомления,
- в «Быстрый доступ» можно будет добавить Google Pay и управление функциями смартфона.
Подробнее про визуальные изменения можно узнать в блоге Android.
Простое управление личными данными
Помимо визуальных изменений добавлена «Панель персональных данных», с помощью которой можно управлять доступом к вашим данным (контакты, фото, видео) и легко просматривать список приложений, имеющих к ним доступ. Можно быстро предоставлять так и закрывать доступ к данным для любого приложения на вашем смартфоне.
Также появились новые типы уведомлений, которые более явно сообщают о том, когда какие-либо из ваших приложений используют камеру или микрофон. Эти же уведомления позволяют легко закрыть доступ этих приложений к вашей камере и микрофону. А ещё в панели «Быстрого доступа» добавлены иконки микрофона и камеры, которые позволяют исключить любые приложения из списка пользователей.
Пульт в смартфоне — для телевизоров на Android TV
Теперь вам не понадобится дополнительный пульт для переключения каналов — всё управление происходит со смартфона. Более того, смартфон можно использовать для ввода текста или паролей. Согласитесь, что это гораздо удобнее, чем вбивать текст с пульта. Смартфон можно использовать для любого телевизора на Android TV или Google TV.
Управление авто с помощью Android Auto
Автомобиль можно будет открывать с помощью смартфона. Google плотно работает с автопроизводителями над возможностью встраивать цифровой ключ в автомобиль на этапе его производства на заводе. С помощью этого цифрового ключа можно будет не только открывать и закрывать авто, но также запускать двигатель. Для этого даже не придётся вынимать смартфон — он всегда будет знать, когда вы подходите к машине или удаляетесь от неё. Благодаря этому функционалу вы сможете давать доступ к своему автомобилю вашим близким или друзьям, и для этого не обязательно нужно находиться рядом. Более подробно об этом можно почитать в отдельной статье блога Android.
Более удобный поиск информации
Когда вы ищете какую-то информацию, важно знать, насколько она правдива или насколько надёжны её источники. Это особенно актуально, если вы открываете какие-то сайты впервые. Новая фича «Об этом запросе» (About this result) снабдит вас необходимыми деталями о сайте перед тем как вы его откроете:
- описание сайта,
- когда он был создан,
- насколько надежно защищено ваше соединение при использовании этого сайта.
Ближе к концу года функционал запросов будет расширен, и вы сможете прочитать отзывы о незнакомом сайте и просмотреть похожие источники информации.
Смена паролей через Chrome и ассистента Google
Chrome на вашем устройстве позволит изменять пароли в один клик. На сайтах, которые запрашивают пароль, браузер сможет проверить надёжность вашего пароля. Если пароль ненадежен или скомпрометирован, вы увидите уведомление от ассистента. Через ассистента вы сможете быстро заменить старый пароль на новый.
Google Lens для переводов и поиска на скриншотах
Линза от Google работает на любом смартфоне и позволяет расшифровывать или формировать поисковые запросы на основании того, что вы видите через камеру смартфона или с изображения на фотографии. Особенно это полезно в процессе обучения, когда нужно перевести какой-то текст на фотографии или скане документа, или прочитать текст на неизвестном языке. Google Lens работает более чем на 100 языках.
Также много людей делают скриншоты вещей, которые им понравились. Но с самим скриншотом мало что можно сделать. Теперь при просмотре скриншотов в приложении Google Photos вам напомнят о поиске по фотографии через Lens. Так гораздо проще найти понравившуюся вам пару обуви или предмет интерьера.
Напоминалки о товарах в корзине и скидочные карты в аккаунте
Наверняка с вами было такое: добавляете нужный вам товар в корзину, а потом отвлекаетесь и переходите по другой ссылке или открываете новые вкладки, забывая, что у вас в корзине уже что-то есть. Теперь Chrome будет напоминать вам об открытых корзинах на сайтах, если попробуете перейти на новую вкладку в браузере. Более того, скоро вы сможете подключить свои программы лояльности к аккаунту Google, чтобы сразу в браузере видеть лучшие предложения.
Более детальные карты
Подробная информация о нужных местах. Если вы идёте пешком или просто гуляете в новом для себя городе, дополненная реальность в приложении Live View подскажет, где можно найти нужные магазины или кафе, включая информацию о часах пик, обзоры и самые свежие фотографии места. То же самое касается и отелей во время путешествий, чтобы вы всегда могли найти дорогу обратно.
Отображение загруженности районов. Карты теперь могут определять загруженность не только конкретных мест и улиц, но и целых районов. Если вы хотите обойти наиболее насыщенные людьми места или пройтись по тихим улочкам — достаточно открыть карту. Или наоборот, если вы хотите погрузиться в людской поток, найти наиболее посещаемые места и достопримечательности, то карты подскажут нужный маршрут.
Выделение мест в зависимости от времени. Обновленные Карты отобразят информацию в зависимости от времени суток и учитывая, путешествуете вы или нет. Это значит, что по утрам вам будут дополнительно показывать кофейни (чтобы взбодриться), а днём и вечером — столовые и закусочные (когда пришло время хорошенько поесть). А если вы в путешествии, дополнительно будут подсвечиваться достопримечательности и иные места интереса.
Персонализированные воспоминания. Если у вас будет три или больше похожих фотографии, сделанных в одном месте или с одними людьми, то Google Photo укажут вам на эти соответствия. К примеру, вы любите фотографироваться на набережной в вашем городе. Благодаря новой функции вы сможете заглянуть в прошлое и увидеть всех, с кем фотографировались в этом месте.
Оживлённые фото с Cinematic Moments. Когда вы пытаетесь сделать идеальное фото, наверняка, делаете несколько снимков подряд. Используя нейронные сети, смартфон может сделать множество промежуточных снимков. В этом случае получаются фотографии в движении — короткие ролики, называемые Cinematic Moments. Чтобы создать такой эффект, профессиональный аниматор должен потратить несколько часов, но с машинным обучением такие ролики создаются быстро и автоматически. Больше об этом.
О чем интересном в новой операционной системе Android 12 мы не написали? Расскажите в комментариях!
Приложения августа
Привет! Я Настя, автор и редактор статей в блоге GeekBrains. Я изучаю сайты и тестирую приложения, чтобы каждый месяц рассказывать вам о самых интересных и полезных. В августе я выбрала 6 приложений, которые помогут:
- работать с ежедневными напоминаниями,
- сделать бесшовные скриншоты на смартфоне,
- создать стикеры для Telegram,
- автоматически удалить мусорные фотографии,
- научиться трюкам на скейтборде или велосипеде,
- коллекционировать референсы.
Actions
Разработчики: Moleskine, создатели знаменитой записной книжки, выпускают не только канцтовары, но и приложения. Другие продукты Moleskine — Flow, аналог скетчбука, победивший на Apple Design Award 2019, Page capture для оцифровки блокнотов бренда и умный календарь Timepage.
Для чего: чтобы планировать и организовывать задачи. Не ждите многого от Actions — это еще один инструмент для ведения списков, минималистичный и с приятным дизайном. Создавайте to-do-листы, ставьте напоминания, пишите заметки и оставляйте комментарии в свободной форме. Можно настроить расписание уведомлений: например, Actions может присылать напоминание о задаче каждые два дня.
Еще можно создавать напоминания о повторяющихся действиях: например, приказать приложению напоминать об утренней планерке в среду. Если это приложение вам понравилось, но архив списков остался в другом, можно перенести историю в Actions с помощью расширения iOS Share.
Tailor
Разработчики: Foundry 63 — кажется, это их первое приложение.
Для чего: чтобы делать бесшовные скриншоты на айфоне. Для андроид-смартфонов приложение не актуально — там длинный скриншот можно сделать без проблем, а в iOS он ограничен размерами экрана. В iOS 13 появилась возможность делать скриншоты в браузере, но как быть с другими приложениями? Тем, кто часто скриншотит сайты, приложения, списки дел, книги, переписки в мессенджерах и много чего еще, приходится хранить скриншоты пачками или искать нестандартные решения. Tailor — одно из них.
Все, что нужно сделать, — открыть Tailor, дать доступ к фото и пойти в приложение, которое хотите заскриншотить. Дальше сделайте несколько скриншотов так, чтобы новый содержал часть предыдущего, и снова откройте Tailor. Приложение автоматически склеит фрагменты, и вам останется только сохранить или отправить готовый скриншот.
Алгоритм распознавания в Tailor не идеальный, поэтому некоторые скриншоты он склеивать отказывается, но в этом случае предлагает заскринить экран заново. Еще один минус — внизу скриншота останется водяной знак, но его легко обрезать.
Поддержка: iOS.
Еще
Как просто на айфоне сделать длинный скриншот. Автор сайта Wylsa.com рассказывает о решениях для Safari, айфона и айпада.
Sticky AI
Разработчики: Prisma Lab — российская компания, которая создает продукты на основе нейросетей для работы с фото и видео. Кроме Sticky, выпустили еще два приложения: Lensa автоматически обрабатывает селфи, Prisma превращает фото в картину.
Для чего: чтобы делать стикеры из фотографий — в этом поможет нейросеть. Вообще все называют Sticky приложением для стикеров из селфи, но ничто не мешает обработать любое фото, картинку или гифку.
Как создать стикер в Stiky AI:
- Сделать селфи или выгрузить картинку из библиотеки. Нейросеть определит, где на фото главный объект, и отделит его от фона.
- Поработать с фоном — сделать его прозрачным или цветным, стереть лишнее.
- Сделать обводку контура, если он сливается с фоном.
- Добавить надпись.
- Сохранить в галерее или отправить друзьям в Telegram, WhatsApp или Instagram.
Поддержка: iOS. Версия для Android тоже есть, но сейчас ссылка на Google Play не работает. Можно скачать APK.
Еще
Как работает Sticky AI. Устройство машинного обучения на примере приложения.
Gemini
Разработчики: MacPaw — украинская компания, которая разрабатывает утилиты в основном под macOS и iOS, но для Windows тоже кое-что есть. Большинство продуктов помогают качественно очистить память устройства. Среди других программ — популярный The Unarchiver, аудиоплеер, утилита для шифрования файлов и что-то вроде платного дайджеста приложений для Mac.
Для чего: для поиска и удаления дубликатов фотографий. «Вам действительно нужны 10 снимков моста Голден Гейт?» — пишут разработчики на странице утилиты для Mac. Те, кто знаком с ритуалом очистки памяти смартфона перед отпуском, оценят приложение — теперь Gemini сделает это за вас, автоматически. Программа анализирует фото на устройстве, находит дубликаты и разбивает их на категории, например скриншоты и селфи, плюс распределяет фотографии по датам. Вам остается только нажать кнопку «Очистить корзину» — нейросети Gemini уже выбрали лучший результат и отметили повторы, которые рекомендуют удалить. Для размытых фото есть отдельная категория — от них легко избавиться одним кликом.
О пользователях, которые научены опытом с Facebook и опасаются за безопасность данных, разработчики Gemini тоже позаботились. В приложении можно выделить целые фотосессии, которые нейросеть добавит в игнор-лист и не будет обрабатывать.
Еще
Gemini 2: поиск и удаление дубликатов. Macosworld об утилите для macOS.
Riders
Разработчики: Игорь Дебатур и Толя Черняков — ребята, которым принадлежит проект по мобильной и веб-разработке Whitescape. Идея приложения про экстремальные виды спорта возникла у разработчиков спонтанно: они хотели научиться новым трюкам на горных велосипедах, но так и не нашли нужную информацию в интернете — все, что им попадалось, было неструктурированным и некачественным. Тогда Игорь и Толя разработали Riders.
Для чего: чтобы изучать трюки в экстремальных видах спорта: на BMX, серфе, самокате, горных лыжах, скейтборде и много чем еще. Работает приложение так: вы выбираете один или несколько интересных видов спорта — например, лонгборд. Далее Riders предлагает список карточек с трюками в порядке усложнения. В каждой карточке — описание трюка, пошаговые текстовые и видеоинструкции от пользователей и раздел с вопросами. Если одна инструкция непонятна, легко выбрать другие. Еще в карточке трюка записано время, которое понадобится на оттачивание техники, но это только среднее значение — можно самому прикинуть количество дней и отслеживать успехи.
Riders — не только про обучение, но и про комьюнити. В приложении есть вкладка для поиска пользователей поблизости: можно найти профили единомышленников, увидеть, какие трюки они уже изучили, и пригласить кататься вместе. А еще можно посмотреть ленту с записями трюков пользователей, которые находятся рядом.
Поддержка: iOS, Android и Windows Phone.
Еще
История разработки приложения Riders. Из первых уст на AppleInsider.ru.
Riders: как сделать проект успешным на стадии бета-тестирования. Подробнее об идее и опыте разработки.
Collect
Разработчики: WeTransfer — компания, которая выпускает продукты для организации творческой работы:
- одноименный WeTransfer, чтобы отправлять большие файлы;
- Paste — хранит историю буфера обмена;
- Paper для создания скетчей и коллажей.
Любое из приложений можно интегрировать с браузером, Sketch или Slack. А еще у WeTransfer есть онлайн-издание с историями о творческих проектах.
Для чего: чтобы коллекционировать референсы. Collect — еще один проект для любителей Pinterest и других инструментов для хранения и сортировки файлов. «One app to save everything» — написано в заголовке сайта, и это значит, что фотографиями и скриншотами программа не ограничивается: можно добавлять документы, видео, ссылки, аудиозаписи, заметки и вообще файлы любого формата. Есть кнопка Paste, чтобы быстро добавить в приложение скопированную ссылку.
Файлы можно группировать в доски по теме или дате. Collect подходит для работы в команде: создайте тематическую доску, добавьте коллег и загружайте материалы по проекту, чтобы все нужное для работы хранилось в одном месте.
Пройти обучениеПо следам происшествия: как логировать эффективно
Людям свойственно ошибаться. Это относится не только к разработчикам, но и к пользователям. В ходе разработки мы контролируем процесс и можем разобраться в неправильном поведении программы простой отладкой. А вот расследовать случай, который произошёл в production-окружении, не всегда просто. В таких ситуациях на помощь приходят журналы. И чтобы от них действительно была польза, их нужно вести правильно.
Логирование — это процесс ведения таких журналов. Помогает обнаружить скрытые ошибки, разобраться в проблемах пользователей и просто понять, что произошло на самом деле. В простейшей реализации такие журналы пишутся в текстовом файле и содержат точное время и описание произошедшего события. В логировании есть множество подходов и давно определены лучшие практики — это хорошо для нас.
В этой статье разберёмся, как правильно организовать ведение журналов в PHP-приложении, как эффективно с ними взаимодействовать и какие библиотеки и инструменты могут быть полезны.
Стандарт PSR-3. Уровни логирования
PSR — это свод рекомендаций для PHP-разработчиков. Он содержит советы по оформлению кода, некоторые интерфейсы и другие рекомендации. Один из его документов (PSR-3) посвящён реализации логера.
Знакомство с этими рекомендациями предлагаю начать с уровней логирования, которые в них предлагаются.
<?php namespace Psr\Log; class LogLevel { const EMERGENCY = 'emergency'; const ALERT = 'alert'; const CRITICAL = 'critical'; const ERROR = 'error'; const WARNING = 'warning'; const NOTICE = 'notice'; const INFO = 'info'; const DEBUG = 'debug'; }
PSR-3 определяет 8 уровней сообщений. Если их использовать правильно, искать ошибки станет проще и получится оперативнее реагировать на инциденты. Давайте разберёмся, как выбрать уровень:
- DEBUG — отладочная информация, подробно раскрывающая детали события;
- INFO — любые интересные события. Например, когда пользователь авторизовался;
- NOTICE — важные события в рамках ожидаемого поведения;
- WARNING — исключительные ситуации, не являющиеся ошибками. Например, использование устаревшего метода, неправильный запрос в API;
- ERROR — ошибки, которые следует отслеживать, но они не требуют срочного исправления;
- CRITICAL — критическое состояние или событие. Например, недоступность компонента, неожиданное исключение (Exception);
- ALERT — ошибка или событие, требующие срочных действий. Например, когда база данных недоступна;
- EMERGENCY — ситуация, когда программа или система полностью выведены из строя.
Чтобы использовать эти уровни, достаточно добавлять их название к строке каждой записи журнала. Например:
[2021-01-01 12:10:35] website.INFO: User has changed his password
На уровни ALERT и EMERGENCY часто ставят дополнительное информирование, например по SMS. По INFO можно легко восстановить последовательность действий пользователя, по DEBUG — узнать точные значения переменных, результат работы функции в определённом месте и прочее.
PSR-3. Интерфейс для класса-логера
Помимо класса с уровнями, PSR-3 предлагает нам интерфейс для реализации собственных логеров — LoggerInterface. Соблюдать его очень полезно, так как большинство существующих библиотек его поддерживает. Если вы решите заменить свой логер на другой, просто подключите вместо него новый класс.
LoggerInterface требует реализации методов ведения журнала — и чтобы она учитывала уровни, которые мы разобрали выше. Создадим собственный класс-логер, который будет соответствовать этому интерфейсу и делать записи в файл.
Для начала загрузим код стандарта PSR-3 с помощью Composer.
composer req psr/log
В загруженном пакете содержится несколько классов, трейтов и интерфейсов. Среди них — LogLevel, который мы разобрали выше, и интересующий нас в данный момент LoggerInterface. Давайте создадим новый класс, реализующий этот интерфейс. Важно: убедитесь, что у вас подключён класс-автозагрузчик (vendor/autoload.php).
<?php // index.php // Автозагрузчик Composer require_once 'vendor/autoload.php'; // Наш новый класс-логер require_once 'src/FileLogger.php';
<?php // src/FileLogger.php // Если `use` не добавился автоматически // - обязательно добавьте его самостоятельно use Psr\Log\LoggerInterface; // Наследуем интерфейс логера от PSR-3 class FileLogger implements LoggerInterface { // ... }
Класс мы создали. Но чтобы он удовлетворял требованиям стандарта, нужно написать все методы, описанные в интерфейсе. Самый важный из них — log. В нём будет указана основная логика записи в файл.
class FileLogger implements LoggerInterface { // ... public function log($level, $message, array $context = []): void { // Текущая дата в формате 1970-12-01 23:59:59 $dateFormatted = (new \DateTime())->format('Y-m-d H:i:s'); // Собираем сообщение, подставив дату, уровень и текст из аргумента $message = sprintf( '[%s] %s: %s%s', $dateFormatted, $level, $message, PHP_EOL // Перенос строки ); // Пишем в файл gb.log file_put_contents('gb.log', $message, FILE_APPEND); // FILE_APPEND - позволяет добавлять записи к существующим, // не затирая старые логи } // ... }
Для полного удовлетворения интерфейса LoggerInterface нам осталось написать реализацию для методов emergency, alert, critical, error, warning, notice, info и debug, которые соответствуют уровням (их мы разобрали выше). Их реализация сводится к очень простому принципу: мы вызываем метод log, передав в него необходимый уровень.
class FileLogger implements LoggerInterface { // ... public function emergency($message, array $context = []): void { // Передаем уровень из класса LogLevel $this->log(LogLevel::EMERGENCY, $message, $context); } public function alert($message, array $context = []): void { $this->log(LogLevel::ALERT, $message, $context); } // и так далее // ... }
Использование логера
Теперь, когда наш класс реализует интерфейс, предложенный стандартом PSR-3, мы можем легко задействовать его в любом месте. Например, в файле index.php:
<?php // index.php // Автозагрузчик Composer require_once 'vendor/autoload.php'; // Наш новый класс-логер require_once 'src/FileLogger.php'; $logger = new FileLogger(); $logger->debug('Message from index.php');
Обратите внимание: в качестве типа аргумента конструктора мы указываем не конечную реализацию (FileLogger), а именно интерфейс стандарта PSR-3. Это удобно, потому что позволяет легко заменять применяемый логер на любой другой, поддерживающий этот интерфейс.
Контекст
Вы могли заметить, что все методы интерфейса LoggerInterface содержат аргумент $context. Зачем он нужен?
Контекст предназначен для передачи вспомогательной и зачастую динамичной информации. Например, если вы делаете отладочную запись (уровень debug), можно передать в контекст значение переменной.
Чтобы применять этот аргумент, нам нужно поддержать его в методе log. Давайте доработаем его, учитывая, что $context — массив.
<?php class FileLogger implements LoggerInterface { // ... public function log($level, $message, array $context = []): void { $dateFormatted = (new \DateTime())->format('Y-m-d H:i:s'); // Преобразуем $context в формат json $contextString = json_encode($context); $message = sprintf( '[%s] %s: %s %s%s', $dateFormatted, $level, $message, $contextString, // Добавляем контекст к строке лога PHP_EOL ); file_put_contents('gb.log', $message, FILE_APPEND); } // ... }
Теперь в любом месте вызова логера мы можем передать вторым аргументом массив дополнительной информации.
<?php // index.php //... $userName = 'GeekBrains'; $userEmail = 'user@gb.ru'; $logger = new FileLogger(); $logger->debug('Message from index.php', [ 'user_name' => $userName, 'user_email' => $userEmail, ]);
В результате мы получим запись следующего вида:
[2021-09-02 13:00:24] debug: Message from index.php {"user_name":"GeekBrains","user_email":"user@gb.ru"}
Касательно контекста действует одно простое правило: любая динамическая информация должна передаваться в нём, но не в сообщении. То есть, если вы формируете сообщение в лог с помощью sprintf или конкатенацией строчных переменных, — скорее всего, эту информацию можно вынести в контекст. Соблюдая это правило, проще искать что-то в журнале, потому что не приходится предугадывать (или вычислять) значения переменных.
Библиотека Monolog
Несмотря на всю простоту принципа ведения журналов, в этой области широкий простор для модификаций. Мы могли бы поддержать другие форматы записей, реализовать отправку SMS или элементарно дать возможность менять имя конечного файла логов.
Здорово, что всё это уже реализовано в большинстве библиотек. Одна из самых распространённых – monolog.
Среди весомых преимуществ этого пакета:
- полная поддержка PSR-3;
- поддержка разных принципов обработки логов в зависимости от уровня;
- поддержка имён каналов (имена логеров);
- очень широкая поддержка фреймворков.
Чтобы начать использовать этот прекрасный инструмент, установим его с помощью Composer.
composer req monolog/monolog
Использование Monolog
Работа библиотеки monolog основывается на обработчиках. Они позволяют задавать конкретное поведение в ответ на события логирования. Например: запись в файл — это специальный обработчик, который называется StreamHandler. Давайте заменим использование нашего класса на загруженную библиотеку.
<?php // index.php use Monolog\Logger; use Monolog\Handler\StreamHandler; // Автозагрузчик Composer require_once 'vendor/autoload.php'; // В качестве аргумента передаем имя канала $logger = new Logger('gb-demo'); // Подключаем обработчик. В качестве аргумента у StreamHandler - путь к файлу $logger->pushHandler(new StreamHandler('gb.log')); // Далее все оставляем, как было $userName = 'GeekBrains'; $userEmail = 'user@gb.ru'; $logger->debug('Message from index.php', [ 'user_name' => $userName, 'user_email' => $userEmail, ]);
Если мы запустим этот код, в файле gb.log появится запись следующего вида:
[2021-09-02T13:16:14.122686+00:00] gb-demo.DEBUG: Message from index.php {"user_name":"GeekBrains","user_email":"user@gb.ru"} []
Очень похоже на то, что было у нас ранее, кроме добавления имени канала (gb-demo).
Важная особенность обработчиков monolog: им можно задать уровень, на котором они работают. Например, чтобы писать все ошибки в отдельный файл.
<?php // index.php use Monolog\Handler\StreamHandler; use Monolog\Logger; use Psr\Log\LogLevel; // ... $logger = new Logger('gb-demo'); $logger->pushHandler(new StreamHandler('gb.log')); $logger->pushHandler(new StreamHandler('errors.log', LogLevel::ERROR)); // ... $logger->emergency('It is not even an error. It is EMERGENCY!!!');
Подключённый на уровень ERROR обработчик будет принимать на себя все записи уровня ERROR и выше. Поэтому вызов метода emergency попадает в оба файла: gb.log и errors.log
Такое простое разделение записей по уровням значительно упрощает для нас реагирование на ошибки. Ведь больше не нужно искать их среди всех записей в журнале. Это простая и полезная функция.
Все записи от одного запроса
Когда мы разрабатываем проект, журналы читаются очень просто, они последовательны и ясны. Но когда продуктом пользуются несколько человек, логи могут перемешиваться и больше запутывать, чем помогать. Для решения этой проблемы есть простой трюк. Вместо имени канала (логера) используйте уникальный идентификатор сессии. Получить его можно с помощью встроенной функции session_id(). При этом сессия должна быть обязательно запущена с помощью session_start()
Рассмотрим пример реализации такого приёма:
<?php // index.php // Запускаем сессию session_start(); // ... // Передаем id сессии в название канала $logger = new Logger(session_id()); // ...
Что нам даёт такая простая доработка? Важную возможность — группировать все записи запросам пользователя.
// Это записи от первого запроса [2021-09-02T13:35:54.155043+00:00] b30m8k1fvmf638au7ph0edb3o5.DEBUG: Message from index.php {"user_name":"GeekBrains","user_email":"user@gb.ru"} [] [2021-09-02T13:35:54.156800+00:00] b30m8k1fvmf638au7ph0edb3o5.EMERGENCY: It is not even an error. It is EMERGENCY!!! [] [] // А это записи от второго запроса. У них отличаются названия каналов [2021-09-02T13:36:03.528474+00:00] u7fi04mn99h0timg148rles1um.DEBUG: Message from index.php {"user_name":"GeekBrains","user_email":"user@gb.ru"} [] [2021-09-02T13:36:03.529421+00:00] u7fi04mn99h0timg148rles1um.EMERGENCY: It is not even an error. It is EMERGENCY!!! [] []
Что дальше?
Monolog поддерживает множество полезных готовых обработчиков, на которые стоит обратить внимание:
- TelegramBotHandler — отправляет записи в Telegram от имени бота. Пригодится для высоких уровней логирования;
- SlackHandler — похож на предыдущий, но отправляет записи в Slack;
- SwiftMailerHandler — позволяет отправлять записи по email;
- ChromePHPHandler – даёт доступ к журналам прямо из браузера Chrome в режиме Live.
Заключение
Логирование поможет исправлять ошибки на ранних этапах разработки и быть уверенными, что ничего не сломалось в новой версии кода. А ещё расследовать случаи ваших пользователей и иметь общее видение проекта.
Главное — помнить простые правила:
- Следование PSR-3 позволит легче заменять классы-логеры в вашем коде и использовать внешние библиотеки.
- Разные уровни логирования помогут сосредоточиться на важном.
- Отделение динамической информации в контекст упростит поиск по журналам.
- Библиотека Monolog реализует практически все возможные хотелки. Обязательно изучите её.
- С помощью идентификатора сессии можно разделить записи в журналах по каждому запросу.
- Лучше писать много лишних логов, чем не дописать один важный.
Что такое MVP и зачем его делать
Продолжаем серию постов по быстрому погружению в продакт-менеджмент. Весь курс в видеоформате можно бесплатно пройти на GeekBrains, а здесь — вторая лекция в формате для чтения. Педагог — Евгений Паршин, CPO «Альфа-Банка»
Minimum viable product (MVP) — это минимально жизнеспособный продукт. Есть два определения MVP:
- Процесс быстрой и дешёвой проверки гипотез ценности продукта. Даёт возможность проверить спрос при небольших затратах на разработку.
- Продукт с минимальным набором функций. Создать его не так дёшево, как в первом случае, но он получается более качественным.
Сначала можно разработать MVP согласно первому определению, а после подтверждения спроса доработать функционал и выпустить на рынок MVP №2.
Как выделить главное в MVP?
Когда появляется идея продукта, то хочется сразу сделать огромную платформу или огромное мобильное приложение, но на первых порах не нужно «впихивать невпихуемое», нужно мыслить категориями «проблема → решение».
Чтобы выделить главное в MVP, пообщайтесь с пользователем, поймите его проблему и придумайте её решение. Как правило, пользовательская проблема одна и решить ее можно одной фичей.
Кейс 1
Клиент обратился в нашей агентство, чтобы запустить мобильное приложение по инвестициям для начинающих. У него было огромное техническое задание и длинный список функций, которые нужно реализовать.Приложение обещало стать «огромным монстром». При этом на запуск было 5 месяцев и 2,5 млн рублей.
Мы сказали, что это здорово, и предложили применить продуктовый подход. Провели исследование, пообщались с пользователями, выделили пользовательские сегменты и нашли у этих сегментов проблемы, которые нужно решить с помощью мобильного приложения.
Клиент пришёл к нам со списком из 15 проблем. Часть из них были выдуманными, часть основаны на личном опыте. Проведя исследование, выяснили, что у пользователей всего три проблемы. Вместо того чтобы сразу запускать мобильное приложение, начали тестировать проблемы по одной.
Проблему информирования по событиям компаний, в которые вложены деньги, решили через чат-бота в телеграме. Пользователь выбирает компании и раз в день получает новости (собирали вручную). Гипотеза была проверена и подтверждена за пять дней: людям оказалась нужна эта функция.
Потом сделали посадочную страницу, на которой рассказали о приложении и датах запуска, начали собирать почты пользователей. Общались с ними, чтобы понять, что такого они увидели в приложении, что могло решить их проблему.
В итоге оказалось, что из функций, которые придумал клиент, больше половины никому не нужно. Мы сэкономили кучу денег, времени, усилий. Запустили приложение с нужными функциями. Сейчас продукт состоит из обучения, информирования по событиям инвестиций, инвестирования.
Кейс 2
Клиент хотел запустить персональное обучение творческим профессиям (например, графическому дизайну). По плану продукт должен был состоять из консультаций наставников, составления персонального плана обучения и скрининга навыков. На запуск этой идеи было 2,5 месяца и 600 тыс. рублей.
Вместо того чтобы сразу запускать продукт, решили проверить идею. Провели интервью с пользователями и выяснили, что им не нужно персональное обучение, они смотрят уроки на ютубе или проходят большие курсы.
Когда общались с пользователями, обнаружили другую потребность. Например, человек уже работает графическим дизайнером, выполняет коммерческие заказы и хочет, чтобы перед отправкой работы заказчику, кто-то её проверил (ему нужно убедиться, что он сделал классную штуку). Сейчас мы запускаем сервис по ревью работ для графических дизайнеров.
Создали посадочную страницу с формой заявки, где рассказали о сервисе,. Пока что работы проверяет один преподаватель. Привлекаем трафик и запускаем проект с минимальным бюджетом.
Пример Zappos
Zappos — это интернет-магазин обуви, который появился в 1999 году. У его основателя была гипотеза о том, что у людей есть потребность в покупке обуви через интернет. Он мог пойти по классическому сценарию: закупить обувь, арендовать склад, взять на работу продавцов, менеджеров и курьеров. Это было бы долго и дорого. Вместо этого основатель Zappos пошёл в ближайший магазин обуви, сфотографировал все товары, разместил их на сайте, и начал получать заказы. Когда приходил заказ, он бежал в магазин и выкупал нужную пару, потом шел в службу доставки, отправлял её и получал деньги. Таким образом, основателю Zappos удалось протестировать гипотезу быстро и без вложений. В итоге Zappos сильно разросся, и в 2009 году основатель продал свою долю «Амазону» за 1 млрд долларов.
Пример Dropbox
Dropbox — облачное хранилище, запущенное в 2007 году. В то время было не очевидно, что такой продукт кому-то нужен. Чтобы проверить идею, основатель Dropbox смонтировал видео, в котором рассказал о своём продукте, и разместил его на The Hacker News. Посетителям сайта настолько понравилась его идея, что они начали писать ему в личку, оставлять контакты, чтобы получить информацию о старте. Так основатель Dropbox проверил рисковую гипотезу. Плюс у него появилась лояльная база пользователей, с которыми он мог общаться, чтобы узнавать, какая именно функциональность им нужна. На данный момент капитализация DropBox составляет 8 млрд долларов.
Нецифровой пример
Однажды мне пришла идея запустить магазин, в котором будут продаваться окрашенные новые бамперы. По задумке это поможет клиентам сэкономить деньги и время — после аварии им не придётся ехать в магазин, выбирать бампер, ехать в автосервис и ждать, пока его покрасят и поменяют. Им нужно только приехать ко мне, купить окрашенную запчасть и поехать в автосервис — вопрос 40 минут, а не целого дня. Плюс экономия на покупке бампера, потому что мне их красят оптом, что дешевле. Нужно было выбрать между классическим способом проверки гипотезы и продуктовым.
Классический подход проверки
Гипотеза достаточно рисковая. На тот момент прямых конкурентов не было.
MVP-подход
Я нашёл графического дизайнера, фото неокрашенного бампера и все возможные цвета авто. Отдал дизайнеру, чтобы он размножил и окрасил фото. Сделал посадочную страницу с информацией о том, что продаю бамперы на Hyundai Solaris, разместил фотографии окрашенных бамперов, настроил форму заявки и пригнал трафик из контекстной рекламы.
Люди начали оставлять заявки. Я звонил им и говорил, что мы тестируем идею, предлагал два варианта развития событий: подождать месяц и купить бампер со скидкой, либо не обижаться и купить запчасть в другом месте. Негатив в ответ не получил ни разу. На проверку гипотезы ушло 15 тыс. рублей.
Потом я нашёл партнёра, мы вложили в запуск бизнеса по 100 тыс. рублей и запустили его. В итоге эта история взлетела, мы начали расширяться.
Зачем делать MVP?
Уменьшить риск неопределённости. Когда человек решает запустить продукт, перед ним открывается огромный «туман войны»: он не знает рынок, пользователей, каналы их привлечения, сегменты. MVP — это один из способов понять и снизить неопределённость.
Сэкономить деньги и время.
Снизить риск выдать желаемое за действительное.
Понять метрики (LTV, CAC, воронку и т.д.) Большинство продуктов, которые сейчас запускаются, проваливаются потому, что у них не сходится экономика продукта. А это следствие того, что не сходится экономика в каналах.
Пример из жизни преподавателя
С «выдавать желаемое за действительное» сталкиваются абсолютно все. Кажется, что нужно бежать и привлекать инвестиции, пока идею не украли. Но на деле идея может оказаться пустышкой. У меня такая была.
Я решил делать сервис «Автозапчасти без переплаты». Покупая годовой абонемент на автозапчасти, клиент получал возможность покупать запчасти без наценки — экономия 30-40%. То есть стандартные магазины автозапчастей зарабатывают на наценке, а я зарабатываю, продавая абонемент.
Я бегал с этой идеей 8 месяцев, ходил по инвесторам, рассказывал. На восьмом месяце почти привлёк инвестиции, но в последний момент решил проверить гипотезу. В итоге оказалось, что такой сервис никому не нужен.
Для проверки я сделал посадочную страницу (на это ушло 1,5 недели), выделил пользователей по ценностным предложениям, тестировал гипотезы по сегментам (на это потребовалось ещё 2 недели). В итоге за 3,5 недели я понял, что продукт никому не нужен и я мог не тратить 8 месяцев зря.
Когда пора делать MVP?
Существует три подхода к запуску MVP.
- MVP как процесс. Включает в себя исследование рынка (объём, основные игроки, их преимущества и недостатки), формирование гипотез/пользовательских проблем, подтверждение проблем через интервью, формирование ценностного предложения, моделирование юнит-экономики, запуск MVP, подтверждение решения и первую продажу. Занимает примерно 10 дней.
- Экспресс-тест. Состоит из тех же пунктов, но они идут в другой последовательности: исследование рынка, формирование гипотез, формирование ценностного предложения, запуск MVP, подтверждение проблемы, подтверждение решения, первая продажа, моделирование экономики. Это быстрый подход. Занимает 3 дня.
- MVP как продукт. Включает в себя исследование рынка, формирование гипотез, подтверждение проблем, формирование ценностного предложения, создание прототипа, UX-тестирование, моделирование юнит-экономики, согласование, тестирование и запуск MVP. На это нужно месяц-полтора. Работает только в том случае, если у вас уже есть продукт с какой-то функциональностью.
Какие бывают MVP?
Прототип сервиса
BestDoctor — стартап, который решает одну из главных проблем на рынке добровольного медицинского страхования (ДМС). Например, компания хочет оформить сотрудникам ДМС, идёт в страховую, покупает страховку на год на одного человека за 60 тыс. рублей. Некоторые из членов команды могут ни разу не сходить в клинику. В конце года деньги «сгорают» — остаются в страховой. Чтобы решить проблему, BestDoctor предложил владельцам компаний другой сервис — платить за страхование сотрудника по факту посещения им медицинского центра. В результате клиенты BestDoctor экономят порядка 50% бюджета, выделенного на ДМС.
На старте, чтобы проверить гипотезу, основатели BestDoctor сделали макет личного кабинета, в котором показали, как отслеживать посещения сотрудниками клиник и скачивать платёжные поручения. Оформили красивую продающую презентацию: прописали в ней УТП и разместили макеты. Затем начали рассылать её потенциальным клиентам. Многие компании заинтересовались предложением и начали заключать с BestDoctor контракты. Процесс подписания договоров длился долго, за это время основатели BestDoctor провели переговоры с медицинскими центрами. Сказали, что есть пять крупных компаний, которые хотят обслуживать своих сотрудников у них, и предложили подключиться к сервису. Клиники согласились.
Лендинг
Aviasales запускает сервис организации командировок. Они упаковали его в красивую историю о том, что сначала запустили продукт внутри компании, сами им пользовались, и теперь хотят предложить его миру. Была посадочная страница, на которой были размещены макеты личного кабинета нового сервиса и кнопка «создать аккаунт». При ее нажатии можно было увидеть, что сервиса нет — предлагали оставить почту и первым узнать о запуске. Я оставил в конце 2019 года, и оповещение пока не пришло. Так Aviasales протестировал идею и узнал, что она не востребована.
Чат-боты
Допустим, я хочу сделать сервис, который по фотографиям будет подбирать людям одежду. Планирую научить этому искусственный интеллект, разработать мобильное приложение и ещё кучу всего. Звучит красиво, но рискованно.
Чтобы проверить, давайте запустим чат-бот. Пользователь заходит в него, проходит небольшой опрос и загружает свои фотографии. Во время их загрузки мы присылаем пользователю уведомление о том, что искусственный интеллект обрабатывает фото и скоро вернётся с ответом. На самом деле фотография пришла мне, и я начал подбирать образы. Вот и весь искусственный интеллект на данном этапе, а для пользователя это выглядит как магия.
Краудфандинг
Если у человека есть идея продукта, но нет денег на её реализацию, он может зайти на краудфандинговую площадку, разместить информацию о продукте, и проблемах, которые он решает. Начать собирать деньги.
Группы в социальных сетях
InDriver — международный сервис пассажирских перевозок, в котором пассажир назначает стоимость поездки, а водитель либо принимает её и приезжает, либо нет. Сервис появился в небольшом городе Якутии из группы во «Вконтакте» для местных таксистов. Когда человеку нужно было куда-то доехать, он публиковал пост: «Нужно доехать из точки А в точку Б за 300 рублей». Водители писали, могут или не могут взять заказ.
Запомните, в рамках MVP у вас может не быть продукта. Совсем. Запускаете один из видов MVP, тестируете спрос, общаетесь с пользователями, понимаете ценность, которую несёте, и только потом вкладываетесь в разработку. Не раньше.
В следующих статьях мы продолжим выкладывать лекции по быстрому погружению в продакт-менеджмент. Весь курс сразу, бесплатно и в видеоформате уже доступен на GeekBrains.