2024-01
いろいろなんとかした
全部知っている人間としては感動〜って言いながら見るけど普通に意味不明ではあるな
8話で BGM として入っているとはいえ麻奈verがないのにサニーピースverを聞いたとしても?だと思う
関連研究です
話や構成については何も言うまい
1つ言えることがあるならば,もう鈴音がキタサンブラックにしか見えない
WezTerm の split pane で別の domain を指定したら全体がそっちにアタッチされて崩壊した だめかー
ヘッドレスな tmux って作れないんだろうか
セッションとそれに紐付いた仮想端末の束を管理する
仮想端末束の破棄のためのセッション相当のものだけあればよいはず
WezTerm の上でペイン分割や新規タブをしたら,自分のセッションで新しい仮想端末を開いてそれを見せる 本当に画面の管理は不要か?
環境の大まかな形くらいは復元したいかもしれないな
dtach というのがあるらしい
ソケットを作り,アタッチ・デタッチできる
abduco というのもあるらしい
これは dtach と比べれば若干高機能で,1つのソケットに複数のセッションを作ることができる
概ねこれでいい,が tmux とかの持つウィンドウマネージャとしての機能を奪った後に残るものは欲しい tmux environment 相当のものは欲しい
どこから接続したかで環境変数を切り替えたりしたいので
ssh 経由で仮想端末を複数生成して管理する機能
ssh 先のセッションに手元からアタッチしたい
ssh 接続を用意し,その先でヘッドレス tmux を起動してそのセッションを自分のセッションとして取り込む
CLI で制御できる度合いが低すぎる
docker run なり kubectl exec なりで入った先で wezterm cli proxy してアタッチしたいんだけど,うまいことできない
ダイナミックな domain の追加ができないのは痛い
ダイナミックに追加はできないが,新しいウィンドウを作ることはできる
そしてコンフィグは起動時に上書きできる
なるほどなあ
domain を作るときに proxy_command を指定すればやりたい放題できる
ウィンドウが増殖するのでウィンドウマネージャに頑張ってもらう必要がある
mux server とコンテキストが全然違うので workspace にもできない
概ね他のウィンドウでやってた作業を他のウィンドウに移動させてやりたいだけなのに,それはできない
気軽に他の作業にアタッチして続行したくない?
popup……
ペインの UI が GUI であることを活かしておりよい
ペイン切り替え UI で文字がちゃんと出る
アクティブ非アクティブの違いが HSB の差で表現される(!)
saturation 落とすとめっちゃわかりやすい
これは TrueColor 駆使すれば可能なような気がしないでもない
prefix + q したら AA でペインの表記出てきて爆笑
SSH 先をいい感じにしたいよなあ
tmux -C を食わせて既存の tmux セッションの中に入れるみたいなテクないんだろうか
そういったものはなく皆さん tmux の上で tmux を起動するか別の端末を開いて ssh してるらしい
そんな……
というか繋いだ先によって UI が変わっちゃうのがかなりしんどいと思う
これが WezTerm の pane/tab を使っていて便利だと思っている最大のポイント リモートで繋いでいようが何だろうが同じ UI で操作できたらいい
そのせいで端末自体の UI を TUI で拡張するみたいなことはあんまり望めないのは歪みだと思う
結局何が欲しいんだろうな
新しく端末を開くという行為を(特に Linux 環境のほうで)よくやる
ちょっと開いて色々試すみたいなやつ
やらないほうがいい,という説もある
この癖をやめる方法として,常に1つの domain にアタッチするというものがあるだろう
やってみる
何が難しいのかよくわからない
↑で言及したどこでもwezterm cli proxyしたい問題が起きるのは誰もこの発想を持っていないからだと理解した
真に欲しいのはヘッドレスな tmux とそれをいい感じに処理する GUI の組み合わせだと思う
merlin は ocamlopt の吐き出した型情報ファイルを利用して補完している……と思いがちだが実はそれだけだなく 今編集しているファイルについては自分で持っているパーサ + 型チェッカーを使ってるみたいだ
パーサにエラー回復のためのパッチを当てている
外部の型情報はファイルに書き出したものを使い,今見ているファイルは自分で処理するという,ocaml コンパイラ自体と同じような仕組み
この結果として自分以外のファイルに対する補完は保存してビルドしないと反映されない
常にdune build --watchとかdune test --watchとか走らせていればいいのでそんなに問題にはならないとは思うが
色々と示唆がある
特にエラー回復ができるパーサを通っている(が部分的に壊れている)コードを元々の処理系で解析するのは簡単ではない
sourcemap + エラー除去したソースコードを作って処理系に投げ,返ってきた結果を sourcemap 見て辻褄合わせるとかはできるかもしれないが
結局処理系の見る外部環境をいじれたほうが都合が良く,そうなるとライブラリとして処理系を扱えるようにするか処理系がサーバーとして起動してほしいということになり……
merlin は single mode と server mode を持っていて,言語処理系がこうなっていたら割と便利じゃない?という感想がある
関数ないんだ,どうやって計算するんだと思ったが,項の要素は他の要素に依存できるので,それを使って計算すればいい
変な言語すぎる
code:cue
in: number
out: in + 1
}
#o: #f & { in : 1 } // --> { in : 1, out: 2 } dotfiles をコンテナに焼けばデバッグコンテナとして使えるのではと思った
2GB くらいある
neovim を起動する度にエラーが出る
nvim-treesitter 周辺
無いということがわかった
あまりに日常に対して最適化されすぎている
デバッグコンテナは欲しい
fish があれば問題ないか?
tmux があるとちょっと便利かもしれない
サーバー用 dotfiles があるといいんだろうなあ
fish 版と bash 版の両方があるといい
くるしい
WezTerm の mux server を試していたが,terminal multiplexing とかいうやつは色々と面倒すぎるということがわかった 同じ tty に複数の異なる環境から接続できてしまうので,接続元によって変わることが期待される環境変数(SSH_AUTH_SOCKとか)が接続元を示していない
先発である tmux もこの問題を完全に解決できているわけではなく,後勝ち(後に繋いできたセッションの値が優先される)の環境を環境変数とは別に持ち,それを端末の側から頑張って参照してくださいということになっている マルチプレクサを真にマルチプレクサとして複数の環境から同時に触る形で使う状況などほとんどないから問題にならないということなのだろう
マルチプレクサですらコマンドが実行されるとき,それを誰が実行したのかを取る方法を知らないのだ
ところで WezTerm のマルチプレクサは tmux の環境(update-environment/show-environment)に相当する機能を持たないため接続元に関わる情報を一切引き回すことができない マルチプレクサに繋いだ先からさらに SSH して……みたいなことはあんまり望むべきではない
VyOS で zone based firewall 家のファイアウォールをこれに
zone にインターフェースを所属させ、zone 間のルールを定義して繋ぐ
ルールの数は増えるが、その間の設定は大体全部通してOKとか既にあるコネクションならOKとかなのでそれぞれのルールはシンプルになる
落とし穴
local (INPUT / OUTPUT チェイン)は別ゾーンとして定義しないといけない
wan との接続が無くなると色々なものが死ぬ
コンテナの作るネットワークは別ゾーンにしないといけない
NS が違うので
pod-{podman のネットワーク名} を所属させているが再起動で消えないか心配
熱すぎ!で気付くのはダサい
mac 配列をやめる
ずっと macOS でも Win 配列で生きてきた Mac のキーボードだけ mac 配列
突然 mac 配列になっても困る
数日慣らそうとしたが、Alt と Cmd の配置がどうしても慣れずに指の位置合わせに失敗する
キーキャップを交換したくなっても困りそう
次世代自宅サーバネットワークのために色々
目標としては、エンドノードにより多くの選択肢を与えたい
現在のサーバネットワークでは、エンドノードはインターネットに出る際、どの経路を使って border router に接続するかくらいしか選択肢がなく、border router を選ぶことはできない これによってソースルーティングが不要になってシンプルな一方、出口が限られていることから高速な通信は望めないという問題があった
特定の経路については BGP ピアを用意することである程度改善が見込めるとはいえ、相手にも VPN と BGP の設定が必要でハードルが高い
どの経路、どの border router から出るかを選択したい
この時点で複数の border を扱える必要があり、これをするなら NURO光 と無料インターネットの経路を直接見せて選べるようにしたい 技術としては OpenVSwitch とか BGP-SRv6 とかを検討している
SRv6 を採用するならば適用範囲は家の中に限定したい 割とヘッダが大きくなるので VPN は通したくない
どの経路を選択するかを決めるために使う
経路に対応する SID を広告し、VPN router で decap して VRF を選択する CPU が弱すぎて VPN を張ってもまともな速度が出ないとか
もはや VyOS 系である必要性すらないので冗長化するなら適当な ARM SBC を選ぶのがいいのではないか ちゃぶ台返し
1台に収めるなら手作業暖かみ Traffic Engineering でよくない?
1台を2台にするのは大変だが、2台を3台にするのは簡単なんだよな
要するに1台でいいとするのはそれなりに重い決断になる
それはそれとして2台にするにしてももう少し対称性の高いものがほしい
というか SRv6 は「このノードを通したいならこの SID に encap すればいいよ」くらいの情報しかないわけで、各エンドノードがどこを通りたいかみたいなのは自分で設定する必要があるんだよな ここは Cilium とかがどうにかしてほしいところだが、現状は無いっぽい L3 で遠く離れたところに送るための都合のいいトンネルが必要なのでという話ではある
そのディレクトリから上に辿りつつ適当に無効化して動かすように設定する
mattn/efm-langserver でやるんか?と思って json をこねくり回していたが、eslint に関しては vscode が language server を持っているので vscode-langservers-extracted に存在するやつを使えばよい できるだけ Telescope の UI が開かれるようにした
プレビューとして優秀
code action の UI があんまりなので actions-preview.nvim を導入した
あんまり単純用途プラグインを入れたくないんだよなあとは思う
telescope-ui-select でよかったんではないか
そんなにうまくプレビュー出ないしな……
なぜか 30GB しかない(そんなものあるんだ)謎の SSD が入っていた
適当な 240GB くらいの SSD に変えた
バックアップが面倒だったのでこれからは USB-SATA ケーブルを使うようにしたい
帰る
kubectl plugin は kubectl hogeをkubectl_hogeに変換することで実現されるが,補完はkubectl-complete_hogeを呼び出すことで実現される
cobra の補完プロトコルというのがあり,それをそれぞれのシェルの補完機構の上でパースしたりすることで実現されるらしい
これ自体は cobra で書かれているので補完プロトコルを喋るコマンド自体は実装されている(kubectl_oidc-login __complete)ため,適当にシェルスクリプトを書いてあげることで補完ができる
ちなみに chezmoi で実行可能なファイルを配置するには executable_を付けてあげる必要があるらしい 新幹線の時間の関係上早めに着いたので秋葉原を徘徊していた
名古屋に行きたくなる発作が出たが気合で抑えていた
今旅行してライブなんて行った日には骨抜きにされかねない
遊舎工房に行った
秋葉原ではないと思う
ロープロだと 35g とか 20g のキースイッチがあるんだなあ
rokoucha.icon に会った
ジャンク屋徘徊した
茶
35g も静電容量無接点は初めてなので色々新鮮
軽すぎてめっっっちゃミスタイプするんだけどそんなものなんだろうか
APC でキーポイントを下げると Enter とかみたいな小指で打つキーが入らなくなっちゃうんだよな
新しいキーボードを買って慣らしをしたい気持ちなので三日分くらいの日記を書いている
変更タイミングは明らかなのに neovim が起動する度に実行するのは明らかにおかしい こなれてきたら上流に流したい
例えば,オプション引数を用いた場合,オプション引数の適用位置を示すために他の適用しないオプション引数位置に?*と書く必要があるが,これがパースできない
documentがオプション引数を持って使われている場合全てのハイライトが崩壊する
位置付き文字列リテラル(@から始まるもの)がパースできない
これは構文木の末端なのでエラー回復がしやすくてそこまで実害はないが
インラインテキスト中の数式リスト${| .. | .. |}の中の数式で数式リスト{| .. | .. |}が出現すると,内側の数式リストが終わる部分で外側の数式リストが終わったと判定され,パースに失敗する
おそらくレキサーの状態管理周りで厄介な問題そう
空のテキスト/数式リストがパースできない
{|| .. |}の2番目の|がエラー扱い
OCaml では問題なかったのだが,SATySFi では rainbow delimiters がよくわからない挙動をして困っていた パースに成功しているのに色が付かなかったり
1つの要素に複数の Ext color が設定されていたり
Grafana の監視をしていなかったのでメトリックを取り込むようにした grafana_http_duration_secondsのカーディナリティやばすぎる
パス・メソッド・ステータスコード別で出てくる
RED メソッドの実践として,リクエストレート,エラーレート,レイテンシを取るようにした
https://scrapbox.io/files/65994b530a1f82002209a045.png
グラフ以外に代表値として指定した期間における値を計算して出している
これを最初はirateを使って計算していた
rateは重いとされている
全然安定しなかったのでrateを使って計算するようにした
irateは "instant rate" なので range window の最後の2サンプルだけ使って計算する
「スパイクを検出する」とされているのはそのため
傾きというよりはその点における値であるため
外挿計算をせず,参照するサンプルが少ないために軽い
rateは range window の全てのサンプルを見てリセットの検出をしている
irate(nanka[range])においてrangeは vector にするために使われているだけで何の意味もない値らしい
resolution が下がるとだんだん見ている点が少なくなっていくから傾向を見るためにしか使えない
軽量なのでグラフの計算には便利
chezmoi の run hook によって aqua.yaml がアップデートされるとインストール処理が走る ツールのバージョン変更は Lazy Install の仕組みによって追従されるが,ツールの追加・削除はシンボリックリンクの変更が必要であり,インストールを走らせる必要がある
これを手動でやるのは辛いので dotfiles が適用されるタイミングで行われてくれると便利 run_onchange_after_ フックは apply 後にそのファイルが変更されていたら走るフックなので,ただシェルスクリプトを配置するだけではうまくいかない
chezmoi には Go Template をそのまま使ったテンプレートの機能があるのでそれを使って監視対象ファイルのハッシュを埋め込むことであるファイルが変わったらフックが走る挙動を実現できる dotfiles で node 製ツールのバージョンを管理するようにした
せっかく LSP という仕組みがあるのに neovim とその周辺だけが使える設定になってしまっているという感覚がある 惜しむらくは eslint --fix のような人間が選択する形の code action の提供が難しいこと
ドキュメント上はcommandの仕組みが存在しはするのだが一体どうやって動作するのか全くわからん
本厄で年男で大吉でムチャクチャだ
何を信じたらいい?