generated at
howmとタスクリンクの相性よさそう
howmのリマインダの記号タスクリンクの相性がいいのではないかというwogikazeの勝手な思い付き
takkerさんがよくやっている気がする
hown+タスクリンクにタスク管理を移行しようと思うtakker
ここで書式設計を行う

自分が使っている記録システム(日刊記録sheet, tritaskがベース)から完全に分離できそうでわくわくしてるtakker
うまくいけば他の人にも使えるシステムになる

このページで決めた書式のタスクに名前をつけたいtakker
タスクリンク feat. hown
長い!
タスクリンクv2
hownリンク
いうほどhown要素残っているかな?


作成方法
TODOを思いついたらとりあえず [⬜️靴下買う] みたいに書いておく
各ドキュメントに散らばっているToDoを一覧するUIを入れることで、project中のどのページにタスクを書いても拾えるようにする

用意するもの
タスクリンク操作package
字句パーサー
計算には関わらない
旬度計算
基準となる日時とタスクリンクを与える
基準となる日時からの相対量を返す
タスク作成補助script
日付の変更?
howmのアクションロックにもあった機能
一覧用UI
いろんな実装方法が考えられる
PageMenuで表示
一時的にページを作って流し込む
etc.
takker/takker/takker-workflow@0.0.1/next-action-viewerをベースに作成するつもり

閲覧方法
UI
TODO一覧を見るページがどっか(例:TODO)にある
ページを潰してしまうので意見分かれるところ、PageMenuでもいいかもだが編集したいところさんwogikaze
今日の日付基準でソートされる
終わったらrenameして沈む
一覧用UIを作って使っているtakker
わざわざTODOリストを作らなくていいのが便利
TODOリストにして色々編集したいときは、コピーボタンを押すと特定期間内のタスクリンクを全部コピーできる

書式設計
日時指定 {Timestamp}
\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2})
日程調整
yyyy-MM-00 月末を表す
曜日指定 /\((\+|-)?(\d+)\*(Sun|Mon|Tue|Wed|Thu|Fri|Sat)(?:(\+|-)(\d+))?\)/
/yyyy-MM-dd(THH:mm)?/ の後ろにつける
指定した日時の月基準で、曜日単位で日時を指定する
例: 2023-09-05T12:14(2*Wed+1) 2023-09-14T12:14 と等価になる
9月の第2水曜日(2023-09-13)の翌日
タスクの開始日時
/@{Timestamp}/
タスクリンク中のどこに挿入してもいい
[@yyyy-mm-dd タスク]
[タスク@yyyy-mm-dd]
/takker/タスクリンク (takker-workflow@0.0.1)と同様に、どこに挿入しても認識されるようにしておこう
一番最初に出現した /@{Timestamp}/ を採用する
終了日時
終了日時で直接指定
/\/{Timestamp}/
@yyyy-MM-dd/2023-12-21T12:34 で、 2023-12-21T12:34 に終了する
年月日を略した記法も可
/\/\d{2}:\d{2}/
/\/\d{2}T\d{2}:\d{2}/
/\/\d{2}-\d{2}T\d{2}:\d{2}/
/\/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/
/\/\d{2}/
/\/\d{2}-\d{2}/
/\/\d{4}-\d{2}-\d{2}/
開始日時に時刻が指定されていないときは、終了日時の時刻も無視し、終日扱いとする
見積もり時間で指定
/D\d+/
\d+ 分後に終了する
/\/{Timestamp}/ /D\d+/ の両方があった場合は、一番最初に出現した方を採用する
✅,⬜,📝, ❌にする
廃止
各自で行頭に入れるのは自由
記載位置は(日付|日時)の後ろとする
[(状態絵文字)@yyyy-mm-dd(記号) タスク]
howmのリマインダの記号のうち、 + , - , ! , ~ を採用する
/([\+\-!~])(\d*)?/
@ @yyyy-mm-dd で表現できるので略
. (状態絵文字) を入れれば表現できるから略
自分のはどこに日付を挿入しても認識されるようにしてあるtakker
といっても、末尾に書くことがほとんどだが
繰り返し指定
繰り返しタスクの実装はtakkerも悩んでた
初めに/takker/task portal page (takker-scheduler-3)という、JavaScriptで繰り返しタスクを生成する仕組みを作成し、2023-09-11現在までこれを使っている
わざわざコードを書かなければならず、非常に手間
修正も面倒くさい
ページを開いてコードを書き換える
タスクリンクに繰り返し情報を埋め込めれば楽なのだが、記法が思いつかなかった
一時期RRULEを検討したが、非常にタスクが長くなってしまい、結局実装しなかった
QFixHowmの繰り返し記号と曜日指定記法を組み合わせれば、大抵の繰り返しタスクを取り扱えそう。採用してみる
/R([YMWD])?(\d+)/)
RY\d+ \d+ 年おきに実行
RM\d+ \d+ 月おきに実行
RW\d+ \d+ 週間おきに実行
RD\d+ \d+ 日おきに実行
R\d+ \d+ 日おきに実行
QFixHowmからの変更点
@ R に変更
repeatのr
日時指定ですでに @ を使っているので、代替した
繰り返し周期を Y , M , W と表現
どの周期か読み取りやすい
QFixHowmはもっと複雑な指定もできるが、全部真似ると実装が大変なので、ほどほどにしておく
(以下、TaskChuteなどのような記録システムと併用する際の話)
タスクの生成方法
defaultでは、繰り返す当日になるたびに、新しいリンクを作成する
例: [⬜️散髪@2023-09-08(1*Mon)RW2] があったら、実行日が来るたびに以下のリンクが生成される
[⬜️散髪@2023-09-04]
[⬜️散髪@2023-09-18]
[⬜️散髪@2023-10-02]
...
howmのリマインダの記号部分は継承される
[⬜️散髪!2023-09-08(1*Mon)RW2] なら、 [⬜️散髪!2023-09-04] , [⬜️散髪!2023-09-04] ,...が生成される
リンクにしたくないときは、繰り返し記法の末尾に * を入れる
例: [⬜️散髪@2023-09-08(1*Mon)RW2*] があったら、実行日が来るたびに以下の文字列が記録ページに記載される
️散髪@2023-09-04
️散髪@2023-09-18
️散髪@2023-10-02
...
やり残しをカウントしたいタスクはリンクに、カウント不要のタスクは文字列にしておく
生成したタスクの同一判定
むずい
未来のタスクを生成して、その予定をずらした場合、生成されたタスクかどうかの判断ができなくなる
何らかの記号を入れれば、繰り返しタスクから生成されたタスクだと示せるが、どの繰り返しタスクから生成されたまでは特定できない
繰り返しタスク内に、生成したタスクへのリンクを並べる?
✅生成した期間 or 生成していない期間を繰り返しタスクに記録すればいいのでは?
ようは重複生成を防ぎたいだけなんだし
採用
不足しているパラメタは undefined とする
defaultで値を補うか、文法ミスとして警告を出すかは、各UI開発者の設計に委ねる

別々に扱う理由が無い気がする
試す
別々にする場合
[⬜@2002-10-20! ハイウェイ惑星 〆切]
[⬜ハイウェイ惑星 〆切@2002-10-20!3]
[📝@2002-10-20- ハイウェイ惑星 買おう]
[✅ハイウェイ惑星 買おうかな@2023-09-12~]
同じにする場合
[@2002-10-20! ハイウェイ惑星 〆切]
[ハイウェイ惑星 〆切@2002-10-20!3]
[📝@2002-10-20- ハイウェイ惑星 買おう]
[✅ハイウェイ惑星 買おうかな@2023-09-12~]
❌日付と状態指定の順序を任意にする?
[ハイウェイ惑星!3 〆切@2002-10-20]
[!3ハイウェイ惑星@2023-09-12 〆切]
流石に分かりにくくないか?
タスク名と混同するのでやめる
例:TODOのつもりで [ハイウェイ惑星買う!@2002-10-20+3] と書いたが、締め切り扱いになってしまった
別々にする利点
やったかやってないかがわかりやすい
cons. ⬜はなくてもわかるから付けなくていいと思う
✅📝❌はほしいな
同じにする利点
タスクの状態を表す場所を一箇所に統一できる
cons.
✅完了した状態と、どの浮沈方式のタスクだったかがわからなくなる?
[ハイウェイ惑星 〆切@2002-10-20.!3] とすれば、元々のhowmのリマインダの記号も残るからこれでいいんじゃないかな
✅「📝❌」を表現できなくなる
各自で行頭に挿入するのは自由。表現できなくなることはない
単にparserのパース対象外にするだけ
ずらずらと⬜がついたタスクが並ぶとげんなりする
同じにしようtakker
日時指定子( @yyyy-MM-dd )の直後にくっつける
✅相当の記号として、本家と同様の . を採用する
後方互換性として、 /^✅|❌/ を完了とみなす処理を入れておく

旬度計算
浮き沈みの間隔
注目している日に浮いてくると判定されたら、その日のタスクリストに入れることにする
間隔をフィボナッチ数列にしたいtakker
元仕様だと一定間隔だった(defaultは1週間ごと)
指定日時になったら浮いてくる頻度を増やすようにしてみたい
minは毎日浮上
指定した日数前に最初に浮上する様にする
案1の例: @2024-06-23+60 なら06-23の1ヶ月前に最初に浮上し、以後はFibonacci numberの間隔で浮上する
フィボナッチ数列の逆関数を求めるのが大変だな……普通に2^xとかの指数関数が無難なのかな
SRSで使っている間隔反復の数式を知りたい
普通にe^xとか2^xを使っているっぽい
じゃあそれでいいや
案2の例: @2024-06-23+60 なら06-23の1ヶ月前に最初に浮上し、次は15日前、その次は1週間前、次は3日前、以降は毎日浮上する
本家の実装を見たことがないけど、inlineでは三角関数で実装したinajob
じわじわ上がってきて、去っていく
タスクリスト上を下→上→下と移動する速さを三角関数で表したのでしょうか?takker
合ってそうinajob
ここでの様子だと、ある日ピュッと上がってくる動きをさせようとしている?
howmのリマインダの記号#64f588dc1280f000009f1056から着想をえて、そういう仕様にしようと思いましたtakker
結局誤読でしたが
QFixHowmはこの挙動みたい、inlineでもそうしていますが、30日のデフォルトを使うことが多いinajob
自分が構想しているタスクリストの挙動としては「指定された期間内のタスクを全て出力する」だったので、タスクリスト内の順序を + / - で制御するのはあまり意味がなかったのです
タスクリストは実行日でソートするつもりだった
タスクリスト内に「重要度」columnを追加し、その順番制御に使うことはできそうだけど、複雑になりそう
inajobの使い方は、0を境目にして正数のものがマストでやるもの、それ以下はまぁ目に入るくらいのもので、浮遊のタスクは0までしか優先度が上がらないinajob
マストではないので浮遊させているという解釈
0より大きなタスクが爆発しないように運用する
まぁ現時点でやや溢れているのですが・・
0以下のものは気分で取り掛かる
図書館で本を選ぶ感じの気持ち、多く目に入る方が良いという考え方
0を境に見た目を変えると使いやすそうtakker
0以下をグレーか半透明の色にする
0を境に <hr> を入れる
❌0以下を折りたたんで非表示にする
見えなくなるのは本末転倒
この説明とQFixHowmの説明を見て、日付とhowmのリマインダの記号(とオプションの数字)から重要度旬度を計算できそうだと気づきましたtakker
これなら(重要度旬度計算以外は)楽に実装できそうです
タスクリストの優先順位を数字で表していて、指定した期日が原点になるようにして、日付で位相をずらして行くみたいな実装だったはず
inajobさんが作ったhowm のリマインダの inline 実装を見つけたtakker