ラマインドツールをつくりたい
ここまでのまとめ
今試しているもの
misc
他にも色々応用利く気がするのよね
あるいはセレンディピティの推進とか?
-.icon
ラマインディ(Ramindee)
メッセージ
人の顔?
ラマインディ格納先
Scrapbox
ローカル
ラマインディを1行1個で列挙する
いつ知らせるか
離散的確率的出現
x分ごとに0~n-1までの乱数を発生させて、n<mだったら知らせる
xがインターバル
nとmで確率制御
セクション(時間帯)
この時間はラマインドする、この時間帯はしないの区別
昼休憩は要らないとか
午前は集中してるから要らないとか
どうやって知らせるか
ででんと画面を覆い被せて表示
バルーンなど控えめな表示
メール投げる、チャット投げる etc
マスコットなどキャラに喋らせる
オンオフ
ラマインド有効・停止を好きなタイミングで切り替えられるようにする
スイッチ
今やってる仕事に割り込ませないためには
席外したタイミングでラマインドする
そしたら戻ってきたときに目にするので自然sta.icon*2
新しいウィンドウ立ち上げるときにラマインド
特定のウィンドウがある程度アクティブになったら
たとえばoutlookがアクティブになった≒メールチェック≒合間
ラマインドボタン
ボタン押したらラマインディがランダムにラマインドされる
表現わかりにくいなsta.icon
n個のラマインディのうち、どれか一つが選ばれて表示されるということ
ボタン押す。メッセージ表示される。「そやね」「微妙やな」「何やっけこれ」を選ぶ。
いつ何選んだかは記録される。
週一くらいでレビューすることで評価する。
ラマインディが表示される。
入力欄があるので、入れることができる。
「できた」「できなかった」「覚えてなかった」「これ要らんわ」も選択できる。
できなかったものを優先的に表示させる?(なんかAnkiみたいだな これ、Scrapbox projectを対象にするのもアリではないか?
俺のラマインディ候補
もっとシンプルでいける気がする
背景
「心がけたいこと」とは
反省したばかりのこと
反省ではないが、取り入れたいこと etc
「心がけたいこと」は格言問題であり、身につけるのは容易ではない ラマインドで解決できないか?
ランダムにリマインドするという安直な発想
最初はランダムにして、その反応をカウントしていけば、徐々に「適切なタイミングでリマインドされる」に収束していくのではないか?
つまりは格言の応用を学習曲線で解決するあぷろーち
が、そのまま当てはまるとは思えないので、計算式は自分で探す必要があるsta.icon
カウントのイメージ
ラマインドしたときに、そのラマインド内容(ラマインディ)に対して「どやった?」と問う
選択肢は以下7個
成否
success できたで
fail できなかったで
想起タイミング
too fast まだやで
too late 覚えとらんわ
ラマインディに対する習熟
i am winner もうええんちゃう?
i am loser 無理やわこれ
ちょっと今手離せんから後にしてくれ
too busy ちょっと黙っててくれ
ラマインディをどう出現させるかのアルゴリズム1
spanとinterval rand
allow spanとdeny span
allow span(許可時間帯)中はラマインドできる
指定間隔(interval)ごとに指定範囲乱数(max rand)を発生させて一致判定する
たとえば1分ごと0~4の乱数を発生させて、=1 ならtrueとみなすとする
これは「1分ごとに20%の確率で出現」に等しい
I/Fとしてはmax randだけでいい
ラマインド各々のspanとmax randを、どやった?の反応に応じて変えていく必要があるわけだが。。sta.icon
---
if success then maxrandを増やす
if failed then maxrandを減らす
んんんん?sta.icon
if too fast then spanを未来にずらす
if too late then spanを過去にずらす
ここで言う未来や過去の基点ってどこ?
リマインドしてからn時間後、のn?
ラマインディをどう出現させるかのアルゴリズム2
開始猶予(starting extension)と発生確率(maxrand)
開始猶予
今からn時間後に、そのリマインドが発生可能になるとして
このnのこと
n=10だと、今から10時間後に発生可能になる
発生可能とは
リマインドが発生しうること
発生は発生確率によってコントロールされる
発生確率
1分ごとに0からN-1の乱数を計算し、0(他の値でもいい)と一致すれば発生させる
Nをコントロールすることで確率を制御する
発生確率をxパーセントにしたい場合、Nの値は100/x
----
if success then 発生確率を減らす
if failed then 発生確率を増やす
if too fast then 開始猶予を伸ばす
if too late then 開始猶予を縮める
---
んんん?
たとえば一発目のリマインドでtoo lateした場合はどうする?
今だと「縮まった後の開始猶予」まで引き伸ばされてしまう
理想を考えればいい
発生確率を増やしたい、が直近のシチュは覚えていないんだよな
次のシチュは発生するまで待つ必要がある
次のシチュが発生してから速やかにリマインドしてほしい
一発目のリマインドでtoo fastした場合は?
シチュがまだ発生してない
引き続き待つ必要がある
発生確率はそのままに、発生不可能時間帯をちょっとだけ挿入する?
いや、ちゃうなsta.icon
ラマインディごとに「心がけを発揮するタイミング」を定義する必要があるかもsta.icon
たとえば仕事中に気をつけたいなら、タイミングも仕事時間中になる
---
ラマインディごとに以下を持たせる?
心がけを発揮する時間帯(ActionTime - at)
心がけを発揮したかどうかを振り返る時間帯(Review Time - rt)
code:relation
future <---- past
at ----------
rt ------ atの後に振り返る
at ----------
rt ------ atの後半からatの後にかけて振り返る
at ----------
rt ----- atの最中に振り返る
at ----------
rt ----- atの前からatの前半にかけて振り返る
at ----------
rt ----- atの前に振り返る
理想は?
発揮直後で、かつ振り返りができるとき
結局学習するしかないか?
といっても自ずと決まるよねこれsta.icon
心がけを発揮する場面(Scene)には以下の種類がある。sceneの発生タイミングと言及するべきか。
1: 発生タイミングも回数も決まっている
2: 発生タイミングは決まっているが、回数は不定dont care
3: 発生回数は決まっているが、タイミングは不定
4: 不定of不定dont care
---
1の場合、タイミングの直後あたりにすればいい
3の場合、適当な頻度でリマインドするしかない
しかし発生回数が既に今日分を満了しているなら、1に帰着できる
ってことは、リマインドの度に発生回数を入力させる?
が、too lastはそもそも発生自体を覚えてないという話
単純化するなら rt = at とみなす。というかまずは単純化すればいいのでみなすね。
が、too late / too fast 発生しまくりそう
too発生したときにどう調整すべきかが肝心
ただの発生確率コントロールだけじゃ足らんと思う
code:a
future <---- past
at ----------
rt ---------- 初期状態
at ----------
rt ---------- too fastが出た場合、未来にずらす
at ----------
rt ---------- too
んー、んーーーー。
調整対象
rtの位置
rtの長さ
操作から考える
rtの位置を未来にしたい
rtの位置を過去にしたい
rtを短くしたい
rtを長くしたい
発生確率を上げたい
発生確率を下げたい
---
「どやった?」時に上記を選ばせるってのをイメージしてるsta.icon
その場でn回操作できる
何ならビジュアルで見せる?
これが良さそう
もっともっとシンプルで行ける気がする
常時起動させてaction time/review timeを学習させるこの考えをやめる
「手動で有効にする」「有効にしている間に限り、発生確率に従ってラマインドする」
これくらいシンプルでいいんじゃないか説sta.icon*3
だけど「試したいラマインド」が俺にないな。。。sta.icon*2
中断するか at 2021/09/15
データ構造
class Raminder
Ramindee: ramindee
TimeRange: action_time
TimeRange: review_time
int: probability
Counter: success
Counter: failed
Counter: yet
class Ramindee
str: message
RamindAction: action
Class RamindAction
str: commandline
class TimeRange
DateTime: past_side
DateTime: future_side
----
https://gyazo.com/2811df9d0024b95ad1fa8279b72f9a9f
1 shift_to_future(minute)
2 shift_to_past(minute)
widen_past(minute)
widen_future(minute)
3 narrow_future(minute)
4 narrow_past(minute)
操作パネル
結果
できた
できなかった
まだ
ラマインダーのチューニング
ずらす
n時間先にずらす
n時間前にずらす
広げる狭める
n時間狭くする
n時間大きくする
複製する
---
数直線とか出して直感的に操作できた方がええよねこれsta.icon
いや?
そういうの調整させることなく、ずらしと広げ狭めをテキトーにやってるだけでいい感じの塩梅に収束していくことを狙いたいのでは?sta.icon*2
そういう意味では、nの値さえも固定してしまった方がいい
Q: 時間帯複数に設定したい場合は?
たとえば12-14と19-21など
Ans: 同じラマインダーを複製して2回セットすればよろし
UI苦手だから何かしら身に付けないとなー
Electronとか学んでみたい(重そうだが
おそらく「ランダムに心がけをぶつけてくるのがうざい」「でもそれを付き合っていくことで心がけを忘れず意識できる」みたいなバランス(境地)にありつけるんだと思ってる
別の言い方をすると、
心がけの割り込み(Interrupt of Newmind / IoN)は、何にもまして重要であるという前提
そうでないような心がけは大したものではない
うん、この問題は「心がけの割り込み」という概念の検証に他ならない気がするsta.icon*3