diary

I like Hatena Star with a text selection.

2020-06-30

github.com

お仕事でitamaeを使っていて困ったのでIssueを立てた。

twitter.com

たぶん原因としてはこの辺りなんじゃないかと思うのだけど、だとすると直すのが面倒そうな雰囲気を感じている。


眠れず早起きした結果、完全に生活リズムが壊れてしまった。戻していきたい……

2020-06-29

りふじんなふたり、読んでる。1巻の最初の半分ぐらい読んでて「うーん、読むのやめようかな……」という気持ちだったのだけど、後半からめっちゃ良くなってきてめっちゃいい。


タオルを毎日取り替えられるようにスケールアウトした。 わりといい感じなので家のタオルを全部これに変えるつもり。


むかし・あけぼの、読み終わった。

姫のためなら死ねるを読んだ結果、清少納言のいた世界をもっと知りたくなって読んだ。

前半こそ楽しくて姫死ねを感じていたけど、上巻の中程ぐらいからどんどん重くなっていって「清少納言ってギャグ漫画の世界の人じゃないんだ」と気がついた(あたりまえ)。 姫死ねだと道隆と道長が仲良くて誰も死なないのに、なあ。

とはいえ姫のためなら死ねると同じ出来事も書かれていて(あたりまえ)、「あー知ってる」となることもしばしばある。

これはだいぶ前の方だったと記憶しているけど、和泉式部の「暗きより 暗き道にぞ入りぬべき 遥かに照らせ山の端の月」が紹介されていて、いい歌だなあと思った。 全く関係ないのだけど、百人一首では小式部内侍の歌が好き。

しかし清少納言の定子様だいすき具合は全くブレなくてウケる。

この本ってどれぐらい史実に近いのだろうなあ、大まかな出来事は史実に沿いつつ、心理描写は作者の気持ちなのかなという予想をしている。

もっと史実より、枕草子の原本?よりの話も読んでみたいなあ。なにか読みやすい本でおすすめがあったら教えてください。

田辺聖子作品を読み漁るのも良さそうだけど、それはそれで思想が偏りそうで嫌なのだよな

2020-06-28

Ruby on Rails Link Slackで「なんでRubyの例外メッセージってbacktickとsingle quoteを使っているの?」という質問があって、私も気になったのでruby-jpで聞いてみた。

bugs.ruby-lang.org

だいたいこのチケットにまとまっていそう。 昔からの記法で今は古くなってそうだけど、既存のプログラムとの互換性を考えると変えづらい、というところかなあ。

github.com

mrubyはbacktickを使わずにsingle quoteを使うようにしたらしい。


twitter.com

twitter.com

クラスの途中からreturnしたくなって、end.tap do breakを入れるhackを思いついた。つまりこう。

class Test < Minitest::Test
  # このテストは通るから実行したい
  def test_success
    assert true
  end

  # この行以降は実行しない
end.tap do break

  # このテストからは通らないからひとまず実行したくない
  def test_failure
    assert false
  end
end

end.itself doみたいに、ブロックを受け取らない何もしないメソッドを呼んでも良いかもしれない。 ただ、breakを書けば警告が出るので、消し忘れに気がつけて便利なのでは。

などとruby-jpで言っていたら、end; if falseでいいじゃんと突っ込まれてしまった。たしかに…🦀


github.com

IO#writeとその周辺の型が間違っていたので直した。 Loggerの型をつける上で、IO#writeは何を受け取るのかが気になって調べていたら見つけたのだった。


github.com

loggerライブラリの型を足すPRをDraftとして作った。しばらく作業していく。


github.com

なんとなく見つけたからPRした。


正しく怖がる感染症、読み終わった。 COVID-19という現実を踏まえた上で読むと、注意せねばなあと言う気持ちになる。

自分がちゃんとワクチン接種を受けているかわからないので、COVID-19が落ち着いたら検査に行きたい。 というか今年の健康診断も行ってないのだよな、あんまり行きたくない…

狂犬病についての説明で、「致死率はほぼ100%」と言うからまあ1%ぐらい助かったりするのかなと予想していたら、「"ほぼ"というのは、これまで狂犬病を発症して助かったとされる人が"数人"いるためです。」などと書かれていてびびった。なるほど

さっくり読める本で2,3日で読み終わってしまった。Kindleは本の分厚さが体感できなくて不便…

2020-06-27

github.com

RBSのテストファイルの生成で、いろいろ壊れていたので直した。


loggerライブラリのRBSを書いている。 Railsが依存している型を少しずつ埋めていく作戦。

rbs_railsを進めるのは、Steepが新RBS Syntaxに対応してからでも良いかな。とりあえずコンフリクトしなさそうな外堀を埋めている。


もういちど読む 山川世界史

もういちど読む 山川世界史

  • 発売日: 2013/04/26
  • メディア: Kindle

もういちど読む 山川世界史、読み終わった。 世界史をざっと洗うには良いのではなかろうか。 ただ、最近世界史に関係する本をわりと読んでいたせいか、そんなに新しく得る知識はなかったような気がする。

「なんとか事件がきっかけとなって○○が起きた」みたいなことが書かれているのに「なんとか事件」の説明が一切ない、みたいなのが多くてちょっとモヤモヤしながら読んでいた。 まあ全部説明していたら紙面が足りないのだろうけど。


今は例の筑摩書房のセールで買った、正しく怖がる感染症を読んでいる。

COVID-19の対応に直接役立つかというとまあそんなことはないだろうけど、普通に読みやすくて面白い。

COVID-19での全世界の死者数は、すでに2014年ごろからのエボラウイルス感染症の死者数を超えているのだなとびっくりした。

2020-06-24

github.com

ruremaにIssueを立てた。


www.rubyonrails.link

英語見ると避けてしまう癖をなくすために、英語Slackコミュニティに入ってみた。


bugs.ruby-lang.org

GitHubにPRしていたDelegateClassinstance_methodsの相性が悪い件についてbugsにチケットを作った。


bugs.ruby-lang.org

RubyVM::AST.ofにevalで定義されたメソッドを渡すと何を返すか分からない問題についてチケットを作った。

これの何が不便かと言うと、ofevalで定義されたメソッドが渡ってくるかもしれないという状況が起きるとどうしようもなくなってしまうこと。 ofevalで定義されたメソッドを渡すと何が返ってくるかわからないし、そのメソッドがevalで定義されているかどうかは判断しようがないので、ofが返す値がなにも信じられなくなってしまう。


もうひとつbugsにお手紙書きたいネタがあった気がするけど思い出せない……。だれか知っていたら教えてください。


RailsとBootsnapにそれぞれバグっぽい挙動を見つけたので、整理している。 明日あたりIssueを立てたい。

まずRailsの問題。

$LOAD_PATHにあるのと同じファイル名でrails runnerしようとすると、$LOAD_PATHの方を見に行ってしまう。

$ echo 'p "hello"' > prime.rb
$ bin/rails runner prime.rb # "hello" が表示されず、$LOAD_PATH にある方のprimeがloadされる

https://github.com/rails/rails/blob/34991a6ae2fc68347c01ea7382fa89004159e019/railties/lib/rails/commands/runner/runner_command.rb#L40-L42

このへんのコードが原因。 rails runnerFile.exist?がtrueを返す場合Kernel.#loadを使ってファイルを読み込むのだけど、Kernel.#loadがファイルを読み込む時の優先順序は、$LOAD_PATHを全部なめた後にカレントディレクトリを見る。 そのため、カレントディレクトリにあるファイルと同じ名前のファイルが$LOAD_PATHにあれば、そちらが優先して読み込まれてしまう。

File.exist?でチェックしているものとKernel.#loadで読み込まれるものが違うのはバグと言って良いのではないかなあ。

つぎはBootsnapの問題。

これは単純で、BootsnapはKernel.#loadでファイルを読み込む時に拡張子を勝手に補完してしまう。

# Kernel.#load は拡張子を補完しないので、LoadError
load 'prime'

# これなら読み込まれる
load 'prime.rb'

しかし、Bootsnapが有効な環境だと、load 'prime'LoadErrorにならず通ってしまう。

これは↑のRailsの問題を考えている時に見つけた。

ただ、BootsnapをRailsなしの環境で動かす方法がよく分からなくて、再現手順を作れずにいる。詳しい人がいたら教えてください…。


RBSのSyntax Updateを読んだ。

RBSはPRがマージされている。Steepの方はまだWIPぽい。

HackMD の Class and Module Declaration Syntax Update

https://hackmd.io/BuYUsK9IRLqRehlu6_62gg

  • classの中に色々ネストして書けるようになる
  • オープンクラスができる
  • オープンクラスで既存メソッドをoverloadするにはoverloadキーワードを使う
  • 既存のextension, superはdeprecate
    • superってはじめて知った

Writing library names everytime when writing class/module declaration doesn’t feel great.

これってextension Integer (Matrix)(Matrix)を書きたくない、という意味で合ってるかな

Two class definitions may include definitions of a method.

RBS doesn’t support this. It assumes the conflict is not intentional and will report an error or a warning.

なるほど。 同名のメソッドが複数書かれているとエラーになる。

ruby/rbs#307

https://github.com/ruby/rbs/pull/307

  • extensionはremoved
  • Type name resolutionはRubyのものに近くなったけど、継承までは見ない
  • superはdeprecated (削除はされてない?)
  • incompatibleはdeprecated and ignored
    • これ知らなかった

注目のprototype周りはほとんど変わっていなかった。writerにいくらか差分があって(当然)、そっちで吸収しているかな