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

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日分を残す

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

Ubuntu 22.04にアップデートした

トラブルは特になく自前でコンパイルしていたソフトウェアの emacsと h2oを再コンパイルしたぐらい. h2oはバンドルしている mrubyが古く Ruby 3では mruby handlerを有効にしてビルドできないため, Ruby 2が必要になった.

github.com

Ubuntu 22.04の Rubyは 3.0系になっているので, 一時的に Rubyを 2.7.6をインストールしてそれを使ってビルドするようにした. (Ruby 2.7.6の opensslが OpenSSL 3.0系に対応していなくて警告が出るが特に問題はなかった)

再インストール後 https://syohex.org/ も無事に動いた.

List::UtilsBy::XS 0.06をリリースした

metacpan.org

github.com

Debugビルドした Perlだと extract_by で assertionに引っかかることがあった問題の修正. 戻り値の個数が引数の数より多い場合 EXTEND を使って Stackを確保しないといけないという理解. 他のメソッドはなんで引っ掛からないんだって思ったけど引数の数と戻り値の数が同じ場合は問題ないようである. どちらも stackを使って渡されておりその分確保されているためだと思われる

Perlたまにテストが通らないとか動かないとかのレポートを受けてコード見るけど, XSはマジでわからん. 他の言語の C言語拡張も書いたことがあるけど, ここまで VMの構成を意識しないといけないのはないよなと思う. まあ最初期のもので他言語をそれを見て扱いやすいものにしたのだと思うけど. 今回は Perl coreにバンドルされるソースに似たものがあったので何とかなったという具合でした.

世界一やさしい海外移住の教科書

最近英会話を始めたりしたりして海外移住、海外で働くというのが幾分気になっているため読んでみた。1ページ当たりの情報量が少ないのですぐに読めました。大まかに情報を知るという意味では悪くなかったけど、そこの裏にあるであろう苦労があまりに見えなさすぎるのが気になった。個人的にはどれぐらい大変なことがあって時間かける必要があるというのが知りたかったのですがそういう本ではなかったです。「やさしい」と銘打っているのでそこはあまり触れずということなのかもしれないけど気になった。例えば英会話の習得にフィリピンなどへの短期言語留学が出てくるけど、調べるとうまくいかなかった話も少なからず出てきてそこまでお手軽ではないのではないかという気がした。

まあ海外移住をそこまでハードルの高すぎるものと考えすぎず, チャレンジすることが大事ということとして受け取っておきます。

F#を4ヶ月ほど学んでみて

今年に入って新しい言語を学ぶかということで F#の勉強を初めて 4ヶ月ほど経ったので現状のまとめ。 やったことは主に小さいプログラムを書いたり, LeetCodeの問題を 100問ほど解いたという程度(LeetCodeは現状 F#未対応なので対応してほしい)。

結論としては始めるのが楽で学ぶ価値のある言語だと考えています。

書いたもの

良い点

  • セットアップが楽
    • .NET SDKを入れて PATHが通って入ればどの環境(Win, macOS, Linux)でも始められる。あとはVSCodeに Ionide拡張を入れるだけで OK.
  • 1ファイルからコードを書ける
    • いちいちプロジェクトを作らなくても .fsxファイルを作って書き始められるのが良い
  • REPLベースの開発
  • Java系言語に比べるとだいぶ軽い
    • 気楽にやるにはすぐに REPLなど立ち上がってほしいので.
  • 標準ライブラリの APIシグネチャの統一感
    • パイプライン演算子を使うことが意識された引数の並び。
  • ライブラリの豊富さ
    • .NETはライブラリが豊富

いまいちなところ

現状特に不満はないですが、しいてあげるなら

  • 公式ドキュメントが複数ヶ所にある
    • 言語のドキュメントは Microsoftにあるけど, 標準ライブラリのドキュメントは githubにあったりと一つの場所にまとまっていない
  • Ionide拡張の REPL連携
    • Emacsだったらカーソル位置の関数を REPLに送るとか様々な単位で REPLに送れるのだけど, 行かリージョンかファイル全体かと大雑把な区切りしかない。特にカーソル位置の関数は欲しいかな
  • formatter
    • fantomasというのがあり, それを使えばいいのだけど無駄に空行があったり改行があったりあまり好きじゃない。まあ統一されているのが重要なので大したことはないのですが。

言語を学んで

普段は C++とか Rustとか C#を書いているのですが, immutable dataが基本でループでなく再帰を使うというのは良い刺激になっていると思います。 副作用を使えると一つのことにいろいろ詰め込んで書けてしまうけど, そうではなく副作用がないように分割して考えるということを意識するようになったように思えます。現状アルゴリズム的なものを中心に書いてきたので今後はアプリケーションなり実用的なものを書いていければなと思っています。