Golos.io: Отчет за февраль
Друзья, в данном посте мы представляем вам отчет работы команды @golosio за вторую половину февраля. Отчет за первую половину февраля можно прочесть здесь. Мы хотим поделиться своими планами и идеями, раскрыть карты и дать сообществу понимание того вектора, по которому мы в данный момент движемся.
Наши приоритетные задачи
1. Оптимизация скорости работы клиента tolstoy
Решение проблемы со скоростью работы сайта является самым критичным и приоритетным направлением для команды Golos.io.
Проблема нестабильной работы ресурса Golos.io заключается в том, что мы с самого начала старалась создавать 100% «чистый» клиент, а значит работать исключительно с блокчейном Голоса без посторонних хранилищ. Мы всегда ставили во главу угла неизменяемость данных и децентрализацию.
На Golos.io используются только «живые» данные, полученные напрямую с нод блокчейна:
- Если блокчейн в какой-то момент времени долго обрабатывает запросы, то Golos.io тоже долго отображает вам результаты этих запросов.
- Если Golos.io показывает ошибку номер 504, а не запрашиваемую страницу, это означает, что блокчейн не уложился в выделенное время.
- Если блокчейн по каким-то причинам потерял какую-то транзакцию или статью — Golos.io так же не отобразит вам эту транзакцию или статью.
И именно из-за этих принципов мы до сих пор находимся в неоднозначной ситуации: с одной стороны пользователи справедливо хотят, чтобы всё работало стабильно и быстро, с другой — без оптимизаций со стороны @goloscore мы не можем изменить ситуацию, сохранив при этом «чистый» клиент.
Так или иначе, ситуацию менять надо, поэтому мы пошли по пути исследования проблемы. В текущий момент времени в рамках данной задачи были предприняты следующие шаги:
- Отстроены метрики для мониторинга скорости ответа от seed-нод, теперь мы получаем эти данные в реальном времени.
Данные метрики позволили найти наиболее проблемные вызовы API, занимающие наибольшее количество времени для обработки со стороны блокчейна. Была проведена работа по адаптации библиотеки golos-js и клиента Golos.io к софтфорку 0.16.5.
Сейчас мы можем отчитаться о 90% готовности клиента tolstoy к переходу на новое API реализуемое командой @goloscore. Логика формирования структуры, возвращаемой методом get_state, была покрыта unit тестами — это позволит «безболезненно» интегрировать данный функционал в клиент tolstoy.
Однако, это не единственное направление, в котором мы движемся при решении данного вопроса. Мы рассматриваем все возможные решения, в связи с чем производится R&D по задаче, связанной с разработкой собственной системы кеширования по аналогии с jussi, используемой Steemit.
Основываясь на проведенных исследованиях, будет составлено подробное техническое задание, задача 569 будет разделена на отдельные подзадачи, которые будут к ней привязаны. Обо всех наших изысканиях в данном вопросе мы напишем отдельный технический пост, опишем там возможные пути решения проблем с производительностью.
2. Регистрация новых пользователей
Регистрация является одной из самый обсуждаемых проблем сети Голос. Разделим эти проблемы на три условные категории:
- Процедура регистрации;
- Ошибки регистрации;
- Защита от ботов.
Для упрощения процедуры регистрации новых пользователей оптимизирован процесс регистрации и внедрены региональные номера для России, Украины, Казахстана.
Теперь вместо длинного швейцарского номера от сервиса Twilio пользователи видят региональные номера той страны (России, Украины, Казахстана), к которым привязан их телефон. Пользователям из других стран отображается международный номер, предоставленный Twilio. Мы все еще находимся в поиске SMS сервисов для Беларуси и других стран, имеющих русскоязычное население.
Ошибки регистрации, как и производительность ресурса Golos.io, напрямую зависят от блокчейна Голоса. А точнее, от сид-нод периодически «выпадающих» из состояния синхронизации с блокчейном.
Основная гипотеза заключается в том, что новое API из софтфорка 0.16.5 уменьшит количество ошибок при регистрации со стороны блокчейна. Тем не менее, команда @golosio ждет решения проблемы с рассинхроном нод от @goloscore.
Для защиты от ботнетов и сжигания токенов при создании новых бот-аккаунтов был снижен регистрационный бонус с 5 до 1.650 GOLOS. Пониженный регистрационный бонус должен уменьшить количество ботоводов. Исследовав данную проблематику, мы получили оптимальный регистрационный бонус в объеме 6066.907248 GESTS. Именно такого количества достаточно для создания поста и голосования за него на 100%, в том числе данных GESTS хватает на то чтобы голосовать за контент блокчейна.
3. Мобильная разработка
3.1 iOS приложение
- Разработан UI для iOS приложения.
- Загружены макеты дизайна страниц.
В приложении доступен просмотр лент, профиля и поста. Сейчас в разработке реализуется авторизация и апвоуты. Мы тестируем и готовим альфа версию приложения для Apple Store.
3.2 Android приложение
Были разработаны, протестированы и запущены в реализацию два обновления Android-приложения.
- Был добавлен удобный компактный и ночной режимы просмотра.
- Также теперь пользователи при желании могут отключить просмотр картинок в ленте. Выбор режима осуществляется в настройках профиля.
- Также приложение теперь сохраняет ваши теги и заголовки в черновиках.
- Кроме того, в текущей версии приложения находить посты по тегам стало еще удобнее. Мы сделали разделение постов в разделе подписок на теги.
- Мы добавили редирект в комментарии. Теперь по переходу в «Комментарии» страница поста сама прокручивается до комментариев.
- Был добавлен индикатор загрузки поста и комментариев.
- Добавлено стандартное изображение для постов с тегом NSFW.
Скачать приложение Golos.io для Android можно по ссылке.
Как уже говорилось в предыдущем посте, текущая система нотификаций, доставшаяся в наследство от Steemit, работает крайне нестабильно и требует постоянных перезапусков. Необходимо отметить, что текущая система нотификаций написана на Python, при этом команда Golos.io не обладает должной компетенцией в этом языке программирования, что существенно осложняет поддержку и доработку данной системы. В связи с этим было принято решение разработать новую систему нотификаций, основанную на nodejs.
Логически систему нотификаций можно разделить на несколько компонентов/сервисов:
Сниффер сети Golos
Сервис, имеющий постоянное подключение к блокчейну. Основной задачей данного сервиса является обеспечение бесперебойного подключения к сети, корректное последовательное получение и обработка необходимых данных, обработка (фильтрация, сортировка, декомпозиция, трансформация и т.д.) полученных данных для передачи в сервис брокера сообщений, и, непосредственно, передача обработанных данных.
Брокер сообщений
Сервис, обеспечивающий гарантированную доставку сообщений, устойчивый к сбоям инфраструктуры. В данном сервисе должна быть реализована логика распределения сообщений по соответствующим очередям для дальнейшей передачи в push notification service.
Сервис доставки нотификаций клиентам
Это видимая пользователям часть сервиса. Для обеспечения хронологии и целостности доставляемых сообщений важно проработать корректную обработку разрывов соединения и прочих ошибочных ситуаций. На данном этапе необходима интеграция с текущими компонентами клиента tolstoy, а именно системой авторизации, системой событий и websocket.
На базе вышеперечисленных компонентов мы планируем в самое ближайшее время реализовать прототип системы онлайн-оповещений по следующим пунктам:
- Уведомление об upvote статьи пользователя;
- Уведомление о входящем трансфере;
- Уведомление о новом комментарии к статье пользователя.
Далее функционал данного сервиса будет расширяться, будут добавлены уведомления по всем актуальным событиям. На базе этого сервиса так же будет выстраиваться система оффлайн оповещений о событиях, которые произошли, пока пользователь был не в сети. Пул задач уже декомпозирован на соответствующие задачи в Github, которые привязаны к задаче 573.
5. Разработка редактора статей и комментариев
Можно найти множество жалоб на неудобство работы с текущим редактором Golos.io. В данный момент, не считая существующих багов, у редактора крайне слабая реализация markdown, работа визуального редактора может быть лучше. В связи с этим, нами было принято решение разработать новый редактор, лишенный указанных недостатков. С дискуссией по разработке редактора можно ознакомиться по ссылке.
Можно выделить следующие пункты:
А. Было решено отказаться от html верстки текстов.
Взамен использования html верстки мы предлагаем использовать markdown верстку текстов. Таким образом, можно будет существенно сократить объем служебных тегов и поместить больше полезной информации в пост.
В данный момент редактор поддерживает стандартные способы организации верстки markdown, такие как
- Heading - # / ## / ### / #### / ##### / ###### /
- Bold - **полужирный** или __полужирный__
- Italic - *курсив* или _курсив_
- strikethrough - ~~зачеркнутый~~
- Code - ? < -
- Quote - > / >> / >>>
- Generic List - - маркированный список
- Numbered List - 1. 2. 3. 3.1
- Table - Заголовок 1 | Заголовок 2 | Заголовок 3 :---------- | :----------: | -------: *Я1 Р1* | ***Я2 Р1*** | *Я3 Р1* **Я 1 Р 2** | Я 2 Р 2 | **Я 3 Р 3**
- Link -
> / [Голос](https://golos.io)
- Image - ![Альтернативный текст](https://адрес_ссылки_на_изображение.jpg) / ![Альтернативный текст](https://адрес_ссылки_на_изображение.jpg "Подсказка") / *[![30 second exposure](ссылка_на_изображение.png)](адрес_ссылки)
Помимо стандартных способов разметки информации, была добавлена возможность использования дополнительных «тегов». Например ссылки на видео в данный момент обрабатываются при помощи следующей верстки @[youtube](https://www.youtube.com/watch?v=dQw4w9WgXcQ)@[vimeo](https://vimeo.com/channels/staffpicks/256889818)
В дальнейших планах — добавить поддержку функции выравнивания текста (по левому краю, по центру, по правому краю) и выделения текста цветом. Несмотря на то, что у нас есть большое желание полностью отказаться от html, частично данный формат будет поддерживаться в виде возможности автоматически конвертировать html в markdown. В данный момент новый редактор постов находится на этапе прототипа. Реализован основной функционал верстки markdown. Ознакомиться с прототипом можно на sandbox.golos.io.
Б. С целью улучшения опыта использования редактора было принято решение о переработке дизайна.
Дальнейшие шаги по обновлению редактора:
- Проработка визуального оформления;
- Написание unit-тестов;
- Верстка редактора согласно новому визуальному оформлению;
- Программирование поведения всплывающей панели инструментов, меню добавления мультимедиа контента;
- Функциональное тестирование.
Этот набор задач будет декомпозирован на соответствующие задачи в Github, которые будут привязаны к задаче 453.
6. Интеграция рекомендательной системы в клиент golos.io
Несмотря на достаточно высокие показатели посещаемости платформы Golos.io, перед нами стоит задача по увеличению вовлеченности пользователей и просмотров страниц. Наша гипотеза заключается в том, что создание персональной рекомендательной системы увеличит количество просматриваемых страниц на каждого отдельно взятого пользователя. По данному направлению ведется совместная работа с командой Сyber Аnalytics.
В текущей версии системы реализованы 3 типа запросов:
- Интересные посты для пользователя;
- Интересные посты для пользователя в контексте конкретной статьи;
- Статьи похожие на конкретную статью.
Система была передана командой Сyber Аnalytics команде Golos.io и в данный момент мы заняты решением инфраструктурных и эксплуатационных задач по её запуску и интеграции в Golos.io.
После того как система будет полностью протестирована и принята в эксплуатацию, перед нами встает еще несколько задач:
- Подготовка макетов дизайна;
- Написание unit-тестов;
- Обработка ошибок;
- Написание компонентов, связанных с работой рекомендательной системы для клиента Golos.io.
Ход решения данной задачи вы можете наблюдать в задаче 574 и во всех привязанных к данной задаче подзадачах.
7. Реализация private messaging
Мы планируем реализовать возможность использования приватного общения с использованием блокчейна Голс. Данная задача в формализуется и декомпозируется, определяются функциональные особенности и формат ее реализации. Мы рассматриваем следующие варианты реализации:
- Отдельное приложение для обмена сообщениями;
- Интеграция сервиса в клиент tolstoy.
Были выделены основные функциональные возможности будущего прототипа:
- Получение списка входящих сообщений;
- Получения списка отправленных сообщений;
- Просмотр отдельно взятого сообщения: как входящего, так и исходящего;
- Отправка приватного сообщения;
- Возможность ответить на входящее сообщение;
- Формирование списка контактов;
- Нотификации о поступивших событиях относящихся к объекту сообщений пользователя.
В качестве системы нотификации мы собираемся использовать описанную выше систему. Со стороны блокчейна private messaging реализован в виде плагина, который весьма небогат функциональностью. По сути у нас есть три основных вызова:
- Отправка сообщения;
- Получение отправленных сообщений;
outbox_r private_message_plugin::private_message_plugin_impl::get_outbox(const outbox_a &out) const
- Получение входящих сообщений.
inbox_r private_message_plugin::private_message_plugin_impl::get_inbox(const inbox_a &in) const
Последние два и хотелось бы немного обсудить.
В текущей версии API нет возможности указывать параметры фильтрации и лимитов. Например, если во входящих сообщениях будет 100000 сообщений, то в ответ придут все сообщения. Также данная проблема есть и в других API вызовах, например, метод get_account_history возвращает всю историю, нет возможности указать фильтр, например, получить историю transfer. Методы get_discussions_by_trending, get_discussions_by_created, get_discussions_by_active и аналогичные возвращают поле с полным списком active_votes, который в свою очередь может содержать более 1000 записей. И, например, для отображения лент в клиенте этот полный список не нужен, а нужно лишь количество апвоутов у каждого поста. Полный список тянет за собой пол-мегабайта (!) никому не нужных данных. У метода get_active_votes нет параметра, с помощью которого можно указать дату, за которую необходимо отобразить апвоуты.
Мы создали задачу на Github и хотим открыть диалог к сообществом и командой @goloscore о дальнейшем функциональном преобразовании API ядра.
8. Разработка системы аналитики
В работе по направлениям управления продуктом и продвижения мы столкнулись со сложностью анализа данных из блокчейна Голоса, не реализуемых существующим инструментарием (блокчейн-эксплорером) и сторонними системами аналитики (Google Analytic и Яндекс Метрика). Поэтому, для базировании управленческих решений на системе данных и оценки правильности вектора развития нашего продукта, мы выделили ключевые метрики, которые будут вынесены в публичную плоскость в виде системы аналитики и анализа golos.io. Фактически, в одном месте будут собраны все важнейшие показатели, описывающие жизнь проекта.
Описание технического задания и текущую дискуссию можно увидеть в задаче 575.
9. Разработан и тестируется телеграмм-бот, помогающий с обменом Голосов на фиатные валюты:
- Написано ТЗ на разработку;
- Написан код бота;
- Проводится тестирование.
10. Открыто зеркало блог-платформы в сети TOR
Теперь блокировки, цензура и санкции не означают для платформы сбои в работе. С помощью Tor пользователи могут сохранять анонимность в Интернете при посещении сайтов и ведении блогов. Чтобы увидеть Golos.io в Tor надо скачать Tor Browser здесь и установить его. После этого ввести адрес сайта golos4naqn64true.onion и перейти по нему.
11. Поправлено отображение наград
Теперь пользователи сами определяют, как им будут отображаться награды. В настройках можно выбрать подходящее отображение количество знаков после запятой. По умолчанию, для визуализации голосования новичков с небольшой силой голоса (в 0,01 MGest) показываем 3 знака. По достижению пользователя 0,1 MGest отображается 2 знака после запятой.
12. SMM направление
- Усилена команда (райтер, таргетолог, дизайнер на аутсорсе);
- Разработан и внедрен новый визуальный стиль подачи материала для социальных сетей;
- Создан канал в Телеграме с лучшими постами и новостями площадки Golos.io — https://t.me/golos_best! Подписывайтесь!
13. Привлечение и поддержка пользователей
На данном этапе развития платформы мы проводим тестовые запуски рекламных активностей и готовим площадку для продвижения. Изучаем на небольших суммах конверсии на разных каналах, посылах и целевых группах:
- Настроена и запущена в тестовом режиме рекламная кампания (контекст в Google, таргетинг и ретаргетинг в Facebook и Вконтакте);
- Запущена в тестовом режиме баунти-программа для популяризации Golos.io через соцсети;
- Настроена аналитика для рекламной кампании (расчет целей, воронки в Google Analytics и Яндекс Метрика, трекинг аудиторий через пиксели Facebook и Вконтакте);
- Итоги тестового продвижения будут использоваться после проведения хардфорка для проведения полноценной кампании.
14. Расширена команда Мы активно заняты поиском новых сотрудников и расширением команды. В ферале к команде Golos.io присоединились две прекрасные девушки:
- комьюнити-менеджер Юлия @yulia.rodnikova;
- сотрудник отдела поддержки пользователей Алеся @chinpu.
15. Формализован и внедрен Agile
- Разработка переведена на Agile (Scrum);
- Описан свод (workflow\gitflow) правил для разработчиков и тестировщиков. Будет опубликован позже.
16. Запущена делегатская нода
Мы считаем, что ключевыми делегатами должны стать действующие разработчики приложений и ядра блокчейна Golos. Логичным шагом мы видим запуск своей делегатской ноды, наряду с уже действующими делегатскими нодами команд таких проектов на блокчейне Golos, как Goldvoice и Steepshot, нодой команды разработчиков ядра блокчейна Golos•Core.
Наши делегатские инициативы всегда будут основаны на логике и беспристрастной аналитике тех или иных инициатив сообщества и направлены исключительно во благо всех участников и жителей блокчейна Golos.
Чтобы поддержать делегата @golosio надо:
- зайти на страницу https://golos.io/~witnesses
- нажать на значок «вверх» слева от имени пользователя @golosio
- ввести пароль от своего аккаунта и нажать «Войти».
Будем благодарны за вашу поддержку.
Заключение
Выше был описан достаточно большой пул задач, прогнозировать время выполнения которых достаточно сложно. Разработка это не действие, выполняемое по алгоритму, где все решения прописаны в регламенте и можно просто делать механическую работу. Во время разработки периодически возникают различные непредвиденные ситуации, всплывают нюансы унаследованного кода, возникают сложные инженерные задачи, и всплывают небольшие, но крайне важные задачи, которые надо сделать здесь и сейчас.
Выходом из такой ситуации мы видим внедрение гибкой методологии разработки, более известной как agile, и начиная с января месяца мы приступили к внедрению agile. Основным инструментом для ведения SCRUM процесса выступает Zenhub. Установив данное дополнение к браузеру вы сможете видеть наши доски и статус разработки. Выстраивание процессов разработки невозможно сделать за пару дней, мы постепенно внедряем в повседневную работу больше SCRUM практик.
В связи с этим хотим сообщить, что команда golos.io переходит к итеративной разработке. Поэтому раз в две недели мы будем выпускать пост о текущем статусе разработки. Данная идея направлена на то, чтобы сделать процесс разработки более прозрачным для всех.
-
Подписывайтесь на официальный аккаунт блог-платформы Golos.io @golosio чтобы быть в курсе развития проекта! Телеграм для ваших вопросов — https://t.me/golos_support. Лучшее на Голосе — https://t.me/golos_best
Есть предложения, как сделать Golos.io лучше? Пишите предложения в Issues на нашем Github или в наш Телеграм-канал!
С уважением, команда Golos.io @golosio: @alex-firsov, @b1acksun, @dan-kinescop, @dekol, @insider, @jevgenika, @grishamsc, @muhazokotuha, @nickshtefan, @pav, @sualex, @yulia.rodnikova, @yuri-vlad.