ゆっくりすごす日曜日

8:00

おはようございます。本日は来週の予定などを確認し、なんとか「やること」を整理したいと思います。

Textbox:

「通知欄」について考えています。

今、iPhoneで撮影した画像をTextboxのフォルダに保存できるようになったわけですが、画像が保存されただけで、何も更新されていません。

イメージとしては、新しく画像が入ったことを自分に知らせて、そこで日記などを作成しその画像を添付する、というやり方をやってみたい。

では、その「自分に知らせる」をどうするか。ということを考えています。

iPhoneからTextboxのJSONを直接更新すれば、少なくともこの通知はいらないわけですが、iPhoneでながながとテキストを打つのも面倒なので、Macでやりたい気分はあります。

あと、こうした画像の追加だけでなく、通知機能があればリマイダー的なものになるのではないか、という思いもあります。

で、仮にそういう通知欄を作るとしたらどうするか。

* * *

一応、Textboxにはowlコマンドというのがあり、プログラムからの通知をテキストとして表示する機能はあります。

owlcall - 倉下忠憲の発想工房

しかしこれは何も操作しなくても自動的に消えてしまいます。やりたいのはそういうことではなく、更新されたものがありますよと、表示し続けるものです。

で、その後どうするか?

チェックボックスのようなものが表示されていて、それをチェックして完了にできるようにするのか。それとも、必要なページにジャンプするリンクを表示したり、画像ファイルをFinderで表示させたり。

* * *

Image from Gyazo

とりあえず、Homeに当たる場所に、「れんらく帳」という欄を増やしました。うまい英語が思い浮かばなかったので、暫定のネーミングです。普通にUpdateでいいかな。

いや、Updateでもないか。というか、そこの情報が残っていくのか、消すのかで名前が変わりますね。「2024年11月03日 画像追加」のようなタイムスタンプで通知情報が残っていくならば、Updateでいいと思います。

そうではなく「こういう変更があったよ。行動とってね」という通知なら、通知欄(notification)が適切でしょう。あるいは、今日の日付を見て、とるべき行動を通知する場合もそうでしょう。

そもそも、「通知」という概念で異なるものをまとめようとしすぎている?

とりあえず、notification でいくことにしました。

* * *

このページを表示したら「通知確認」の関数を走らせる。

その関数は、何かしらのmdファイルか、jsonを確認して、通知すべき情報があれば、ここに表示する。

通知すべき情報は、日付データに入っている「予定」、曜日ごとのデータに入って要る「曜日別やること」の他に、Textboxに外部的に追加された画像やメモについて、あたりだろうか。

* * *

「Notice」に変更しました。

* * *

上記画面の下の方にはページリストが表示されています。たしか、「新規作成したページ」の情報がリストで保存されていて、それがそのまま表示されているという記憶です。

で、これを編集したページのリストとして表示させたら、「プロジェクトノート」の管理手法としてはなかなかよいのではないかと思いました。

ページの粒度も、その辺で考えやすくなるのでは?

問題があるとすれば、ページの編集画面を開いて、閉じただけでも順番が変わってしまうことくらいか。ページのメンテナンスをしているだけで、その順列が代わっていく。

* * *

現状使っている、page.jsonと、タスクなどの情報を含んだdeepfilelist.jsonがあって、ほとんど同じ情報が含まれている。これを統合する必要がある。

みたところ、page.jsonはページを新規作成したときだけにタッチされ、ページが変更されたときには触られていない。新規作成のページリストとして使えるかもしれないが、「created」のデータがdeepfilelist.jsonにもあるので、それでソートすればいいだけだ。

とりあえず、deepfilelist.jsonを読み込んで表示するようにしてみよう。

const url = "json/page.json";

fetch(url,{
            method: "get",
          cache: "no-store"
      })
        .then( response => response.json())
        .then( data => formatJSON(data));

function formatJSON(json){
    // JSONファイルを整形して表示
    let html = "<ul class='grid'>";
    for(let item of json){
        if(item.image){
            imgtag = item.image
        }else{
            imgtag = ""
        }
        if( item.pin == 1){
            bgcolortag = ' yellow'
        }else{
            bgcolortag = " white"
        }
        html += "<li class='page-list-item grid-style-item " + bgcolortag + "'><div>" + replacLinkBtn("[[" + item.title + "\]\]") + "</div><div>"  + imgtag + "</div></li>";
    }
    html +=  "</ul>"
    document.getElementById("page-list").innerHTML = html;
    setOnClickEvent("page-list",mainPage);
    console.log("load json")
}

一応旧バージョンを残しておく。

* * *

すぐにできました。基本的なデータの扱いは同じだから簡単でしたね。更新日順のソートは、Geminiに聞けば一発でした。

で、やってみると、

Image from Gyazo

こんな感じに。今まさにHomeを編集しているので、それがトップにくるのは当然として、「住所変更手続き」のようにプロジェクトなものもあれば、メルマガWRMなどのように更新情報を追記しただけのもの、単語帳に新しい単語を書き足しただけのものもまざってきます。言い換えれば、純粋な「プロジェクトノート」の更新日順にはならない。

そこでどう考えるか。

むしろ、それでいいのだと考える。この画面に何が並ぶかを意識して、ページを作っていく。たとえば、単語帳が並ぶのが嫌ならばそれをhistory.jsonに同一化させる。そうすれば、history.json内で作成日順などにソートできるようになります。階層・レイヤーをわけるイメージ。

もう一つの考え方は、この画面でtype:projectを持つものだけを抽出する、というやり方。そういうボタンを付けてしまう。

さらに別の考え方は、むしろ「プロジェクトノート」の一覧はこのページの責務ではなく、project.mdという個別のファイルに任せて、そこでソートで並べるというもの。

さて、どうするか。

* * *

とりあえずの折衷案として、「これはこれでいいんだ」という考え方と、project.mdでtype:projectをソートする考え方を併用しましょう。

あるいはproject.mdの作り方そのものを見直してもいいですね。

* * *

Image from Gyazo

現状はこんな感じ。作るだけ作って、ほとんど触っていません。各種プロジェクトのインデックスページとして機能することが期待されているはずですが、主要なプロジェクトはtodo-boardに載っているので、わざわざここにアクセスする意味があまりありません。

でもって、このブロック自体をドラッグで移動できないので、移動は結局テキストを直接書き換えるしかなく、それがあまり楽しい作業ではないというのが問題なのでしょう。

では、どうするか。

* * *

project.mdの責務は何なのか。

自分が抱えている「プロジェクト」を一覧すること? 一覧してどうする?

つまり、単なるインデックスなのか、それとも別の機能があるのか、というのがここでの論点。

プロジェクトの一覧、ないしはインデックスであるならば、type:projectの情報をただソートすれば十分に役割はこなせる。それでいいのかどうか。

むしろカンバンボードのように、それぞれのプロジェクトを「位置づけていく」ことによって、プロジェクトについて考えるための場所が必要なのではないか。

* * *

まず単純にCSSをいじってみる。

Image from Gyazo

14:00

Textbox:

Notionでプロジェクトリストを作ってみました。

Image from Gyazo

非常に能率的に管理できますが、やはり硬直さは感じます。

* * *

もう一度、以下の画面に戻ります。

[Image from Gyazo

これはマークダウンのリストをCSSで表組みっぽく表示しているだけです。

なので編集時には、編集画面にもっていく必要がある。それはたぶん好ましい操作ではないのではないか。

そうではんく、projects.jsonのようなものを作り、そこから内容を読み出して、編集できるようにすればいいのでは?

その場合、場所の固定をどうするか。今回は場所を固定したい。まあ、量が少ないから問題ないか。

memo.mdでやっているようなことを別のjsonでやればいい。

* * *

サンプルで以下のようなjsonを作りました。projects.jsonです。

Image from Gyazo

* * *

サンプルデータを並べてみるテスト。

Image from Gyazo

CSSは変ですが、とりあえずこの段階で考え事。

最初は「執筆作業」や「セルフパブリッシング」というので一つのオブジェクトとし、そのlineでプロジェクトリストを作ろうと考えていました。

が、もともとmemo.mdで使っていたスクリプトはむしろ、プロジェクト一つひとつをオブジェクトとして扱うモデルでした。

だったら、このページでも同じようにすればいいのでは?

しかしそうなると、project-thのようなものはプロジェクトページ(project-th.md)も持ちながら、ここでもオブジェクトを持っているということになります。

だったら、deeppagelist.jsonのtype:projectなものを抜き出して表示すればいいんじゃね? ということになります。

一方で、もしかしたら個別のページを持たない対象を扱いたくなることがあるかもしれない。そうなれば、ここで単一のオブジェクトとして持っておくことは有効かもしれません。

ふむ。

個別のプロジェクトは「参考ページ」という形で記述すればいいですかね。そのための欄を設けてもいい。

あとは、そういう風に個別に管理するのか、それともカテゴリーで一つのオブジェクトにするのか、です。

* * *

個別に管理して、タグ付けすればカテゴリーごとに抽出ということが可能になります。ようするにmemo.mdでやっているのと同じことを、プロジェクトレベルで運用するということ。

一方で「執筆仕事」というレイヤーで何かコメントを残したくなったときに、それができません。それがどうなのか。

* * *

このページは、「一つ上のレイヤー」で考えたいときに開く場所ではないか。

だとしたら、個別のプロジェクトではなく、プロジェクトのカテゴリを「オブジェクト」として捉えるのがよいのではないか。

15:00

Textbox:

プロジェクトのカテゴリをオブジェクトにする、というアイデア、斬新で面白いと思うのですが、どうにも気持ち悪さがあります。オブジェクトとして扱うなら、プロジェクトレベルだろう、というような強い固定観念があるのかもしれません。

だからこそ一度試してみる価値はありそうです。

18:00

Textbox:

Image from Gyazo

とりあえず、JSONからデータを生成しました。個別のブロックをクリックすることで、JSONが編集可能です。