Visual Studio Code 1.67(2022 April)で入った Toggle Inlay Hintsが良い

code.visualstudio.com

詳細は公式サイトを見てください。

Visual Studio Codeでは上記のように型を書いていなくても型を表示してくれるわけですが, 正直うざいと思うことが多い。特にあまり型を明示的に書かない F#や Rustの場合. 見た目もそうなのだが, 文字を挿入したり削除するときどこにカーソルを合わせるのが適切なのかがわかりづらかったりする問題もあってあまり好きではなかった。ただしどうしても型を知りたいこともあり有効にするか悩ましかったのだが, 先のフラストレーションの方が大きかったので一部機能を無効化していた(F#では細かく設定できたため, 変数と関数呼び出しの型表示を無効化していた).

1.67で入った Toggle Inlay Hintsがこの問題を解消してくれた. editor.inlayHints.enabledon, off しかできなかったのだが, ここに onUnlessPressed, offUnlessPressed という値が設定できるようになり, それぞれデフォルトで Ctrl-Alt を押している間だけ型ヒントを表示, 非常時にできるようになった. offUnlessPressed に設定すれば普段は非常時, 型が見たいときだけ Ctrl-Alt を押せばよくなり, 個人的に非常に使い勝手の良いものになった.

補足: F#の関数の型とパイプラインオペレータを使ったときの行末の型は常に表示するようにしています. 各変数や引数の型が Ctrl-Altにより表示を切り替えられるようになっている.

設定方法

GUIの場合は inlay 等で検索して項目を設定する

settings.json の場合は以下の通り

{
    "editor.inlayHints.enabled": "offUnlessPressed"
}

scoop cleanup

Windowsでのパッケージ管理には scoopを使っているが, scoop cleanup を知らなかった.

> scoop cleanup '*'
Removing 7zip: 19.00 21.06
Removing bat: 0.18.2 0.18.3 0.19.0
Removing cmake: 3.21.3 3.21.4 3.22.0 3.22.1 3.22.2 3.22.3
Removing deno: 1.16.4 1.17.0 1.17.1 1.17.2 1.17.3 1.18.0 1.18.1 1.18.2 1.19.0 1.19.2 1.19.3 1.20.1 1.20.3 1.20.5 1.20.6 1.21.0 1.21.1
Removing fzf: 0.27.2 0.27.3 0.28.0 0.29.0
Removing gh: 1.10.3 1.11.0 1.12.1 1.13.1 1.14.0 1.9.1 1.9.2 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.5.1 2.5.2 2.6.0 2.7.0 2.8.0
Removing go: 1.16.3 1.16.4 1.16.5 1.16.6 1.16.7 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.17.5 1.17.6 1.17.7 1.17.8 1.18
Removing gradle: 7.0 7.0.2 7.1 7.1.1 7.2 7.3 7.3.1 7.3.2 7.3.3 7.4 7.4.1
Removing lessmsi: 1.8.1 1.8.2 1.9.0
Removing llvm: 11.1.0 12.0.0 12.0.1 13.0.0 13.0.1 14.0.0 14.0.1
Removing python: 3.10.0 3.10.1 3.10.2 3.10.3 3.9.4 3.9.5 3.9.6 3.9.7
Removing ripgrep: 12.1.1
Removing rustup: 1.23.1 1.24.0 1.24.1 1.24.2
Removing sqlite: 3.37.2 3.38.0 3.38.1 3.38.2 3.38.3
Removing zoxide: 0.7.3 0.7.4 0.7.5 0.7.7 0.7.8 0.7.9 0.8.0
Everything is shiny now!

だいぶ古いものが溜まっていた.

HTTP::Tinyで httpsアクセスで 599が返るようになった問題の修正

某モジュールのメンテンスでテストに必要なモジュールを入れようとしたらそもそもエラーが出るということで, エラー原因を調べてみたところ下記のようなエラーが出ていた。HTTP::Tinyを使った httpsへの GETが軒並み失敗していることが原因であった。

$VAR1 = {
          'headers' => {
                         'content-type' => 'text/plain',
                         'content-length' => 110
                       },
          'success' => '',
          'url' => 'https://fastapi.metacpan.org/author/XSAWYERX',
          'status' => 599,
          'content' => 'IO::Socket::SSL 1.42 must be installed for https support
Net::SSLeay 1.49 must be installed for https support
',
          'reason' => 'Internal Exception'
        };

IO::Socket::SSLNet::SSLeay も最新バージョンが入っているのになんでだろと思って以下のコードを実行したところ, 次のようなエラーが出てすぐに問題が特定できた. Ubuntuをアップデートしたところ OpenSSLのバージョンが更新されメジャーバージョンも変わってしまったために再コンパイルが必要になっていただけであった.

use IO::Socket::SSL;
Can't load '/home/syohei/.plenv/versions/5.34.1/lib/perl5/site_perl/5.34.1/x86_64-linux-thread-multi/auto/Net/SSLeay/SSLeay.so' for module Net::SSLeay: libssl.so.1.1: cannot open shared object file: No such file or directory at /home/syohei/.plenv/versions/5.34.1/lib/perl5/5.34.1/x86_64-linux-thread-multi/DynaLoader.pm line 193.
 at /home/syohei/.plenv/versions/5.34.1/lib/perl5/site_perl/5.34.1/IO/Socket/SSL.pm line 19.
Compilation failed in require at /home/syohei/.plenv/versions/5.34.1/lib/perl5/site_perl/5.34.1/IO/Socket/SSL.pm line 19.
BEGIN failed--compilation aborted at /home/syohei/.plenv/versions/5.34.1/lib/perl5/site_perl/5.34.1/IO/Socket/SSL.pm line 19.
Compilation failed in require at a.pl line 2.
BEGIN failed--compilation aborted at a.pl line 2.

再インストールしたら問題が解消した

cpanm --reinstall Net::SSLeay

apt-key deprecation warningの解消

askubuntu.com

gihyo.jp

W: https://packagecloud.io/slacktechnologies/slack/debian/dists/jessie/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

最近上記のような警告が出ていて何のことかわかっていなかったけど、apt-keyが廃止とのことだったのでこの際修正してみた。記事を読むと本質的な対応ではないようだが, 3rd partyのリポジトリのものはひとまずこれで良いっぽい. 手順は上記の askubuntu.comの手順の通り. まず該当の鍵を探す

% apt-key list
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
/etc/apt/trusted.gpg
--------------------

pub   rsa4096 2016-02-18 [SCEA]
      DB08 5A08 CA13 B8AC B917  E0F6 D938 EC0D 0386 51BD
uid           [ unknown] https://packagecloud.io/slacktechnologies/slack (https://packagecloud.io/docs#gpg_signing) <support@packagecloud.io>
sub   rsa4096 2016-02-18 [SEA]

次にそれを exportする

% sudo mkdir -p /usr/local/share/keyrings
% sudo apt-key export 038651BD | sudo gpg --dearmour -o /usr/local/share/keyrings/slack.gpg # 鍵IDは apt-key listで得られたもの(末尾2ブロック)

sourceファイルを編集し, exportしたものを明示的に指定する

% sudo vim /etc/apt/sources.list.d/slack.list

以下のように書き換えた

deb [signed-by=/usr/local/share/keyrings/slack.gpg] https://packagecloud.io/slacktechnologies/slack/debian/ jessie main

apt update をして警告が消えるかを確認する

sudo apt update

問題が解消したら鍵を消す

sudo apt-key del 038651BD 

ついでに expiredの未使用の鍵がたくさんあったので消しておいた.

良いコード/悪いコードで学ぶ設計入門

gihyo.jp

良いコードを書くのは難しいなと思った。自分が今どういうコード書いているのかとか激しく依存するからここに載っていることをすべて実践すればうまくいくのかと言われるとなんとも言えない。経験がある人で良いものも悪いものも知った上で今の自分が関わっているコード、これから関わるであろうコードに対してちゃんと考えて適用するってのがいいのかなと思った。悪いって書かれているものも必ずしも悪いかというとそうではないケースもあるんじゃないかなと思ったので、個人的には何も知らない人けど良いコードを知りたい人は少し向かないんじゃないかなと思った。良いと書かれているものでも本当にそうだろうか、自分たちのものに適用するのが正しいのだろうかと考えられるぐらいの人に適しているのかと思いました。

Ubuntu 22.04で JetBrains Toolboxが動かなくなった問題の対応

https://youtrack.jetbrains.com/issue/TBX-7534

ふと気づいたら, JetBrains Toolboxが動かなくなっていた。libfuse2を dlopenしているようだが, Ubuntu 22.04で libfuseが 3系がデフォルトになってしまったので動かなくなっていた。

以下のようなエラーが出るかを確認する

% ~/.local/share/JetBrains/Toolbox/bin/jetbrains-toolbox
dlopen(): error loading libfuse.so.2

AppImages require FUSE to run. 
You might still be able to extract the contents of this AppImage 
if you run it with the --appimage-extract option. 
See https://github.com/AppImage/AppImageKit/wiki/FUSE 
for more information

確認できたら, libfuse2をインストールする

sudo apt install libfuse2

これで動いた

/var/log/journal 以下を掃除する

unix.stackexchange.com

10年超動かしている Ubuntuサーバ(systemdが動いていたのは10年もないかもしれないが)のディスク容量が残り少なくなってきて掃除できないかなといろいろなディレクトリのサイズを見ていると /var/log/journal 以下にログが 10GB近く溜まっていることがわかった. 個人的に動かしているサーバでログを見ることも直近のをたまに見る以外ないので古いのは全部削除しようと思ってその方法を調べたので, そのメモ

サイズを調べる

sudo journalctl --disk-usage

定量を残して削除する

sudo journalctl --vacuum-size=100M # 直近の 100MBを残す
sudo journalctl --vacuum-time=2days # 直近の 2日分を残す

これでそれなりに空き容量ができた.