Skip to content

Releases: etovoteto/app.etovoteto.ru

Учимся выдавать авторам ключи

11 Mar 17:21
Compare
Choose a tag to compare

Я намеренно выбрал не пытаться опираться на систему логинов и паролей. В децентрализованной сети организовать уникальность логинов непросто, есть куда более натуральное решение. Каждый автор в словаре — пара ключей для асимметричного шифрования, т.е. взаимосвязанные публичный и приватный ключи. Это которий текст, который не сложно хранить у себя в телефоне или на компе и загружать при входе. Либо из галереи фото (в случае если хранить в виде QR-кода на мобильном), либо из папки в виде файла JSON. Но важно, чтобы автор сохранил их после регистрации и понимал, как это работает. Первая версия уведомления об этом сделана на экране создания аккаунта и показывается после входа пользователя, пока он не нажмет кнопку "Спасибо, ключи у меня". Пока получилось не супер-интуитивно, но это уже важный прогресс, случившийся благодаря первой обратной связи, которая пошла от самых первых испытателей словаря.

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

Практически все готово к запуску

08 Mar 21:11
Compare
Choose a tag to compare

После того, как основной раздел игры — слова и определения — были относительно завершены, пришло время страниц и карточек авторов и комнат. Теперь и они на минимальном уровне готовы. Страница автора содержит Имя, Полное имя и Город, которые сам автор может редактировать прямо на месте. Тут же — списки слов, определений и комнат этого автора. Внизу — возможность вывести QR-код страницы или поделиться ссылкой (на iOS).

Главная страница игры — это главная страница базовой комнаты. Таким образом, сделав стартовую страницу — делаешь и стартовые страницы всех комнат. Поэтому описание комнаты сделано интерактивным и дано в руки её ведущего. Это позволит точно определить, для чего создана та или иная комната, какие слова и определения она ждет и кого видит в качестве авторов.

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

В остальном, видимо, пришло время приглашать первых авторов и дорабатывать код уже в соответствии с обратной связью от них. Это — большая веха!

Минимальная модерация есть

07 Mar 21:26
Compare
Choose a tag to compare

Итак, связи между словами и определениями авторы могут включать и выключать, но сами слова и определения добавляются бесповоротно — удалить их невозможно ну никак. Даже владельцу комнаты это не под силу. Это дает крутую уверенность в сохранности данных и делает работу над словарем куда увлекательнее для всех авторов. Ответственность! Но что, если кто-то просто опечатался? Заснул на клавиатуре и добавил совсем уж кривое слово? Или дубликат определения с опечаткой закрался? Ну или кто-то добавил существующее слово или откровенную матершину в твою комнату? Теперь есть треш-список. Добавить в него что-то может только владелец комнаты. При выводе списков эти записи не показываются. Этого вполне достаточно!

В целом весь функционал есть. Нужно доделать карточки авторов, чуть облагородить интерфейс владельца комнаты. В плане — добавление модераторов. Но это пока не так уж важно. Куда важнее — пригласить живых людей играть и исследовать. Протестировать в разных ситуациях и оптимизировать для максимального веселья. ))) После первого такого раунда внесу все важные правки и можно выпускать версию 1.0.0! Готовимся!

Личные связи работают как надо

06 Mar 20:14
Compare
Choose a tag to compare

С самого старта разработки не было понятно, как именно реализовать связи между хешированными записями слов и определений. Теперь разобрался! Каждая связь — это две записи с ключом вида хэш1.хэш2@пубключ и с переставленными хешами. Все это укладывается в схему сертификации личных записей SEA.certify { '+':'*' } и позволяет дать возможность пользователям управлять своими связями — добавлять и удалять их по желанию. Если связь добавили несколько человек, то пока они все свои не удалят — она не исчезнет. Очень живая динамика. В приложении все интереснее проводить время. Особенно когда кто-то там есть еще и ты видишь как все меняется на ходу )

Это изменение потребовало изменить сертификаты в главной комнате и это стало поводом начать все заново с чистой комнаты. На ней осталось отработать администирование владельцем и назначенными им модераторами и можно считать первую версию полностью функциональной.

Страницы авторов

05 Mar 21:17
Compare
Choose a tag to compare

Авторы обзавелись полноценными страничками с возможностью базового редактирования профиля, а также работы с ключами. Генерация пароля уже настроена, но нужно доделать вход по этим паролям. Паролем зашифрована криптопара пользователя и лежит у него по пути 'pass'. Там же лежит зашифрованный парой пароль. Т.е. для входа нужно знать публичный ключ пользователя и пароль от него. Войдя, можно посмотреть свой пароль и поменять его на новый. Можно и другие стратегии продумать, это не сложно внедрять.

На странице пользователя можно посмотреть его слова и определения в данной комнате + его собственные комнаты. Вообще гулять по пространству становится все увлекательнее и многообразнее. А с возвратом полных аватарок авторов в карточки — еще и ярче! Нажимаешь на аватарку — идешь на страницу автора. Круто!

Дополнение

В зависимости добавлен zenbase, включающий хранение данных в децентрализованной сети SKYnet. Он включается строчкой import 'zenbase/dist/main.js' в store@db, дальше все вроде работает неплохо. Позволяет делать данные еще более надежными. Но есть одно но — размер бандла прибавляет 500 кБ! Это много, т.к. vendor.js становится более 800 кб. Их можно разбить, но этот скрипт так и так грузится в самом начале инициализации базы данных. Этот размер может быть не так страшен, когда будет активирован режим PWA. Так что когда выйдет первая стабильная версия словаря — можно будет пробовать снова включать SKYnet.

Комнатами теперь удобно управлять

04 Mar 14:12
Compare
Choose a tag to compare

Сертификация на новом уровне — владелец комнаты сразу выпускает для себя сертификаты и потом может редактировать ее заголовок и подзаголовок от своего имени, не пользуясь криптопарой комнаты. Она остается нужна только для перевыпуска сертификатов для обновленной конфигурации. Интересно сделать для этого какое-то версионирование — можно будет видеть какой версии комната и предлагать обновлять ее владельцам.

Это закладывает основу для модерации, но там еще многое предстоит осмыслить сначала. Внедрение корзины будет затрагивать множество модулей.

Готовы внедрять ведущих комнат

03 Mar 20:10
Compare
Choose a tag to compare

Комнаты теперь ранжруются по рейтингу, собираемому из числа слов, определений, соединений и авторов. Наиболее популярные комнаты будут наверху, но всегда можно найти нужную по названию. Нужно дополнить комнаты сертификатами для владельца и ведущих — они смогут редактировать название и описание, помещать записи в корзину и банить участников. Эта перестановка приведет к смене схемы базы и все придётся начинать снова. Поэтому нужно будет тщательно продумать структуру данных, которые потом будет удобно редактировать и отображать.

Странички слов и определений и QR-фотоключи

02 Mar 21:38
Compare
Choose a tag to compare

Несмотря на то, что ключевой функционал уже есть, приложение еще мало интерактивно — так много где хочется нажать и увидеть какой-нибудь результат!
Теперь у каждого слова и определения появилась своя страничка, поделиться которой можно как просто скопировав ссылку, так и выведя QR-код на экран или поделиться встроенными возможностями в Safari. На странице можно дополнить слово определениями и наоборот.

Другой важный момент - внедрение полноценного распознавания QR-кодов с любых фотографий. Это позволяет сделать надежную систему хранения ключей на мобильных устройствах — вывел QR-ключ у себя в профиле, сделал скриншот и доступ к личной страничке у тебя всегда в кармане. Удобно? Наверняка. Правда, эта возможность прибавила 150 кБ к размеру бандла — это довольно много, около 30% роста! Но это естественно и пока я не напрягаюсь из-за размера — он все еще принебрежительно мал для современного веба. А в последствии я включу асинхронную подгрузку роутов и кеширование PWA и проблема вообще сойдет на нет. Дальше — больше!

Избранные и собственные комнаты

01 Mar 21:12
Compare
Choose a tag to compare

Приложение постепенно приходит к четкой структуре. Страницы содержат компоненты. Компоненты включают модели. Модели работают с хранилищем. Четкие слои абстрации помогают связывать код на нескольких уровнях. При этом компоненты получаются максимально гибкими и независимыми (хоть и неразрывно связанными с моделями. По сути модель — готовый модуль бизнес-логики. Работа с базой данных происходит только там.

Дальше — страницы слов и определений, корзина и банлист. + личные пароли пользователей.

Аккуратный дизайн с WindyCSS

27 Feb 19:25
Compare
Choose a tag to compare

Плагин WindiCSS генерирует стили из классов-утилит аля TailwindCSS на лету. Это позволяет не париться с удалением ненужных стилей и делает pug-компоненты еще короче. Так, правда, краткость приводит к излишне плотной упаковке — оформление смешивается со структурой компонентов. Но это не так уж страшно, особенно если учитывать, что основные стили в компонентах — структурные (.flex и проч). Если нужно сложное оформление — всегда можно дополнить их в stylus.