今日の晩御飯

今日はまいばすのお寿司詰め合わせ。お寿司って意外と米の量あって、見た目よりお腹いっぱいになっていいね。

xn--tcke0bzb0b9moc.com

娘が風邪気味

子供が体調不良になるとめっちゃ不安になりますね。昨日したことの何が悪かったんだろうとか凹むし、喋ることもできないので何かして欲しいのかわからないし、でも親を見つけたら精一杯に笑う姿を見ると健気すぎてグッときます。最近は急に寒くなって体調崩しやすいので、皆さんも気をつけましょう。。。

会社とかで家族サポートのため有給を取ってた人がいて、「あー大変そうだなー」って思ってたけど今だと「うわぁ、大変だ...」って感じですかね?(あんまり変わってない?)

今日の晩御飯

今日の晩御飯は秋刀魚を焼いた。秋だし。2尾で400円(税抜)だった。ちょっと高い気がした。美味しかったので無問題。

見切り品にサラダセロリという物があったので買ってみた。見た目はカイワレ大根っぽいんだけど味はセロリという不思議な感じだった。適当にググってみたらこんな感じのやつ

hachimenroppi.com

最近のコーディング

今更になって修士時代(10年前)に書いた Scala コードをリファクタリングしている。というのも業務で Scala/sbt を触るようになって Scalaコンテキストスイッチが減ったのと、sbt のマルチプロジェクトの管理方法の勘所がわかってきたので、自分の人生の中でガッツリ Scala にハマっていた頃に書いたコードが読める&整理できる状態になったからだ。

最初に IntelliJで開くと全行がほぼ真っ黄色という悲惨な状況だったが、今はだいぶマシになってきた。黄色い理由を挙げるとこんな感じ:

  • 公開メソッドに戻り値型が書いてない
  • JavaConversions を使っている
  • implicit conversion を使っている
  • ClassManifest を使っている(10年前は Scala 2.8 時代だった)
  • 非ASCII文字を使っている
  • try ~ catch で throwable を取ってる

ちょっとずつこの辺を整理していきたい。

整理していってる過程で、「どうしてこんなに暗黙変換を使いたかったんだろう?」と謎だったが、少しずつ当時の考えが分かりだしてきた。そもそも Scala を使いたかった理由は Java よりも短いコードで実装できることに魅力を感じたからで、特に暗黙変換を使えばそれが実現できる、と思ったんだろうな。そして短いの基準が Groovy とか LL 言語を想定していて、極力コード上に型の宣言がなくなるように書いていたんだと思う。

今となっては公開関数の型をコンパイラに推論させるのは御法度(いや多分当時も御法度)だけど、こういうコードを見ると「若いなぁ」とか思ってしまった。

型の推論に関してもう一つ思ったことは、Java にも型推論が入ったのだけど、あれが働くのはローカル変数だけなんだよね。公開メソッドにはその機能がわざと使えないようになっていて「賢いなぁ」とか「自分と同じコードを書いて苦しむ人が減るようになってる...」とか思って、Java は健全に進化しているなぁと感じた。

rpscala 勉強会 に出てみた。自分は監視枠(Youtube コメント枠)

質問箱に答えたあと、モブプロをしていた。

質問箱1つ目 例外、Either、その他の使い分けは?

peing.net

質問箱2つ目 Javaとの優位性は? 途中で Kotlin の比較も追加された。

peing.net

モブプロでは Scala 3 のマクロについて、解説ページを読んだあとに、実際に手を動かしていた。

softwaremill.com

inline の挙動についてコンパイルできるかどうかを確認していた。

  • inline 関数の呼び出しに使われる変数は inline じゃないとだめ
  • inline再帰関数も動く
    • 停止しないような再帰関数(32回よりも多く展開するような関数)を書くと、コンパイルエラーになる。
    • 32 はオプションで変更可能
inline def power(v: Int, p: Int): Int = {
  if p == 0 then v // このへんちょっと Scala 3 で書いてみた♪ コンパイル通るよ
  else v * power(v, p - 1)
}

@main def a(): Unit = {
  println(power(2, 32))  // 33 だとエラー
}
  • inline は事実上の final(オーバーライド不可)になる
  • inline を使えば、メソッドの引数の型を動的に変えることもできる。
  • Scala2 で macro でやってたことは inline でできる事があるので、まずは inline で実装してみると良さそう。

型クラスの話

  • 型クラスは Haskell を意識している(らしい。自分は Haskell 書いたことない...)
    • inline と using Mirror を使うと、マクロを書かなくても型クラスの導出ができる...らしい...
  • インデントベースはコピペが難しい
    • これはIDEの支援を待つ感じなんだろうか...

感想

  • 例外、Either の使い分けはコンテキストに依存しそうな気がした。
    • Javaベースだと例外がしっくり来るし、Scalaベースだと Either がしっくりきそう
  • Java/Scala のメリデメは色々あるが、個人的にはバージョン互換性大事だと思った。
    • オープニングでも Scala 2.11 -> 2.12 に難儀している話があった。
    • 自分も Scala と Kotlin のバージョンアップをやったことがあるが、圧倒的に Kotlin の方が楽だった。
  • inline みたいな機能は、むしろ今まで Scala 2 ではマクロを使わないといけなかったのが大変だったんだなぁと思った
    • Scala 2のマクロは使ったことない
  • 型クラスはついていけなかった...

参考

inline に関する公式ドキュメント

docs.scala-lang.org

型クラスに関する公式ドキュメント

dotty.epfl.ch

記事入力画面を等幅フォントにする

はてなブログを開設して記事を書いてみたところ、記事入力画面がプロポーショナルフォントソースコードが書きづらかったので、記事入力画面を等幅フォント(Courier New)にするブックマークレットを作りました。

はてなブログの記事編集ページのフォントを Courier New (等幅フォント)にする

(iframeって表示されるのかな...?)

作り方

まずは Developer ツールでセレクタとプロパティを調べつつ、動くコードを書きます。

f:id:kijuky:20210608185109p:plain

document.getElementById("body").style.fontFamily="Courier New"

https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Properties_Reference

等幅フォント一覧はこちらとかを参照しました。

https://www.bugbugnow.net/2020/02/font-family-mono.html#toc-12

うん、良さそう。

次に Bookmarklet に仕立て上げます。 javascript:(function(){})() で囲んであげます。

https://qiita.com/xtetsuji/items/e8b61bb39c41b7a9345e

色々とぐぐってみたらはてなレットというサイトを発見。せっかくなので登録してみました(上のリンク)。

作成する際にはてラボ人間性センターというスパムチェッカーがありまして、こちらキン肉マンやら落語やらの知識がなかったので10回くらい失敗しました...今回ので一番時間かかったかも。