История о том, как я морду Стимита поднимал

На вчерашнем сеансе «Вечер с Голосом» зашла речь о том, что новичок соберет клиент Стимита за 2 часа. Сейчас я это жестко опровергну, поскольку я потратил на это ~ 2 недели. И сейчас объясню почему. # История. Итак, для того, чтобы развернуть морду лица сайта Стимита, нужен сервер под системой управления Linux (MAC тоже подойдет). Идем [НА](https://github.com/steemit/steemit.com), смотрим инструкцию и видим, что все вроде понятно. Копируй, вставляй, энтер нажимай! ### Проблем раз. Но не тут то было! Первая проблема возникла при миграции базы данных. Мой Mac никак не хотел воспринимать пароль NULL, пока я не заменил его на две пустые кавычки (""). Поиск проблемы, как у новичка, занял несколько дней - [вот подтверждение](https://github.com/steemit/steemit.com/issues/320). ### Проблема двас. Следующая проблема возникла при попытке запустить клиент, который наотрез отказывался слушаться. После долгого консилиума с разработчиками, выяснилось, что в исходном коде не хватает папки /tmp, которую пришлось добавить ручками, а после - исправить readme, дабы никто больше с этим не сталкивался. После создания пустой папки, морда лица запустилась и стала доступна к тестированию. ### Проблема трисс. ОК! Думаю щас дело пойдет! Перехожу в свой персональный блог, вижу кружок крутящийся, а в консоли кучу ошибок: PostsList --> Missing content key mapalanet-first-travel-community-in-the-steemit-eco-system PostsList --> Missing content key the-theory-of-life-lines-applied-to-steemit-science PostsList --> Missing content key teoriya-linii-zhizni-v-primenenii-k-steemit-i-razvitie- ……... Ох.. Опять!! После долгих попыток самостоятельной борьбы с кодом, [вновь создал тикет на гитхабе](https://github.com/steemit/steemit.com/issues/438), где мне Гуру подсказали, что нода (экземпляр блокчейна), которая по-умолчанию прописана в конфиге сайта, и с которой он контактирует — устарела и не обновлена. Но как я мог это знать? )) ### Запуск! В итоге, более чем через неделю борьбы - сайт запустился и я пошел ковырять его.. Первое, что бросилось в глаза - это Redux и ReactJs (библиотека Фейсбука в основе Стимита). Может это и продвинутые технологии, направленные на обеспечение взаимодействия пользователя без перезагрузки страницы, но!. Они сложны, и людей, кто может программировать на них - мало. Это раз! Второй вопрос, который у меня возник, - а зачем тут такие навороты с этими библиотеками, если сайт все равно чрезвычайно медлителен из-за жесткой привязки к блокчейну? Каждое действие требует ответа блокчейна, а это.. намного медленнее, чем запросить базу данных. Это два! И третье! Когда я открыл документацию Redux и увидел, что приложение «Hello World» на нем - это страница кода - я ужаснулся и решил, что никаких достойств у Редукса для меня нет, уж извините. ### Всем недостаткам - недостаток! Ну а теперь к конкретному недостатку, который заставил меня отложить в сторону морду лица Стимита, отказавшись от ее использования для создания стороннего клиента. Этот недостаток звучит так - API связывает руки. Все дело в том, что мне нужна свободная фильтрация по тегам с возможностью исключающего выбора, вплоть до всех 5 штук. Т.е., например, мне нужны все статьи, которые содержат именно вот эти теги, и возможно, содержат что-то еще: > #mapala #russia #moscow (именно в таком порядке!) Сейчас возможность такой выборки в API — нет. Нам обещали ее 2 месяца назад, но нет никаких гарантий, что она будет работать именно так, как нам нужно, если она вообще будет. **Как итог - при непосредственной работе с API блокчейна, создать что-то гибкое - не получается.** ### Мы: - Зависим от ошибок кода разработчиков Стимита. - Зависим от изменений кода разработчиков Стимита (как с измененным API, который не был изменен на той ноде, к которой было настроено подключение по-умолчанию). В случае, если бы это произошло "на живую» - нам бы такой поворот сложил бы сайт. - Зависим от возможностей API, которые на данный момент не позволяют реализовать наши потребности. ### В связи с этим, выход: Использовать базу данных mySQL, в которую портировать блокчейн и работать с ней, как с обычным сайтом, используя любой фреймворк, на котором может работать даже обычный школьник. С портированием базы данных нам помогает @primus, остальную разработку я пока веду сам. На этом все. Удачи всем! Теперь за 2 часа уж соберете ;-)) Когда все ошибки исправлены..
dr2073Ответил dark.sun
3 года назад

Круто - я сколько ни пробовал настроить ноду стима и голоса на маке - у меня это так и не получилось - куча разных косяков в процессе вылезает =(

Ответить
dark.sunОтветил dr2073
3 года назад

Тут все же не нода, а только лишь клиент, вроде того, в котором мы сейчас комментарии пишем. Ноду поднять у меня тоже не получилось, подозреваю, что дело в том, что для запуска сети реально нужна сеть - т.е. несколько компьютеров, подключенных как делегаты. Не пробовал, но на досуге затестю) Пригодится еще, полагаю. Поскольку.. В код Голоса залезть все же очень хочется)

Ответить
dr2073Ответил dark.sun
3 года назад

Ну ноду на убунте запустить то не проблема, там просто с библиотеками на маке проблемы разные

Ответить
dark.sunОтветил dr2073
3 года назад

Если имеется ввиду запустить ноду и подключить ее к публичной сети -- то да, проблем нет, кроме библиотек и зависимостей. А если хочется запустить тестнет локальный - то.. у меня пока как-то не пошло. :)

Ответить
lehardОтветил dark.sun
3 года назад

Насколько я понял, многие делают сайты и приложения для Стима при помощи Piston от @xeroc. Это и есть АПИ или это что-то другое?

Ответить
dark.sunОтветил lehard
3 года назад

Я не ковырял этого монстра еще) Пистон создан для упрощения взаимодействия с блокчейном, для создания транзакций, для переводов, и всего такого прочего. Пригодится! Но может и свое будет написать не так уж и проблемно..

Ответить
hipsterОтветил dark.sun
3 года назад

Спасибо за указания на сложности с первоначальной установкой. Это все поправимо.

По поводу Redux и ReactJS: Вы сами себе противоречите: говорите, что нужно ждать подтверждения из блокчейна, а это плохо влияет на пользовательский опыт. Несмотря на то, что стэк выбирали не мы, даже если бы мы решали эту задачу мы бы все равно выбрали этот стэк. Ответ очень прост. Стэк React+Redux на данный момент самое производительное решение из тех, что хорошо адаптировано прогрессивными веб-разработчиками.

По поводу API: экосистема Graphene - одна из самых молодых в блокчейн индустрии. А Стиму от роду полгода. Не удивительно, что многого там нет. Но зато есть решения типа GolosSQL которое можно использовать прямо сейчас. Повторюсь, мы считаем что привлечение разработчиков - это ключевая задача на данном этапе, а поэтому будем искать способы решения задач, которые важны нашему сообществу. Приходите на Github

Ответить
dark.sunОтветил hipster
3 года назад

Спасибо за развернутый ответ! Я отталкиваюсь от тех реалий, в которых нахожусь сам. Чтобы мне начать писать на Redux+React, нужно изучить целую технологию, но у меня нет цели изучать технологию ради технологии, у меня есть цель - создать сообщество. Людям по-большому счету, все равно, работает эта штука на 20% быстрее, или на 20% медленнее - главное, что работает. Все остальное - технические тонкости, о которых знают только программисты. Ну а время свое.. Я бы лучше потратил на изучение кода и технологии блокчейн, это куда более качественная его инвестиция)

Ответить
hipsterОтветил dark.sun
3 года назад

Никто не мешает сделать клиент на стэке, которые нравится! Можно взять консерваторио (наша версия пистона от @xeroc). Там ванильный бутстрап :-)

Ответить
t3ran13Ответил dark.sun
3 года назад

За некоторой сложностью кроется простота. Я сам против излишней сложности, но в данном случае тут попытка перенести все расчеты на компьютеры пользователей с целью снижения нагрузки на сервера. А с учетом что нынче почти у каждого нормальный ноут или четырехядерный телефон, то это уместно. да, это сложно для новичков. Но садаясь за руль вы учите правила дорожного движения, приходя на уроки физики вы учите основные понятия... все сводится к тому, что бы все понимали друг друга и не нужно было неделями разбираться почему не работает, или почему сделано так.

Ответить
peterzОтветил dark.sun
3 года назад

Есть готовое решение в виде steemdb и морды к нему. Там Mongo вместо MySQL, так что даже портировать ничего не нужно, просто перекидать JSON из блокчейна в базу

Ответить
on0toleОтветил dark.sun
3 года назад

Теперь за 2 часа уж соберете ;-)) Когда все ошибки исправлены.. была идея поднять веб морду стима с выборкой по ру тегам, но пока взял таймаут...может и не пригодится с появлением Голоса

Ответить