saruboの書き溜め

いいこと書けないですけどこんな記事でよければ見ていってね

Scala の ArrayBuffer では init だけでなく dropRightInPlace を使うことも検討してみませんか?

主張

タイトル通り。ScalaArrayBuffer では init だけでなく dropRightInPlace を使うことも検討してみませんか?元の ArrayBuffer のデータを使わないという条件は付きますが dropRightInPlace の方が高速です。

val filled = ArrayBuffer.fill(1000000)(1)
assert(filled.init.length == 999999)
val filled = ArrayBuffer.fill(1000000)(1)
assert(filled.dropRightInPlace(1).length == 999999)

蛇足

Scalaを触っていると、List では ::、他のコレクションでも +:, :+ を使うことが多いです。その影響もあって head に対して tail, init に対して last を意識することも多いと思います。

そんなノリで foldLeft 中で ArrayBuffer から init を使っていたら、動かしてみたときになぜか遅くて頭を抱えてしまいました。

不思議に思っていたところ init がcopyを作成していることに気が付きました。気付いてしまえば当然ですよね。

Rust言語の Vecpop のように最後の要素をmutableに削除すればcopyを作成せずに高速に動作するはずなのですが、pop なんてmethodは見当たりませんでした。

頭を捻っていたところ、それっぽいmethodに trimEnd がありました。打ち込んでみると "use dropRightInPlace instead" と怒られました。 dropRightInPlace の実装を見てみると、こいつだぁ!となったので使用してみたところ、期待通りの速度が出ました。嬉しい。

自分としては pop みたいな、要素を 一つだけ 削除する高速なmethodが、mutableな ArrrayBuffer にはあればもっとサクッと書けたのにと思うばかりです。……実はあったりするんですかね?

Firefox 119 からフォントの設定が反映されないという方へ

要点

どれか一つを選ぶこと

  1. about:configにアクセスして privacy.fingerprintingProtection.overrides-FontVisibilityLangPack を書く
  2. "プライバシーとセキュリティ" の "強化型トラッキング防止機能" を "厳格" から "標準" にする
  3. セキュリティのためと諦める

詳細

firefox 119.0 beta の Release Notes

The visibility of fonts to websites has been restricted to system fonts and language pack fonts in ETP strict mode to mitigate font fingerprinting.

とあります。

言い換えると、フォントによるフィンガープリント軽減のため、強化型トラッキング防止機能を厳格にしていると、Windowsではゴシック体 (sans-serif) がフォントの設定に関わらずメイリオなどに制限されるわけです。

この問題を回避する極端な選択肢としては

  1. "プライバシーとセキュリティ" の "強化型トラッキング防止機能" を "厳格" から "標準" にする
  2. セキュリティのためと諦める

が考えられます。

強化型トラッキング防止機能をある程度厳格に保ちながら、Fontを自由に選べる方法もあり

  • about:configにアクセスして privacy.fingerprintingProtection.overrides-FontVisibilityLangPack を書く

がこれに該当します。

蛇足

最初、私はこの挙動がバグだと思いました。Firefoxをリフレッシュしたり、新規プロファイルを作成したりしたものの、アカウントを同期するとフォントの指定が効かなくなっていて、かなり困惑しました。様々な設定をON/OFFして、ようやく強化型トラッキング防止機能が悪いことが分かったので、思わず bugzilla に報告しました。Release Noteをちゃんと読むことをしないで。本当に良くない。顔から火が出る。

結果、セキュリティ的には正しいこと、問題を回避する特殊な設定を教えて頂きました。本当に助かりました。頭が上がらない。

実はGoogleで "-FontVisibilityLangPack" で調べるとRedditの記事がヒットして、先んじてこの問題の回避について書かれています。日本語では全然ヒットしない。