ls --hyperlink の Feature Request を見つけた

https://lists.gnu.org/archive/html/coreutils/2017-05/msg00000.html こんな変なものも割と簡単に受け入れられるんだな,と思った。 で,ここにパッチとかも入ってるメール。 https://lists.gnu.org/archive/html/coreutils/2017-08/msg00038.html

チャンクアップデートの最小幅を使ってパフォーマンスチューニングした

Minecraft で読み込まれるチャンクの半径は 3–16 の間で選べるのだそうだ。 ということは,5 チャンク飛ばして更新されているか確認していけば 3 チャンクだったとしても どこかのチャンクにはぶつかるということだ。 というわけで,1 チャンク見て,間の 5 チャンクは更新されているかの確認もせずに 飛ばして,更新されていたら間のチャンクがアップデートされているか確認する ということにすると,何も更新がない場合の生成がかなり速くなった。 やっぱりやることを減らすと簡単にかなり速くなる。

Emacs の glasses-mode

camel case を snake case で表示してくれるやつ。 僕は camel case より snake case や chain case の方が好きなので, ………と思ったけど表示とデータが違うって実際に書くときに使える訳ないじゃん。 そういや C# で推奨されてるメソッド名を大文字で始めるってやつ好きくない。。。。。(言葉がおかしい) (setq glasses-mode-uncapitalize-p t) ってしとくと,アンダースコア直後のアルファベットが小文字に変換されて表示される。 まあ実用性はないです。 実用性ないといえば,M-x zone とかけっこう好き。特に drip 系のエフェクトが秀逸。 という訳で,glasses-mode は好きじゃないスタイルのソースコードを眺めるときに便利だよ, という話でした。(ほんまか)

xterm でクリックできるっていうのでいうと

xterm だと何らかのコントロールシーケンスでマウスのクリックを 取れるとかいうのがあったな。そんなコントロールシーケンス使ったことないので 説明はできないが。 working example でいうと,w3m とか。w3m 素敵だよね。 こんにちの Web には対応不可能感が漂いすぎてるけど。 あと Emacs だと M-x xterm-mouse-mode でマウスで カーソルを動かしたりできるようになる。

ハイパーリンクのエスケープシーケンス

端末エミュレータで URL に飛ぶといえば,たいていのものについている URL の自動検出機能 を使うというのがまあ普通の答えになる気がするんですが,任意のテキストに URL を割り当てる エスケープシーケンスというのが世の中には存在するという話。(今日知った) TL;DR ハイパーリンクは次のようなエスケープシーケンスで実現できる。1 "\e]8;;${URL}\a${LABEL}\e]8;;\a" 例えば,http://example.com に飛ぶ 「Click here」というリンクを作りたかったら, 下のようにする。 "\e]8;;http://example.com/\aClick here\e]8;;\a" 経緯 これを知ったきっかけというのは, $ coredumpctl --help というコマンドを実行したことだった。ヘルプの下の方に coredumpctl(1) man page という点線のついた文字が表示されていて,右クリックのメニューからリンクをたどってみると, マニュアルページのウィンドウが表示されて驚いた。僕は plain-old な man コマンドでの 表示の方が好きなので,HTML 変換されたものが表示されたのには納得がいかなかったが。 まあそんなことはさておき……。

簡単なテキストエディタを作る(その1)

前のポストでテキストエディタ自作の知見のことを思い出したので,書いておこうかなと。 この記事では,端末で動く簡単なテキストエディタを作ります(ただし, そんなにまとまっていないかつサンプルコードとかも限りなく少なくなると思うので, 断片的な情報にすぎない気がする)。 この記事では GNU/Linux のシステムを前提としますが,macOS や BSD 系の OS など Unix 系の OS であればほとんどの内容は通用すると思われます。 また,Windows Subsystem for Linux (WSL) でもおそらく動作しますが, テストはしていません。 また,端末エミュレータは xterm 互換である必要があります。 GNOME 端末,Konsole,mlterm など主要な端末エミュレータ(端末)であれば問題ありません。 WSL を使っている場合で,Windows Terminal を使っている場合, 細かい部分で非互換が発生することがあります。 なお,筆者は ArchLinux 上の GNOME 端末で開発を行いました。

Linux From Scratch

有名すぎて今更感あるけど(でも実際にやった人はあまりいないと思われ)やってみたい。 grub のコマンドを編集すると bash を init ってことにして 立ち上げたりできるので(シングルユーザーモードで起動するみたいな話), 特定の処理専用の Linux を作れるよな,と思ったところから, Linux From Scratch したいみたいな発想になってしまった。 http://lfsbookja.osdn.jp/7.10/ 翻訳のバージョンはちょっと古そうだが,英語を読むという辛さがないし, 参考にしながら腕試しがてらやってみるのもいいかな,という気持ちになった (持てる知識だけで新しい構成にしつつ起動するところまでいけるのかは微妙)。 そもそもこれは systemd じゃなさそうだし,systemd にするにはいろいろ変える必要がありそう。 まあ僕は systemd 便利でいわゆるきれいな設計なんだろうなとは思うけどあまり賛成派ではない。

いくつかこまごましたツールを作った

今日は小さいツールを2つほど作って,ちょうど700行コードを書いた。 まあ空行とかコメント(ほとんどない気がする)も含まれるのであまり意味のある数字ではないけど。 1つはパイプラインの中で標準入力をテキストエディタで編集して標準出力に流すというもので, なんかこんなのすでにシステムにインストールされたりしてそう……。 作っている時はパイプラインの中で使うという発想があまりなかったし, あまり機会がある気がしないが,ヒアドキュメントとかヒアストリングとかを意識して hereed というゴミみたいな名前にした。 もう1つは Wake-on-LAN のユーティリティで,0個以上の予め登録したホストを 同時に Wake-on-LAN できるというものだ。 送るホストを選ぶところは,以前にテキストエディタを作った時の 端末の制御の知見があったので,それが使えた。non-canonical mode にするとか, エコーバックを無効にするとか。 まあ知ってれば何も難しいことはないけれど。 設定ファイルが json なのが Unix のツールとしてイケてないと思うけど, 設定の構造的に json が都合が良かったのでまあ使った。

すごい syslog の話

なんか /var/log あたりを見ても syslog がないな,と思っていたら, systemd がすごい syslogd をやってるらしい。systemd 肥大化しすぎでは……。 で,そのログを見るには, $ journalctl とかする。 でも,これは保存されているログが古い方から全部出てしまうのでたいていの場合は用途に合わない気がする。 僕の場合は 12 月のログとかが最初に出てきてうーん,となった。 たいていの場合はログは新しい方から見たいんではないかと思うので,そういう場合は, $ journalctl --reverse とかすると,新しいものから表示してくれる。 あと --grep オプションとかもあって, $ cat /var/log/syslog | grep foobar みたいにやってたところを 1 つのコマンドで済ませられるっぽい。うーん,でもこれはなんかなー。 他には --since とか --until とかもあるっぽいけど,syslog.1 とかの方がなんとなく好きだったりします。

JavaScript History API

久しぶりに触った。例によってマップの実装に使った訳だが。 プラウザの履歴をゴニョゴニョできる API だが,適当に使うのは割と簡単。 history.pushState(null, null, '?foo=bar'); みたいな感じで URL のクエリを書き換えたりとかできる。 MDN を見たら第一引数と第二引数にいろいろ渡していたが,めんどくさいので null でよさそう。 書き換えを listen する方は, window.addEventListener('popstate', () => { // なんか処理 }); とかでよさそう。これが呼ばれたときには URL が書き換わっているので, それを location.href とかで取ればよさそうな気がする。 真面目にやるなら push したときの値を受け取って使う感じになるんだろうけど。 onload と同時に popstate が起こるブラウザもあるらしい。怖いよ〜。 参考 https://developer.mozilla.org/ja/docs/Web/API/History_API https://qiita.com/nenokido2000/items/2dd8da77d06837c8a510