TODO: fontawesome を捨てて Remix Icon になっていく.
自分のためのメモ. 使ってるのは HIRAMEKI っていうメーカーのパスケース. 絵柄も含めてたぶんこれだったはず.
絵柄はもうとっくに消えてる. "HIRAMEKI" ってロゴもかろうじて読み取れてどこのものか判別できた.
ズボンのポケットに入れたまま何度も洗濯乾燥させたんで, 色は真っ茶色に変色したし少し形も歪んでる. できればこれと全く同じものの新品に取り替えたい気持ち半分, 愛着があるからもう変えられない気持ち半分.
RTX 5080 を積んでるので mouse5080 というマシン名にした. 諸々必要そうなソフトウェアのインストールとセットアップはしたけどまだやり残してることがある
SauceCodePro Nerd Font Mono
自動化する手段が用意されているなら, まだそのソフトウェアは民主的で自由だ.
過去にも問題を起こしてるのを知らなかった私が悪い. 秋葉原にあるイオシスとかさ, 実店舗に直接行って対面でやり取りするほうが安心だと思った.
この当時から2025年現在も品川にあるPCSワイヤレスという会社が委託されてるらしい. 送り先はそこになっている.
想像するに問題は, 送られてくるスマホの量が多すぎて追いついてないんだろう. そして Google サポートとこの下取り業者の連携が全く取れていない. それにしても Google のサポートは酷かった. 終始自信の無さそうな声で自分たちのミスを認めてくれなかった.
結果下取り上限の三万円が確定したんでいいんだけど, 一行か二行程度でもサポートからお詫びメールくらい来てほしかったね.
なんにせよ, Google ストアに余計なお世話を掛けたくはないので, 極力使わないようにする.
\(\def\C{\mathcal C}\)
Kleisli triple とはいくつかの条件を持った \((T,\eta,\#)\) のこと. 自分の理解のために対応する Maybe モナドを横に書いておく.
Maybe X = Something X | Nothing
圏(特に型の圏) \(\C\) で考える.
構成要素 | 数学的な意味 | Maybe モナドでの意味 |
---|---|---|
\(T\) | 自己関手 \(\C \to \C\) | 任意の型 X に対して Maybe X という型が存在すること |
\(\eta\) | 任意の \(A \in \C\) について射 \(A \to TA\) を与えるポリモーフィズム | return x = Something x という関数 return |
\(\#\) | 射 \(f \colon A \to TB\) があったときに射 \(f^\# \colon TA \to TB\) を定める | fmap f という関数が存在して,fmap f (Something x) == f x ,fmap f Nothing == Nothing |
次の3つの条件を要請する.
条件 | Maybe モナドで書き直した条件 |
---|---|
\(f \colon A \to TB\) について \(f = f^\# \circ \eta_A\) | f x == fmap f (return x) |
\(\eta_A^\# = 1_{TA}\) | fmap return m == m |
\(f \colon A \to TB, g \colon B \to TC\) についての合成則 \(g^\# \circ f^\# = (g^\# \circ f)^\#\) | 後述 |
最後の条件は
(fmap g) . (fmap f) == fmap (fmap g . f)
例えば Nothing
に適用すると
(LHR) = (fmap g) . (fmap f) Nothing = Nothing
(RHR) = fmap (fmap g . f) Nothing = Nothing
自明に成立. Something x
に適用すると
(LHR) = (fmap g) . (fmap f) (Something x) = (fmap g) (f x)
(RHR) = fmap (fmap g . f) (Something x) = (fmap g . f) x
というわけでやはり成り立っている.
Kensington の SlimBlade Pro 購入した. 前々から気になってたんだけど, 昨日 Amazon を見たら一万六千円が一万三千円になってたんで. もう今日の夕方届いた.
標準アプリの Kensington Works でボタン機能を割り当てた. まずはこれで勝負する.
サードパーティ製のツールを使えばもっと割当を増やせられるらしいけど, どうせほとんど使わないことは過去の自分が実証している. 意味のないボタンの押し方を覚えられるわけがないので.
左下と右下が通常の左クリックと右クリック. 同時押しで中クリックになる.
上の「Win+Shift+KeyS」は Windows のスクリーンショット機能. これは絶対多用することが分かってる.
右上の「左クリック」は左クリックとしか表示されてないけど, 実は Shift を重ねてる. ブラウジングの際に新しいタブで開くのに使う. でも大抵のブラウザでは「中クリック」で同じ挙動をしてくれるのでこれは要らないのではないか. でもまあ同時押しなんてしなくて済むならしないに越したことはない.
左上の「BackSpace」はブラウザでページを戻るために使う.
まだ上下対称に配置換えすべきかとも思ってる. つまり左クリックと右クリックを左上と右上に配置すべきではないかと.
トラックボールを水平方向に回すとスクロールになる. これは「水平方向」の判定がちょうどよく甘い. スクロールしたいときにちゃんとスクロールになる. そして人差し指をどうしても折り曲げないといけないあのスクロールホイールから開放された喜びが大きい.
今はこうなった
Windows が好きな理由の一つに AutoHotKey の存在がある.
これによってキーボード操作やマウス操作の挙動を自由に上書きできる. Windows API を直接利用してるから自由度が高いし安定しているし遅延みたいなものも感じられない.
現時点の設定がこれ.
##Requires AutoHotkey v2.0
##Include IMEv2.ahk
; vim-like keybinds
; Ctrl + `[ is Esc
^[::
{
IME_SET(0)
Send "{Esc}"
return
}
; Alt + ...
!h::Send "{Left}"
!j::Send "{Down}"
!k::Send "{Up}"
!l::Send "{Right}"
!m::Send "{Enter}"
; For Vivaldi
##HotIf WinActive("ahk_exe vivaldi.exe")
; yy copies the URL
:*B0:yy::
{
Sleep 100
Send "^l"
Sleep 100
Send "^c"
Sleep 100
return
}
##HotIf
ちょっと解説してみる.
##Requires AutoHotkey v2.0
v2.0 以降の記法を使うことを宣言している. ネットで適当に調べると v1.0 の記法がまだまだ多いので注意.
##Include IMEv2.ahk
IMEv2.ahk
というファイルを読み込んでいる. これは GitHub - k-ayaki/IMEv2.ahk: Autohotkey v2.0 でIMEを制御する関数群 から頂いたものを同じディレクトリに保存してる. このスクリプトは IME の状態を取得したり変更できる関数を提供してくれる.
; Ctrl + `[ ::
^[::
{
IME_SET(0)
Send "{Esc}"
return
}
Ctrl + [
を押したときの挙動を定義している. ターミナルを使う人は Ctrl + [
は Esc キーと同じ意味を持つ. 特に Vim は Esc を多用するから Ctrl + [
に慣れておくと便利だ. このときについでに, IME を無効にするとより便利だ. ノーマルモードにいるときに, ひらがな入力をすることなんて無いから. {}
の中が実行される処理で, IME_SET(0)
で IME を無効にし, Send "{Esc}"
で Esc キーを送信している.
; Alt + ...
!h::Send "{Left}"
!j::Send "{Down}"
!k::Send "{Up}"
!l::Send "{Right}"
!m::Send "{Enter}"
頭の !
は Alt
キーを意味する. !h
は Alt + h
のこと.
私のキーボード (HHKB) には矢印キーが無い. 一番右下にある Fn
を右手小指で押しながら, 右手人差し指で [;'/
らへんを押すと矢印キーになるのがデフォルトだ. 右手の小指がいつも腱鞘炎になっている理由の一つがこれだ. そもそも矢印キーを極力使わないのが HHKB の思想ではあるんだが, 現代においてそういうわけにもいかない.
一つだけ HHKB Studio という最新の HHKB を持ってる. これはカスタマイズの自由度が増えた. そしてスペースバーの更に下に3つキーが増えた. デフォルトでこれはマウスのクリックになってるのだが, Fn
をここに持ってくることが出来る. というわけで私は左手親指でスペースバーの下にある Fn
を押しながら右手で h/j/k/l
を押すことで矢印キーを入力できるようにしている.
それはいいんだが, じゃあ他のPC はどうするのか. そちらは昔の HHKB が刺さってる. わざわざ PC を切り替えるたびにキーボードを持っていくのか. 面倒だ. 結局どのキーボードでも使える設定を共有するのが良いと思う.
というわけで, どうせ他のアプリケーションで使ってないような Alt + h/j/k/l
を矢印キーだということにした.
ついでに Alt + m
を Enter
にしてる. これも小指を労るための設定だ. でもまだ癖で小指で Enter
を押してしまってる. m
にしてる理由はターミナル環境で ^M
が改行コードだから.
; For Vivaldi
##HotIf WinActive("ahk_exe vivaldi.exe")
; yy copies the URL
:*B0:yy::
{
Sleep 100
Send "^l"
Sleep 100
Send "^c"
Sleep 100
return
}
##HotIf
#HotIf
は条件を書いていて, Vivaldi がアクティブなときだけ以下のキー割当を有効にするという意味. 次の #HotIf
までが有効範囲.
yy
と入力したら {}
の中が実行される. Ctrl + L
でアドレスバーにフォーカスを移動し, Ctrl + C
で URL をコピーする. 間に Sleep 100
は入れたほうが良い. 最初と最後にも入れておくのも必要.
また yy
の前にある謎の *B0
だがこれは次の意味がある.
*
: yy
が入力されたら即座に発動する (他のトリガーを待たない)B0
: 入力された yy
を消す作業をしない
Backspace
がまず2回入力されるVivaldi 自体の設定でショートカットキーを定めてもいる. 例えば g
でページトップまでスクロール移動, Shit + g
でページボトムまでスクロール移動などを設定している. でも「URL をコピーする」という項目が無かったのでこれだけは AutoHotKey で実装している. ただし Vivaldi で設定できることは出来るだけ Vivaldi の中で設定するのが良い. 例えばテキストエリアの中の入力でも yy
が有効なので, yy
を入力した時点でフォーカスがアドレスバーに移動してしまう.
定期的に右手小指が腱鞘炎になる. 明らかに Enter キーのせい.
あと HHKB 特有だが矢印キーのために右下の Fn
キーを使う. これも右手小指で押す.
Enter キーは薬指で押すこと.
あと AutoHotKey で Alt+m
を Enter にした. でもIMEの変換候補の決定みたいな細かい操作はやっぱりEnterキーを使う癖が染み付いて離れない. 押すなら薬指でという癖をつけようとしてる.
矢印キーも Alt + h/j/k/l
に割り当てた. Alt
な理由は Alt
で修飾するようなショートカットキーを他に使ってないから. Alt
はどのキーボードでも大体同じ位置にあって同じように左手親指で押せるから.
最近見た夢3日分をちゃんと覚えてる.
夢日記。自分に五歳の息子がいた。五歳の状態で突然夢の中で出会ったのでお互いにどこか他人行儀に敬語で話している。息子は私に歳を尋ねる。私は少し躊躇するのだった。
夢日記。身近な人が死ぬ。悲しいがここは戦場なので黙って受け入れるしかない。それよりも、頼りにしていた人なのでこれからは自分が引っ張らなければならない。今後のことを考えよう。
夢日記。教室に行くと私の机が廊下に出ている。何故か犯人がすぐに分かった。その人のもとに行く。私は何もいわずまずその人の机の上のものを叩いて床に落とす。その人の机をわざと大きく上に持ち上げ、自分の場所に運んだ。多くの人がやめろと私を静止しようとしたが、かえって危ないから離れてくれと私は言って払った。私はまだ、こんなに幼稚に怒れるのかと呆れた。
基本いつも Powershell を経由して Get-Clipboard
と Set-Clipboard
を使ってた. しかも文字コードで死ぬことが常なので, WSL/Windows で共有するテキストファイルへの読み書きを経由させることで文字コード問題を回避してた.
こんなシェルスクリプトを使ってる.
TMP_WSL=~/Downloads/clip.txt
TMP_WIN="C:/Users/$WIN_USER/Downloads/clip.txt" # TMP_WSL と同じファイルを指してる
copy() {
cat | nkf -s >$TMP_WSL
powershell.exe /c "Get-Content $TMP_WIN | Set-Clipboard"
}
paste() {
powershell.exe /c "Get-Clipboard -Format Text > $TMP_WIN"
cat $TMP_WSL | nkf | tr -d '\r'
}
Vim/Neovim エディタでもこのスクリプトを噛ませることで, 環境を気にしないでクリップボード操作を実現させてきた.
しかし, 一つだけ大きな問題があって, powershell.exe の呼び出しに一秒程度平気で掛かってしまう. WSL からコピーした直後にブラウザでペーストしようとすると大抵間に合わない.
lemonade というツールを見つけた.
要は Windows にサーバを立ててしまって WSL からはそのサーバに HTTP リクエストを投げるだけの形にするらしい. 試してみた. 日本語を入れても簡体字を入れても変な文字化けは起こしてない. そして高速だ. 自前のシェルスクリプトにもこれを組み込んだ.