DOU Проектор: GeekInformer — современный новостной агрегатор для гиков
В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .
Идея
Меня зовут Тимофей Лавренюк, работаю в компании Provectus, занимаюсь front-end разработкой.
Первые попытки. Желание сделать что-то свое посещало меня и раньше. Еще во времена обучения я принимал участие во всеукраинском IT-чемпионате «Золотой Байт» с приложением для туристических фирм. С ребятами мы сделали приложение, где жители города или туристические фирмы создают маршруты для туристов. Реализовали дополненную реальность — снимаешь камерой и метки показывают, куда идти. Выиграли тогда номинацию «стартапы», где главным призом была поездка в Кремниевую долину на одну неделю. После общения со многими стартаперами мы поняли, что приложение не взлетит.
Но вдохновившись поездкой, мы решили создать Muzarium — приложение, которое делает посещение музеев более увлекательным и интересным. Мы включили в него вопросы, элементы квеста, договорились с десятком музеев, ездили по выставкам. В итоге все потухли, проект до сих пор делается, неизвестно когда выпустится и запустится ли вообще. Наши основные ошибки на тот момент заключались в том, что мы не смогли сделать стабильный проект и делали его очень долго. Но на будущее все учли и стали двигаться дальше.
Новая идея. Год назад у меня появилась идея создать новостной агрегатор. Смысл достаточно прост — если вы хотите узнать последние новости из мира технологий и не тратить время на поиск новостных ресурсов с хорошим контентом, вам будет интересен проект, который позволит читать новости, смотреть видео и слушать подкасты с лучших ресурсов в одном приложении.
Много лет я пользовался RSS читалками, но этого всегда было недостаточно. В сети публикуют много интересных видеообзоров, иногда хочется послушать подкасты, но нет нормального места, где бы они все были собраны вместе.
Также хотелось, чтобы в одном месте можно было собрать весь контент о конкретном тренде. Например, когда Google анонсировал Google Pixel, через несколько дней хотелось бы почитать новости о нем, посмотреть обзоры, прослушать подкасты.
С целью решить эти проблемы и создавался проект GeekInformer.
Проект рассчитан на узкую аудиторию, а именно на людей, которые интересуются технологиями и хотят потратить минимум времени, чтобы узнать максимум новостей. Также узкая тематика позволит уделить больше времени мелочам.
Реализация
Вначале я решил не делать back-end и нативное Android приложение, минимизировав затраты времени на разработку. Я сделал Cordova приложение под Android (по сути портированный сайт), написал минимальный back-end с помощью облачной базы Parse (от Facebook). Дизайн также пришлось сделать самому. Чтобы с ним особо не возиться, решил использовать Material Design. Старался много времени уделить UX и проработке мелочей. Первую версию получилось написать всего за 3 месяца.
Затем зарелизил проект и выложил его обзор на youtube канале, где мы несколько лет с другом снимали и выкладывали обзоры устройств и гаджетов. И далее без раскрутки стали появляться пользователи, некоторые блогеры даже написали обзоры. Стало понятно, что смысл в проекте есть. В дальнейшем Facebook закрыл Parse, и это стало отличным поводом начать разработку полностью новой версии — свой back-end и база, обновление front-end, изменение дизайна и нативное Android приложение.
Контент. Новостные ресурсы в базу я добавлял самостоятельно. Смотрел, что каждый из себя представляет. Это как популярные новостные ресурсы стран СНГ, так и блогеры с хорошим контентом, со многими из них я списывался лично. Блогерам очень понравилась идея проекта, так как он позволял показывать их новости тем людям, которые о них никогда не слышали. Например, если пользователь читал новости о Google Pixel, там показывались новости и от именитых новостных ресурсов, и от малоизвестных блогеров. Все были равны, объединяло лишь то, что у них был контент о Google Pixel.
В базе сейчас находится 150 ресурсов. От них все время собираются новости, видео и подкасты, затем очищаются от мусора, нормализуются и добавляются в базу и кэш.
Пользователь может прямо на сайте открыть новость, посмотреть видео и послушать подкаст.
Когда человек регистрируется, его просят подписаться минимум на 5 ресурсов. То есть ему дают список самых популярных и читаемых сайтов. Пользователь выбирает самые релевантные для себя, и у него формируется своя новостная лента. В дальнейшем он пополняет список своих новостных источников из базы на свое усмотрение.
Также он может подписываться на различные тренды. Это может быть гаджет, устройство, сервис, ОС и т.п.
Технологии. Back-end у нас на NodeJS. База — MongoDB. Для кэша использую Redis, для поиска — Elastic Search. Все хостится на Azure. Сайт работает по протоколу HTTP2 с TSL шифрованием.
Front-end — на React(ES7) + Redux. Сайт рендерится на сервере. Сборка — WebPack 2. Также используется Service Worker для кэширования новостей и работы сайта Offline.
Android приложение пока на Java 7 + Retrolambda. Используется RxJava, Retrofit 2, Realm и EventBus. Думаем перейти на Kotlin.
Думаю, для подробного описания каждого из этапов разработки есть смысл сделать отдельную статью, так как за год произошло много чего интересного, да и статья будет слишком большая. Но за время разработки проекта я сделал для себя важное открытие. Перед разработкой проекта я был простым front-end разработчиком, который хотел поработать со связкой React+Redux, а после уже пришлось освоить разработку на NodeJS, настройку Ubuntu и Nginx для размещения проекта, деплой и настройку Redis с Elastic Search. Также пришлось освоить Java и разработку под Android, чтобы помогать стажерам и вовремя делать рефактор кода и добавлять различные мелочи. Все это показало, что можно не зацикливаться на чем-то одном и стирать грани между различными языками и технологиями. Не везде это будет полезно, но когда создаешь стартап и у тебя минимум разработчиков — must have.
Команда. Так совпало, что в Provectus, компании, где я работаю, есть внутрикорпоративные курсы для PM-ов, называются Формула 1. В рамках курса после прослушанных лекций мы берем стажеров и запускаем с ними тестовые проекты. Для нас это опыт управления, для них — первые шаги в IT.
Одним из таких проектов в рамках последней стажировки и стала версия 2.0 проекта GeekInformer. Стажировка началась с 9 человек: 2 front-end разработчика, 2 тестировщика и 5 Android разработчиков. Позже присоединился один дизайнер, и я был как PM + Dev.
До конца со мной дошел один Android разработчик (Владимир Захаров), который несмотря на то, что работает, продолжает помогать мне и сейчас. Эта тема ему очень интересна. Весьма инициативный парень, предлагает свои идеи, сам находит и исправляет баги.
Результаты
Сейчас в Play Market у приложения уже около 5000 скачиваний и 400 отзывов. Сам сайт в среднем посещает
Сейчас в тренде искусственный интеллект и машинное обучение. Хочется сделать рекомендательную систему на основе поведения пользователя — персонализированную новостную ленту. Также хочется расширить тематику. Например, сейчас тематика — «технологии», в будущем я хочу обязательно ввести «игры» и «разработку». Будет удобно в одном месте читать контент о конкретной игре или о каком-то фреймворке. Каждая тематика рассчитана на конкретную аудиторию.
Уже начал создавать версию под iOS на Swift 3. Также мне помогают с разработкой нативного приложения под Windows 10.
Ищу опытных iOS разработчиков, которые также, как и я, интересуются технологиями и готовы уделять свое время этому проекту. Также буду рад поддержке опытного инициативного дизайнера.