Pushpin: Идеи с фермы

Созданный на 6 нояб. 2019  ·  4Комментарии  ·  Источник: automerge/pushpin

Поэкспериментировав немного с канцелярской кнопкой #310 и #316, я пришел к выводу, что то, чего я действительно хотел бы достичь, является более или менее тем, чего я хотел в своем эксперименте с dat://code.gozala.io/ (что не слишком отличается от https://observablehq.com/), это способ написать фрагмент кода, который позволяет мне взять фрагмент данных и создать либо отдельный виджет, либо многоразовый. Я полагаю, что использовал его в некотором роде как электронные таблицы, за исключением индивидуального интерфейса, адаптированного к конкретной задаче.

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

Поэтому мне интересно, сможем ли мы воскресить то, что делает ферму такой привлекательной. Из моего разговора с @pvh я понял, что, хотя Elm — действительно хороший язык, на практике он оказался очень ограничивающим 😢 (что, я боюсь, перекликается с опытом, который у меня был с ним, когда я пытался использовать его для https://). github.com/browserhtml/browserhtml или даже в упомянутом https://observablehq.com/). Однако я думаю, что более привлекательным элементом фермы была идея, что все на экране было представлено с помощью (doc, lens) , где lens сам был фрагментом кода, также хранящимся в каком-то документе.

Я хотел бы вернуть это, но исключив (по крайней мере, изначально) компилятор Elm. Также так уж получилось, что я использовал https://github.com/mozilla/reflex/ библиотеку, которая более или менее представляет собой архитектуру Elm в JS, которая не требует каких-либо шагов компиляции (хотя проверка типов была бы неплохо) .

Итак, собрав все это вместе, вот что я хотел бы попробовать:

  1. Расширьте # 310, чтобы он стал компонентом «редактирования линз», который, по сути, позволяет написать немного JS, который затем можно было бы указать и загрузить через URL. К сожалению, кажется, что URL-адреса hypermerge:/ не могут быть загружены, только hyperfile:/... можно было бы, но, возможно, это можно было бы решить, или в худшем случае компонент мог создать новые URL-адреса hyperfile:/ после изменений.

  2. Создайте еще один «конвейерный» компонент, который включает компонент «разработки объектива» или, скорее, селектор для существующего объектива и селектор данных «doc» для проецирования одного с другим. _Я хотел бы, чтобы конвейер не ограничивался только (данными, объективом), где представление проекта объектива (HTML), но позволял данные проецироваться на данные, чтобы вещи можно было связать в более крупные конвейеры, но это может быть немного растянуто прямо сейчас) _. Объективом по умолчанию может быть инспектор (см. #316), чтобы просто документ отображал что-то, а оттуда можно было использовать другой или создать новый.

Обратите внимание, что с чем-то вроде этого я мог бы легко воссоздать инструмент, который я часто использую https://hackmd.io/ , где я мог бы использовать компонент «редактор кода» для ввода уценки и компонент «конвейер» для предварительного просмотра рядом друг с другом. или что будет иметь смысл.

PS: я все еще обдумываю эту идею, но я бы поделился ею для обратной связи и в попытке задокументировать ее.

Самый полезный комментарий

cc @pfrazee похоже на то, что вы делаете с «просмотром файлов» в Beaker.

Все 4 Комментарий

cc @pfrazee похоже на то, что вы делаете с «просмотром файлов» в Beaker.

Думаю, это тоже очень похоже на то, что пытается сделать Wireline.

Еще одна вещь, которая постоянно крутится у меня в голове, это то, что когда я думаю о data -> view и data -> data , это каким-то образом всегда происходит скачок от первого ко второму. Помнится, в одном из обсуждений на http://offlinefirst.org/camp/ была идея прикреплять ссылки на блоки данных (doc в контексте pushpin) для "отрендеренных видов" и ссылки на "исходный код" для рендеринг этих взглядов.

Что, если мы обобщим data -> view до data -> data , где выходным документом будет документ html (который на самом деле, возможно, стоит даже сохранить как такой документ). Таким образом, pushpin может просто отображать документы, которые имеют HTML напрямую, а те, которые не являются data inspector .

Что касается существующих виджетов, их можно рассматривать как Note : data -> html , Thread: data -> html и т. д.

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

Чтобы быть конкретным, чтобы заставить его работать с решением основного потока, на котором я остановился, было использование библиотеки decoder.flow , вдохновленной библиотекой Elm JSON Decoder , где декодеры являются декларативными парсерами-комибантами , которые могут быть сериализованы, загружены в основной поток и использованы для извлечения/кодирования соответствующей информации из события и передачи ее обратно в поток, в котором выполняется программа.

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги