Уважаемое сообщество STEEM,
Я очень рад наконец-то представить этот проект общественности. Итак, познакомьтесь:
https://steemitimages.com/0x0/https://ipfs.io/ipfs/QmWJNhrmzWLB6GhBiqb92vWo4b46nPmhRUzb6vQEu1BFgb
DTUBE.VIDEO
Что такое DTube?
DTube – это приложение, полностью написанное на javascript, которое запускается в браузере и позволяет загружать и смотреть видео поверх сети IPFS. Кроме того, оно использует STEEM в качестве базы данных и позволяет получать вознаграждения за ваши загрузки.
Это может напомнить вам о давнишнем анонсе проекта SteemQ, который собрал почти пять тысяч долларов вознаграждения, но так и не был выпущен и в итоге подвергся ребрендингу. Более года спустя он по-прежнему не функционирует, и даже нынешняя альфа-версия использует для всего внутренний сервер, поэтому приложение по-прежнему централизовано. Уверен, что я не единственный человек, разочарованный SteemQ.
Я выбрал другой подход. Сначала создайте что-то – потом говорите. Если вам интересно, я сделал все сам (конечно же, не без помощи библиотек с открытым исходным кодом) и, начав с нуля, пришел к тому, что есть сейчас, за 4 месяца.
Большая часть этой статьи будет технической и, может быть, не очень интересной для некоторых людей, но я уверен, что многие из моих подписчиков заинтересованы в таких дискуссиях, поэтому я объясню, как всё работает.
Как пользоваться DTube
Вход в систему
- Введите свое имя пользователя в STEEM
- Введите свой приватный постинг ключ, вы можете найти его вот так:
Многопользовательский вход
У Youtube и Facebook есть эта замечательная функция, благодаря которой вы можете запросто подключить к своему аккаунту сразу несколько каналов и легко переключаться между ними. Я уверен, что я не единственный пользователь STEEM, владеющий несколькими аккаунтами, и использование разных браузеров или ботов для апвоута со всех аккаунтов быстро надоедает. В DTube вы можете войти в систему с такого количества аккаунтов, с какого захотите, и переключаться между ними.
Я не знаю, почему в Steemit все еще нет этой функции.
Настройки
DTube имеет меню настроек, доступное из любой части приложения. Оно позволяет настраивать силу голоса, фильтровать NSFW-контент аналогично SteemIt.com и задавать параметры IPFS. Шлюз IPFS – это место, откуда загружаются файлы, а API - это то, что мы используем для загрузки.
Загрузка
Во-первых, вам необходимо войти в систему, чтобы получить доступ к странице загрузки. Затем просто добавьте видео, задайте изображение предпросмотра, и, наконец, заполните тексты для блокчейна и отправьте его!
Если все пойдет хорошо, вы будете перенаправлены на свое видео после отправки, и в зависимости от шлюза и скорости соединения, по прошествии от 0 до 30 секунд должно начаться воспроизведение.
Просмотр видео
В настоящее время существует 3 основных способа просмотра контента на DTube. Вы можете перейти на главную страницу и открыть категории НОВЫЕ, АКТУАЛЬНОЕ и ПОПУЛЯРНОЕ. Они работают так же, как на SteemIt.
Вы можете попасть на канал определенного пользователя, перейдя на него по прямой ссылке, например, https://dtube.video/c/curator – это мой тестовый аккаунт.
Наконец, вы можете воспользоваться поиском в верхней панели, более подробная информация об этом будет представлена далее.
Как работает DTube
Использование Блокчейна STEEM в качестве базы данных
Поскольку мы хотим, чтобы DTube был действительно децентрализованным, мы не можем иметь сервер базы данных и посылать на него запросы. Естественным решением будет использование блокчейна. STEEM обладает множеством преимуществ по сравнению с другими блокчейнами. Он быстрый (1 блок в 3 секунды). Он бесплатный, любой может использовать его без необходимости вносить валюту в какой-либо форме, а транзакции не имеют комиссии. Кто захочет платить деньги за загрузку видео, за комментарии к видео или даже за апвоуты? Никто. В качестве дополнительного бонуса блокчейн STEEM уже имеет механизм вознаграждения.
Любое видео, загруженное на DTube, становится контентом STEEM и может получать вознаграждение в течение 7 дней. DTube не использует ни заголовок, ни тело контента для хранения информации, поэтому если вы не хотите, чтобы ваше загруженное видео отображалось в вашем блоге, вы можете отредактировать или удалить его, при этом видео останется неповрежденным на DTube. Хотя можно было бы ничего не отображать на других платформах, таких как steemit.com или busy.org, я считаю, что текущее поведение будет полезно и поможет росту платформы и вознаграждениям пользователей.
Использование IPFS в качестве статического хранилища файлов
IPFS является протоколом, который позволяет децентрализовать хранение файлов. Принцип, лежащий в его основе, называется Распределённые Хеш Таблицы (DHT - Distributed Hash Tables). Тот же принцип также поддерживает сеть BitTorrent. Подобно тому, как криптовалюта использует асимметричную криптографию, сети DHT будут хешировать контент, чтобы иметь возможность идентифицировать файл. Хеш становится идентификатором файла, и это так же просто, как ре-хеширование файла и проверка соответствия хешей, что гарантирует, что файл, который был нам отправлен, является оригиналом.
Почему бы тогда не использовать Torrent? Torrent, возможно, уже содержит больше контента и более популярен. Однако Torrent не был создан для Интернета. Некоторые имплементации, такие как WebTorrent, пытаются сделать его рабочим, но для этого все еще требуются некоторые "гибридные" клиенты, которые будут выступать в качестве мостов для передачи файлов с торрент-клиентов, таких как "μTorrent", на веб-клиенты, работающие в браузере. Не очень удобно и еще менее эффективно. Я уверен, что многие из вас с удовольствием использовали PopcornTime для просмотра какого-нибудь "пиратского" контента, но создание чего-то подобного, что работает внутри браузера без необходимости запуска гибридных клиентов для соединения с людьми, к сожалению, невозможно.
IPFS является более новым, открытым и активно разрабатываемым протоколом. Он может рассчитывать на светлое будущее. Использовать его в качестве основного средства хранения для этого проекта было для меня очевидно.
Стоимость хранения на IPFS
IPFS крут, но без волшебства. Кто-то должен раздавать файлы, а ваш браузер не может постоянно хранить огромные файлы (в большинстве браузеров локальное хранилище ограничено 50-ю МБ), поэтому раздача через приложение напрямую на сегодняшний день невозможна. Хотя моя первая идея заключалась в том, чтобы попросить некоторых заверителей запустить несколько IPFS-нод, после нескольких бесед стало ясно, что это создаст больше проблем, чем решений, поскольку большинство заверителей не разбирается в технических деталях, а корректный запуск и настройка IPFS-ноды представляется для большинства из них достаточно трудной задачей. Я по-прежнему считаю, что это решение является единственно верным, но мне несомненно нужно настроить докеры или что-то простое, чтобы заверители могли активней присоединяться к сети DTube и начать раздавать файлы (и зарабатывать часть вознаграждений).
Вместо этого я занялся поиском существующих IPFS-нод и связался с владельцем IPFS Store, веб-сайта, который позволяет вам платить биткойнами за хранение ваших файлов в сети IPFS. После получения нескольких положительных ответов и инструкций от @nannal (на steem, twitter и т.п.), я понял, что нашел своего человека.
Недавно я создал аккаунт @dtube. Этот аккаунт будет использоваться для сбора 25% авторских вознаграждений DTube. 10% этих сборов будут использованы для оплаты долговременного хранения файлов в IPFS Store. Цена составляет 0,044 доллара США за ГБ в месяц. Так, например, скажем, вы загружаете 100 МБ видео, которое зарабатывает 10 долларов вознаграждения, тогда $0,25 отправится на @nannal и обеспечит сохранность данных в течение ~57 месяцев. Как только это время пройдет, пользователи должны будут либо заплатить сами (криптовалюта, конечно, принимается), чтобы файлы раздавались, либо раздавать их непосредственно со своего собственного компьютера и соединения.
Дизайн
Большинство разработчиков знают поговорку "не изобретай колесо". То же самое относится к дизайну и пользовательскому опыту. Ведущая видео-платформа YouTube успешно работает уже много лет, и подражание ей имеет смысл. Особенно учитывая, что я ничего не смыслю во фронтенд разработке и дизайне интерфейсов. Я попытался скопировать внешний вид YouTube с использованием фреймворка Semantic UI. Хотя я горжусь тем, как он выглядит, я уверен, что некоторые более талантливые люди дали бы мне пощечину за то, насколько плохо он выглядит и работает.
Я открыт для предложений. И если вы являетесь веб-дизайнером с хорошим портфолио и опытом работы с Semantic UI, не стесняйтесь обратиться ко мне в steemit.chat.
Использование AskSteem для поиска
Быть может, обычным людям трудно это понять, но поиск на самом деле оказался самой сложной проблемой, мешающей сделать DTube жизнеспособным продуктом. Если у вас стандартная база данных SQL или Mongo, поиск выполняется легко. Однако здесь нашей базой данных является блокчейн STEEM, и мы не можем осуществлять поиск путем непосредственного коммуницирования с нодой steem. Я понимаю, что поиск является низкоприоритетной функцией для блог-платформы, особенно если учесть, что Google индексирует весь контент и предлагает API поиска. Но в DTube пользователи будут часто его использовать.
Я связался с @thekyle, компетентным разработчиком, который постит на SteemIt, но не получает и половину того вознаграждения, которого заслуживает. Недавно он представил AskSteem, поисковый движок для блокчейна STEEM. Его сервис использует базу данных ElasticSearch и индексирует новые видео в течение 15 минут.
Изначально его API не хватало мне для того, чтобы отображать определенную информацию, такую как изображение предпросмотра, в результатах поиска, иначе мне бы пришлось создавать отдельный вызов для каждого результата поиска, т.е. много бесполезных вызовов. @thekyle выполнил мою просьбу об улучшении его API менее чем за 24 часа, что позволило ему работать плавно, как и следует.
По большей части поиск не децентрализован. Любой поиск будет проходить через сервер AskSteem, результаты поиска могут быть изменены, или поиск может просто перестать работать, если @thekyle решит закрыть его.
Лучшим решением было бы иметь функцию поиска непосредственно на нодах steem. Другое решение – это создать еще одну DHT-сеть внутри приложения с функцией нечеткого поиска. Я понятия не имею, возможно ли создание алгоритма нечеткого поиска в сети DHT без создания точки отказа, и не думаю, что хоть кто-то на Земле знает ответ на этот вопрос. Вот почему я решил пойти на компромисс. Посмотрим, что получится.
Постоянно хранимые данные
DTube будет использовать локальное хранилище вашего браузера для хранения небольшой части информации. Во-первых, он будет хранить ваши аккаунты и ключи для публикации, чтобы вам не приходилось логиниться заново каждый раз. Я полагаю, что это никого не удивит, учитывая, что steemit.com делает то же самое.
Во-вторых, DTube также сохраняет просмотренные вами видео, чтобы отображать категорию "Watch Again". Так же, как это делает YouTube. Вы можете заметить, что вознаграждения за пост не будут отображаться для категории "Watch Again", так как эти вознаграждения могут измениться в любой момент времени, и невозможно будет доверять данным, которые мы сохранили некоторое время назад.
Если вы иногда чистите свой браузер, вам придется логиниться заново, и ваша история просмотренных видео также будет удалена без возможности возврата. Просто дружеское предупреждение :)
Почему я не могу войти в систему с помощью моего основного пароля или активного ключа?
Потому что это неразумно. Steemit.com позволяет это исключительно потому, что у них в приложении есть кошелек. Атаки XSS весьма распространены в Интернете, и большинство разработчиков вполне оправданно их опасаются. Я чувствовал бы себя ужасно, если бы пользователи моего приложения потеряли бы свои аккаунты и деньги из-за меня. Вместо этого гораздо проще заставить пользователей использовать ключ для публикации и тем самым ограничить риски.
DTube не содержит никакой функции, для которой требуется что-либо, кроме ключа для публикации. Это означает, что нет ни кошелька, ни сброса пароля, ни внутреннего рынка для торговли, ни функции power down и, следовательно, что мне нужно проделать гораздо меньше работы. Если вы хотите управлять своими STEEM вознаграждениями, я рекомендую вам использовать Vessel. И используйте только свой ключ для публикации на любой онлайн-платформе, такой как steemit.com, busy.org и т.п.
"Как насчет SteemConnect?" Я так и вижу это в комментарии к этой статье. Я очень хорошо осведомлен о проекте SteemConnect, целью которого является предоставление разработчиками простого способа STEEM-авторизации и управления ключами. Тем не менее, лично я сильно против того, чтобы делегировать свои ключи или отправлять их кому-то другому, даже если это доверенная 3-я сторона, официально управляемая SteemIt Corp. Извините, но мне нравится иметь 100%-ый контроль над своими ключами, что советую делать и вам. Помните всех этих людей, которые плачут на Reddit всякий раз, когда взламывают какую-то биржу? Не будьте такими, как они.
Кодировка на стороне пользователя
В случае с YouTube вы загружаете исходный файл, а YouTube кодирует ваш файл и даже преобразовывает его в разные качества, а также создает классные гифки для предварительного просмотра видео при наведении мыши.
Добиться того же в DTube очень сложно. Кодирование видеофайла в javascript сложнее и всегда будет медленнее. Плохо.
Кроме того, если вам нужны несколько файлов с разным качеством, вам нужно будет загрузить несколько файлов, что умножит время, необходимое для загрузки вашего видео. Очень плохо.
Наконец, это, вероятно, довольно заметно увеличит общий размер приложения DTube и, следовательно, увеличит время начальной загрузки. Плохо, плохо, плохо!
Существует бесчисленное количество программ, которые позволяют кодировать видео. И это потребуется только для видео, записанных с помощью профессиональных инструментов, таких как высококачественные камеры. Люди, которые владеют подобным оборудованием, обычно уже знают о кодировании достаточно. Мой смартфон уже кодирует каждое видео в H.264, и я полагаю, ваш iPhone делает то же самое. Так почему бы не сделать всё максимально простым?
Простота интеграции в другие платформы
Любая другая платформа на базе STEEM может легко интегрировать видео, размещенное на DTube. Хеш видео в IPFS хранится внутри json_metadata
поста. Это так же просто, как следующее:
<video src='https://ipfs.io/ipfs/videohash'></video>
Известные проблемы
- Отсутствует индикатор выполнения загрузки - github issue
- Размер аватаров не меняется, они загружаются полноразмерными изображениями - возможное решение
Недостающие функции
- Система репутации
- Просмотр по тегам
- Похожие видео (предлагаемые справа от видео)
- Подписка на каналы
- Настраиваемый проигрыватель
Я считаю, что в своем текущем состоянии продукт уже жизнеспособен, даже без этих недостающих функций. Я буду добавлять их, но постепенно. Кроме того, потому как я не уверен, какая из них приоритетнее прямо сейчас, я позволю вам, народ, выбирать и спорить об этом в комментариях!
Зависимости приложения
DTube создан с помощью Meteor и использует множество пакетов с открытым исходным кодом с NPM. DTube не существовало бы без них, поэтому они заслуживают некоторой признательности.
ipfs-api - Коммуникация с сетью IPFS
SteemJS - Коммуникация с блокчейном STEEM
autolinker - Добавление ссылок в описания / комментарии
moment - Отображение времени
XSS - Для отображения ненадежных текстов и предотвращения XSS атак
Благодарность дебаггерам и генераторам идей
@steeminator3000 @dailydogger @coldbolt @nannal @thekyle @ekitcho@fabien @kalvas @french.fyde @nnnhhh @fayetristan @lukestokes
Перекрестные ссылки
Я получил буквально нулевой отклик на эту статье в других основных социальных сетях, несмотря на корреляцию с IPFS. Не пожалейте апвоута. Давайте попробуем обратить на себя внимание внешнего мира.
И напоследок
Хотя лично я считаю, что децентрализация – это будущее, лучше всё же не завышать ожидания. Конкуренция с YouTube – тяжелая задача, которая не по силам одному. Этим проектом я намеревался на практике продемонстрировать возможность создания децентрализованного видеохостинга поверх IPFS. Это работает, но неизвестно, насколько хорошо это будет работать в долгосрочной перспективе. У YouTube также есть много дополнительных функций, которые заметно улучшают пользовательский опыт. То, что создал я, составляет, возможно, 1% работы, необходимой для того, чтобы конкурировать с YouTube. Я построил несколько стен, но внутри нет ни комнат, ни отделки, а всё здание может рухнуть в любой момент.
Присоединяйтесь к сообществу Steemit в Телеграм: t.me/Steemit
Оригинал поста: ЗДЕСЬ