There's an echo in my head

日々のメモ。

リズと青い鳥

みた。

liz-bluebird.com

よかった。絵本のストーリーに沿って最初はみぞれが自由な希美を束縛してるのかなと思ってたけど、物語が進むに従ってその立場が逆転して、それに当人たちが気づくという過程は最高だった。その変化を促していく周囲の友人の気配りであるとか、後輩含めた交友の変化とか、そういう周囲の環境が優しい世界だった。本気を出した演奏もよかった。映画館の音響で吹奏楽を聴けるのが嬉しい。Homecomingsのエンディングテーマもどこか懐かしく素晴らしかった。もう上映頻度が下がってしまったけれど、機会があればもう一度見に行きたい。

伝わりにくい個人的みどころ

  • 窓を開ける前後で音の聴こえ方が変わる
  • 岩波文庫

Unityのバッチビルド時にJDK, Android SDK/NDKのパスを切り替える

複数のUnityのバージョンが混在するCI環境を構築していると、バージョン間でAndroid SDKやNDKの要求バージョンが異なるためにビルドスクリプト側でこれらを設定したいということがある。そんなときは次のように記載すればいい。

EditorPrefs.SetString("AndroidSdkRoot", "/path/to/android/sdk");
EditorPrefs.SetString("AndroidNdkRoot", "/path/to/android/ndk");
EditorPrefs.SetString("JdkPath", "/path/to/jdk");

Integer Unificationの判定方法

CRuby 2.4から整数がIntegerに統合されるとともにその子クラスであるFixnumとBignumが廃止されたが、下記のようなコードを使えばそれを手軽に判定できる。

if 1.class.name == "Integer"
  # 統合後の処理
else
  # 統合前の処理
end

このようにバージョン番号を使わずに判定することで、JRubyなどの別実装で同様の変更がかかっても同じコードで対応できる。

ちなみにdefined?(Fixnum)でも同じ判定ができるんだろうけど、

  • Fixnumがなにがしかで引き続き定義されてたら期待通りに動かない
    • 手軽に互換性を維持しようとしてclass Fixnum < Integer; endしてるとか
  • Bignumが忘れられてるようでかわいそう

といったあたりが気になるので、今回のような判定方法のほうが個人的には好き。

Alpine上でstart_serverを使おうとしたらno such file or directory

lestrrat-go/server-starterというホットデプロイしてくれるものがある。

github.com

これをAlpine LinuxなDockerコンテナ上で使おうとしたら下記のようなエラーが出た。

standard_init_linux.go:190: exec user process caused "no such file or directory"

結論から書くと、原因は依存ライブラリがdynamic linkされた実行ファイルを使っているのが原因だった。どうやらReleasesに置かれている実行ファイルはlibcなどが環境にある前提のものらしく、Alpine Linuxにはそのようなものはないので上記のようなエラーが出てしまっていた。

というわけでgolangで書いたアプリケーションのstatic link化を参考に手元でstatic linkしたものをビルドして使ったら上記のようなエラーは出なくなった。

cd $GOPATH/src/github.com/lestrrat-go/server-starter/cmd/start_server
GOOS=linux GOARCH=amd64 go build -a -tags netgo -installsuffix netgo --ldflags '-extldflags "-static"'

しかしここで指定してるnetgoとは何なんだろう :thinking:

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。