QDLを実装する
https://gyazo.com/5bbf974d2a106fe41b1c9bb024afdf1a
5列くらいに揃えたいんだけどどうすればいいんだろう
https://gyazo.com/541b743b97db92551fcab9576b9975cb
vipをどうするか
休憩は重要だから予定の下に置いてもいいんじゃね
散歩は細かすぎでは?休憩の下でよくね
これ認めるとhabiticaみたいな習慣カウンター路線になるけど?
matrix?
table:m
rough fix
over personal オンデマンド 予定
personal ? ルーチン
? is 何
inboxはpersonal or over-personal区別しないレイヤーだから違う
vipでもないよなぁ。vipはラフじゃないし。……いやラフか?
vipだと綺麗に対応取れる
オンデマンドが雑だよなぁsta.icon
オンデマンドにはover-personal以外も含む(personalなオンデマンドタスクだってあるはずだ)
が、personalなオンデマンドタスクは変換できるか
繰り返し行うべきものはルーチンにすればいい
創造的なものはvipになる
これ以外もmustというよりはwantだろうから正直管理はどうでもいい(最悪こぼしてもいい)
table:m
rough fix
over personal オンデマンド 予定
personal VIP ルーチン
3
現在 …… inbox
未来 …… 先延ばし系
過去 …… ごみ箱
---
で、こうなった
https://gyazo.com/f018d35d54fc213648bbab900cd7ae6c
レイヤーが4つある
table:layers
1 特殊 割り込みボール扱ったときに表示する「割り込み」と、あとは過去ログ見る「ごみ箱」。普段は非表示。
2 inbox
3 work matrix
4 先送り
https://gyazo.com/2277e5a8343c34a750d162f89ed8a17a
他に必要な要素
current ball
今持ってるボール(タスク)
system ball
システムメッセージに相当するボールで、システムが適宜生成する
システムボールはごみ箱に直接入れられる
ので、あとでごみ箱(ログ)を見るときに色々とわかる
ログによる振り返りは欲しいが、キューだと「何したか」しかわからない。そこでこのシステムボールをなるべく自動でつくってやることで情報を拡充させる狙いがあるsta.icon
「VIPキュー1のサイズを2増やした」
「キュー1を削除した」
「今日は明日やるキューに3件入れた」
「今日は休憩キューのボールを2個余らせた」 etc
phases
1: hello phase
キュー達にボールを補充するフェーズ
一日の最初にやる
2: life phase
キューからボールを取り出して過ごすフェーズ
3: bye phase
一通り落ち着いたところで「今日はおしまい」と切り上げるフェーズ
一日の終わりにやる
余ったボールがあれば明日やるキューとかに先送りする
---
helloとbyeはそれぞれキュー1本で実装すればいいsta.icon
generator
hello時に、定期系キューにボールを入れるプログラム
ボールの圧縮
主に定期キューだと思うが、「床を掃除する」ボールと「床を拭く」ボールが当初べつべつだったのが実際は一気に両方やるので「床掃除ボール(掃いて拭く)」にまとめたい、ができるようにしたいって話sta.icon
さあ、俺が使う用のプロトをつくれい、実装案
ツール形態は?
秀丸エディタ + マクロ
VSCode + 拡張機能
フロントエンド + localstorage
CLIコマンド in terminal
---
tkinterかなぁsta.icon
エディタだと柔軟な形態やGUIが無理なので今回はやめてみたい
VSCodeは勉強にはなりそうだしニーズも多そうだがでかいので割愛
ローカルで完結したいのでブラウザ使う系もやめたい
キーボードだけで完結したい
できればカーソルキー選択よりも素早く
iキーでinbox選択、もう一度iキーで一つ取り出す ←これくらいeasyでありたいsta.icon
ウィンドウはどの仮装画面からでも呼び出したい
常に表示している、は表示領域占めてうざいのでやめたい
やりたいときに行うことはできる
ホットキー一発で表示するとか、連打したら表示とか、マウスカーソルをエッジに置いたら表示とか
クリップボードに指定文字コピーされたら表示……はまどろっこしいか
キューの絵って要る?
筒
= これでいい気がするけどw
まともな画像もヒットしないし
うん、文字でいいだろsta.icon
❌「ボールを常に表示する」は要る?
実際はテキストだからテキストを常に表示する、になるけど
イメージ。このメモ帳みたいな感じで常に表示されてる
https://gyazo.com/0863cd01752ab117f3f3152fb25bdba8
うざいか
余計そうなのはいったんなしでいいsta.icon
いや、もうとりあえずつくろうや
tKinterでシンプルなのでいい。ボタン並べる感じでいい。
それで早速使ってみて、だ
Ans:区別つける。shiftキー押してると「スキップマークつけてからごみ箱に入れる」動作、とかにすればいい
実装
データ構造
シンプルでいい
1-queue 1-textfile
テキストファイル名でキューの種類を判別させる
files
queues
inbox.inbox.queue
予定.schedule.queue
オンデマンド.ondemand.queue
朝一やる.routine.queue
朝やる.routine.queue
……
休憩.vip.queue
散歩.vip.queue
……
明日やる.tom.queue
明後日以降でいい.ttom.queue
ごみ箱.trash.queue
routinetasks.md
で、もう読み書きはqueueファイル達に行うだけ
ごみ箱.trash.queue
これだけ無限に太るのでどうしようか
1日せいぜい100行/日だからたかが知れてるけど
でかくなってうざいなら各自別の場所にローテすればいいしsta.icon
routinetasks.md
phase control
hello時にやること
tomをinboxに移動、ttomをtomに移動
generatorからroutineに移動
inboxを全部解釈して他のキューに移す
思いついたボールをオンデマンドキューに突っ込んでいく
bye時にやること
余りのシステムボール化
「xxx.vip.queueは今日はn個のボールが余りました」
vipはやりたい
それ以外はどうしよう
余ったボールをtomやttomに移す
dr
---
hello, life, byeの遷移タイミングがまだ見えん
hidaneみたいにファシリテーション組み込むか?sta.icon hello画面用意する
ボタン1つ用意して、クリックすることで処理する
step3は「inboxを全部解釈してください」みたいになる
画面レイアウトとかコンポーネントとか
カスタマイザブルにしたい
たとえばhelloフェーズのstep3 inbox処理部分の画面をさくっとつくるとかしたい
内部的にこれも設定ファイルにすればええんか?
うまく汎用的に設計してしまいたいsta.icon
配置の自由度どこまで許すか
たとえばリスト的に縦に一次元に並べるだけなら単純ですけども
グリッドレイアウト?
4レイヤーある
縦に4層
横に4列
マトリックス
specialは2つ、inboxは1つ、先送りは2つ、workが3つ+vip分
workとそれ以外で2列がいいかsta.icon
ダブルカラム
各カラムは
いや、いったんなしでいいや。まだ見えないsta.icon
操作とキーから考える
table:undoとredo。ボールは1個だけなので世代もn=1の超シンプル履歴
z Undo/Redo どこかに入れたボールを戻す(Undo)・やっぱり入れる(Redo)をトグルする
table:ボール持ってないときはキューの選択になる。二度押しでそのキューから一つ取り出す。
i inboxキュー
p 予定キュー
o オンデマンドキュー
r 定期キュー
1 vipキュー1
2 vipキュー2
<vipキューは最大9個まで>
t 明日やるキュー
space その場で新しいボールをつくり、それを持つ
すでに取り出してるときの二度押しは何もしない
table:ボール持ってるとき
<ボール持ってるときは二度押しで「そのキューに入れる」>
space (何もしない)
enter ゴミ箱に入れる
backspace スキップマークをつける・外すのトグル
q 割り込みキューに入れる
table:いつでも使える
q byeモードに移る? QuitのQ
h helloモードに移る?
l ゴミ箱を開く LogのL
あとはUI
❌案1: ポップアップメニュー
ショートカットキー自由に使いづらいからなしかな
案2: ボタンを並べる
案3: 領域を並べる
いいの浮かばんから、いったんリスト的に並べてしまえばいいや
---
code:ちょっと境界見づらいので目立たせたい 空行
0 =() 割り込み
p =() 予定
r =() 定期
i =() inbox
o =() オンデマンド
1 =() 休憩
2 =() コーヒー
3 =() 転職検討
4 =() 散歩
---
他に表示するやつは?
今持ってるボール
ごみ箱
hello, bye フェーズ遷移
インストールフォルダを開く
スクリプトを開く
code:c
0 =() 割り込み
p =() 予定
r =() 定期
i =() inbox
o =() オンデマンド
1 =() 休憩
2 =() コーヒー
3 =() 転職検討
4 =() 散歩
一番上にボールを表示
[=]はギアアイコンのつもりw これクリックするとメニューが開いて、
ごみ箱を見る(l)
helloフェーズ(h)
byeフェーズ(q)
インストールフォルダを開く
……
みたいな感じでここに操作ぶちこんでおけばいいsta.icon
コードレベルの詳細検討
utilレベルのqueue
ライブラリ?は依存だるいし自製でええか
標準ライブラリあるっけ?
あるある。じゃあこれでsta.icon
i/f気に食わなかったらラップするかも
domainのqueue
キュー名がある
ボールを出し入れする。n個持てる。
--- どうクラスつくるかまだ見えないがいったんここに全部書いてみる ---
実装としては「キュー名と同じ名前」のボールをn個出し入れする
enqueueはprivate method(ユーザーが直接増やさない)
ボール数をカウントする・見せる機能を持つ
定期キューもある
「私は hh:mm から hh:mm まで有効です」を持つ
domainのball
≒task
一行の文字列
予定ボール
時刻と一行文字列を持つ
uiのqueue
ショートカットキーを一つ持つ
domainのqueueを一つ持ってる
表示処理も担当する
このキューをどこに表示するか
このキューの時間連動強調表示
イベントも担当する
分担はsta.icon
domainのqueueはモデル。処理だけする。自分がどう表示されてるかは感知しない。
uiのqueueはビュー。表示とイベント受付。どう表示するかはコイツが頑張る。
キューの表示まわり
kz
定期キュー
予定キュー
---
「ボールが持つ指定時刻」が近づくにつれて強調する機能
「キューに設定された指定時間帯」の間だけそのキューを表示される機能
自分を複製する機能
ボールを複製先に飛ばす機能 or ゴミ箱から複製先にコピーする的な路線でもいいけど
概念の検討余地
予定キューのところ、もうちょい賢くならねえかなぁ
このツールで追加するときに!をつける、とか
code:xxx.md
1 明日やる
3 3日後にやる !
2022/06/10 10日にやる
この場合、二行目「3日後にやる」タスクは予定と解釈され、当日予定キュー側に入る、とか
!だとわかりづらいな
✅明後日以降やるキュー
これはいったんなくすかsta.icon*2
✅「yy/mm/ddに配置する」みたいなことどうやる?
tritaskでいう「7日くらい後でいいか」とかの実現
明日やるキューだけだと「明らかにここ2,3日はやらなくていいもの」も毎日見る羽目になる
これはたぶんtodarosみたいなミニツールつくるべきだと思うsta.icon
そしたらgeneratorで扱える
✅オンデマンドキューに入れるときの発散作業はどうやる?
普通はフリーライティングしたりタスク行並べたりして発散したあと、順番並べ替えたりして収束させていく
QDLだとボール一つつくってキューに入れることしかできないから、これができない
どうするべき?
ありそうな案は
脳内でやればええやん、不要やよ
「〜〜について検討する」ボールをつくってつっこむ(その場で洗い出すな原則)
手元で勝手に発散して、ボール入れる直前までつくった後、最後にQDLにぶちこむ
QDLツール側でテキストエリアを用意する
QDLツール側で順序変更可能キュー的なものを用意する(インデントできない1階層限定アウトライナー的なやつ)
何も用意しません!
本質的にキュー数をもうちょっと減らせる気がしているのだが……sta.icon無理そう。実際に使ってみてから見えてくるの待とうぜ
実装移れるくらいは情報出てる
けど、いまいち腰が上がらない
上がらなかった
が、キューの力は試したい。
俺が使う小物ツールとして実装……の路線かなぁ