hbs2/docs/papers/hbs2-browser/usecases.tex

157 lines
8.3 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% vim: set textwidth=64:
\chapter{Сценарии}
\section{Оракул}
\subsubsection{Публикация <<фактов>>}
Оракул стартует и обновляет стейт.
Затем публикует набор <<фактов>>, отсутствующих в известном ему
состоянии.
\section{hbs2-browser}
\subsection{Отображение списка ссылок}
Предполагается, что \term{hbs2-browser}{hbs2-browser} будет отображать
ссылки в виде списка с бесконечным скроллом, с возможностью поиска, с
неким языком запросов.
Для начала поисковой строкой будет являться просто подстрока из самой
ссылки. В дальнейшем возможно расширение при помощи некоего DSL, где
будут перечислены атрибуты.
Если будут какие-либо специфические формы, с выбором опций --- то
предпогается, что они просто будут добавлять некие термы в эту строку.
На верхнем уровне отображется базовая информация для ссылки: её
текстовое представление (обычно публичный ключ в base58), её тип.
Возможно, некое описание. Например, название репозитория и список
хэштегов.
Предполагается оторбражение ссылок в порядке некоего веса, который
вычисляется (TBD), возможно, формула для вычисление веса так или
иначе определяется пользователем, например, возможностью
редактирования весовых коэффициентов.
Например, факторами могут быть время обновления и отношение к
пользователю, которое может вычисляться исходя из встречаемости
его ключей в данных ссылки (как пример).
Данное требование предполагает наличие обязательных и дополнительных
полей у отображаемой ссылки.
\subsection{Отображение детализации ссылки}
Понятно, что ссылок может быть произвольное количество и hbs2-browser
не в состоянии знать их все, а тем более, осуществлять какую-то работу
с ними. У нас не стоит цели разработать и запустить универсальную CMS.
Мы не сможем встроить функции работы, например, с проектами в git в
сам браузер, и вероятно, это было бы слишком.
hbs2-browser может предоставить некоторый каркас отображения
метаинформации; возможно несколько уровней. И предоставить возможность
перенаправления на приложение, которое умеет работать со ссылкой
(данными) такого типа.
Рассмотрим примеры.
\paragraph{git} Мы бы хотели видеть: название и описание репозитория,
список авторов, README если есть, список бранчей и тегов.
Еще бы мы хотели видеть структуру каталогов, и в переспективе ---
просматривать каждый файл, как в онлайн-редакторе, так и raw виде.
Однако, непонятно, как это сделать. Проекты могут иметь огромные
размеры, как по количеству файлов, так и количеству коммитов.
Если всё это делать метаданными, то размер метаданных сравняется
или превысит размер изначальных данных, которые тоже могут
иметь миллионы записей и гигабайты/десятки гигабайт размеров
в предельных случаях (монорепозитории).
Распаковка объектов на лету тоже малоприменима --- git~object~packs
могут быть огромными, их может быть много, без полной распаковки
объект не извлечь.
Вероятно, на первом этапе стоит ограничиться списком ссылок и
детализацией информации ссылки, например, нескольких уровней -- L1,
L2. L2 подразумевает более подробную информацию о какой-то сущности
ссылки, поэтому параметризуется этой сущностью.
\paragraph{Пример:}
\begin{verbatim}
L1:репозиторий
-> L2:список автров
-> L3:автор
\end{verbatim}
С другой стороны, можно представить и таким образом:
\begin{verbatim}
L1:репозиторий
-> L2:список авторов
-> L2:автор
\end{verbatim}
Видно, что задача очень хорошо бы ложилась на XML/XSLT, если бы у нас
была подобная опция. К сожалению, в современном мире такой опции нет
и нам придётся изобретать некую замену, которая будет делать тоже
самое, но не так.
Таким образом, нам необходим способ преобразования из модели
<<фактов>> в отображаемый формат (html).
Мы не хотим, что бы этот способ был привязан к какому-то конкретному
языку программирования.
Мы не хотим, по возможности, встраивать эти преобразования в
\term{hbs2-browser}{hbs2-browser}.
Рассмотрим возможные варианты задания преобразований:
\subsubsection{SQL+JSON}
Пользователь задаёт в конфигурации SQL стейтмент, порождающий JSON +
шаблон, который преобразует JSON в формат для отображения (html/htmx).
Достаточно просто, доступный многим стек, возможны сложности с
выполнением отображения в случае, если одного SQL запроса
недостаточно, фиксируем СУБД (скорее всего, это будет sqlite, но это
деталь реализации, которую не хотелось бы раскрывать), сколько-нибудь
сложную логику писать в СУБД достаточно проблематично и способ зависит
от БД. Отсутствие нормальной типизации. Слабые возможности абстракции.
\subsubsection{Собственный EDSL}
Требуется значительное время для разработки, необходим тулинг,
высокий порог входа, возможное недовольство пользователей.
\subsubsection{Биндинги в скриптовые ЯП + хост}
Достаточно затратное встраивание, вопрос, какие именно ЯП выбрать из
большого списка.
\subsubsection{Внешний процесс + IPC}
\subsubsection{Внешний процесс + RPC}
\subsubsection{Внешний процесс + HTTP}