準備を進める月曜日

8:00

おはようございます。本日は、いろいろ準備を進めます。

post:

新しいSNS、postにアカウントを作っておきました。たぶんあまり使わないと思います。

Your Profile / Post.

push :clearなことを書く

publish:執筆の指針を得る /閉じることの効能|倉下忠憲|note

メルマガ:

ファイルの準備と、今週号で何を書くのかをだいたい目論んでおきました。

断片:7つの:

断片:

新規メモの作成時に何をやっているか。

10:00

R-style:

publish:Scrapbox、光る言葉、〈弱いノートツール〉 | R-style

ひさびさにR-styleっぽい記事を書いた気がします。

push :clearなことを書く

メルマガ;

今週号は少し短めの記事を書いてみます。記事というよりもコラム的な。

15:00

Textbox:

Textboxに含まれる要素を、Line、Card、Pageに分け、それらの生成データを一覧できたら面白いのではないか、というのが最近考えていることです。で、たとえば、そうした生成データのリストがあれば、それを原本として他の要素で利用できたりもするのではないか。

現状、ページの作成はすべてコード経由で行われますし、その際に「ページ呼出.md」に作成したページの名前を追記する処理をしています。これをアレンジすればページデータの生成をjsonで記録していくことはできるでしょう。

で、そのデータを元にホーム画面に「これまで作ったページのリスト」という歴史(ヒストリー)を表示させることができます。たぶん、私がTextboxに足りていないと感じているのはこのヒストリーの表現なのでしょう。Scrapboxにはサイドバーの全体像がない代わりに、このリストが最初から最後までスクロールで追いかけられるようになっています。

一応最近作ったMapでは、要素をそこに配置することで、Pin留めのようなことができますが、逆に言えばPin留めしなかったものはすべて流れてしまいます。その流れてしまっている具合がどうにも落ち着かないのでしょう。

json形式でデータを保存するのか、それともファイル名だけ保存して、そこからページデータを生成するようなScriptを書くのか。

たとえば、ファイル名がhoge.mdであっても、その中にjsonデータを保存することもできますし、Scriptタグを作ってその中に配列として保存することもできます。そこからページを描写することは容易です。

あとは、データの追記や修正をどのように行いたいのか、という点です。それを考えてみましょう。

* * *

push :関数型から関係型(Relational)へ

上記のpushは、典型的なLineのメモです。ただし、「気になっている本」に一行追記するのは少し違っている気もします。

タイムスタンプを付ける?

* * *

すでにあるデータから考えましょう。

Image from Gyazo

上が「ページ呼出.md」のページ下部です。最近作成したページ名が並んでいます。

このままでは中身が見えません。で、中身が見えなくても言い、という割り切りもあるでしょう。逆に、ページを読み込んで、冒頭の数行だけ読み込む、という手もあるでしょう。

まずページを読み込む場合を考えましょう。

読み込むページのリストを何かしらで保持しておき、forか何かでfetchを実行していくことになります。当然、一気に全ては難しいでしょうから、50個ずつとかの処理になるでしょう。

そうした動的な処理をせずに、新しいページを作ったときにページの中身と共にここに追記する、ということもできますが、たいてい作ったときは中身が真っ白なのであまり意味がありません。よって、動的な処理を考えます。

で、ページのリストをどのように持つか。

まず、今のこの形のように、単純にテキスト+リンク記法でページ名を並べておく手があります。JavaScriptでそのテキストを配列に変えて、あとは処理を回して要素を作り、ページにappendしていけばOKです。これはある種の変換(プレビュー)とも言えるでしょう。ページのリンク記法を、中身の表示に変える変換処理です。

これはこのページの処理だけ考えれば簡単でしょうが、たとえば外部ツールから操作したい場合は、json形式になっていないので、データの扱いに一苦労が必要かもしれません。

では、データはjsonなどの形式でページの外部に保存したとしたら。その場合は、ページにScriptを書き、そのjsonを参照して、要素を生成することになるでしょう。これが一番簡単かもしれません。一応この場合だと、id名や生成時刻などのメタ情報も残しておくことができます。が、IDをハッシュで振る場合などは、手書きでの追記は難しくなるでしょう。基本的にスクリプト任せになりそうです。

そもそも、全ページのリストは、「filelist.json」で生成しています。これはインクリメンタルサーチを作成するときに参照しているデータです。これを使うこともできるでしょう。

差異があるとすれば、このファイルは中にあるファイルをすべて対象とするのに対して、今想定しているのは何らかの操作によって作られたものだけを対象にする、ということです。つまり、Finderなどでこのフォルダにドラッグされてきたファイルなどは省かれます。その意味で完全に等号で結ばれるわけではありません。

あと、page(file)だけでなく、lineやcardをもし保存するならば、インクリメンタルサーチとは分けた方がいいでしょう。

とりあえず、filelist.jsonとは別のファイルで考えてみましょう。

* * *

では、どんなjsonのデータを作ればいいでしょう。

まず、先ほど考えたtypeは必要でしょう。あと、特定するためのID。ページのタイトル。カードなら本文も必要です。逆にページは本文はすべてではなく数行だけになるでしょう。

カードもラインもすべてページにするならこの区分けはなくなります。一行の書き込みでも、タイトル+4行のカードでもすべてファイルにすればOKです。その代わり、インクリメンタルサーチが大混乱しそうですが。

「ライン」をファイルにする意味はあるでしょうか。

たとえば「気になっている本」のリストに、新しい行を加えるとき、そこで期待されているのはなんでしょうか。今のようにファイルの中にリストがあり、そこに一行追記するという操作が一番自然です。

一方で、その本のタイトルでfileを作り、そこに「気になっている本」という属性(タグ)を与え、「気になっている本」のページでは、その属性を持つ全ページを列挙する、という作り方もできます。最近のノートツールでよく実装されている方法です。

* * *

scarpboxのページデータのjsonで、使えそうなものをピックアップしてみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[
	{
		"id:hoge,
		"title":hoge,
		"image":hoge,
		"descriptions": [],
		"pin":0,
		"views": 1,
   		"created": 1491498636,
   		"updated": 1578299813,
		"accessed": 1597409796,
		"lines": []
	}
]