Try   HackMD

Ruby-dev office hour logs: 2021-2022

2022/12/19

2022/12/12

2022/12/05

2022/11/28

  • パーサーの話
  • 正規表現の最適化の話
    • API つける
      • Regexp.redos_safe?(string, flags)
      • Regexp.redos_safe?(regexp)
      • Regexp#redos_safe?
      • Regexp.new(string, flags).redos_safe?
    • 正規表現に加える safe / danger flag
      • safe and danger(ほぼ全部につける)
        • safe → 最適化可能なら動く、最適化不可能なら例外
        • つけない → 最適化可能なら動く、最適化不可能ならrubocopが怒るが動く
        • danger → 最適化可能なら動く、最適化不可能ならrubocopが怒らず動く
      • safe だけ(9割につける)
        • safe → 最適化可能なら動かす、最適化不可能なら例外
        • つけない → 最適化可能なら動かす、最適化不可能なら動く(rubocopはsafeフラグを付けるよう強要、いやならrubocopのコメントで抑制する)
      • danger だけ(1割につける)
        • つけない → 最適化可能なら動く、最適化不可能なら警告(警告レベルは選択可能、デフォルトは警告出さない)(rubocopは知らん)
        • danger → 最適化可能なら動く、最適化不可能ならrubocopが怒らず動く

ruby -w
ruby -Werror=redos

2022/11/21

def foo(*)
  p binding.local_variable_get(:*)
end

foo 1, 2

#  p binding.local_variable_get(:*)
#           ^^^^^^^^^^^^^^^^^^^
#	from t.rb:3:in `foo'
#	from t.rb:6:in `<main>'

2022/11/14

2022/11/07

2022/10/31

2022/10/24

2022/10/17

  • async, Generatorなどの話
    • ESのGenerator関数の中の無名関数内ではyieldできなくて不便
    • Rubyのブロックはえらい
    • 複数のジョブを並行動作させて全部終わるのを待つ、というよくある処理
      • await Promise.all(promises) ひとつこけると例外
      • Rubyだと threads.each(&:join) とか
    • GAS(Apps Script)はライブラリが同期的なAPIばかりのところにエンジンがモダン化されてasync/awaitできるようになったけど、あまり活かしようがない
  • GUNDAM FACTORY YOKOHAMA
    • 建築物なので法令遵守で妥協もあったらしい
    • ロボットや戦隊ものは海外でも人気
    • 暴太郎戦隊ドンブラザーズ
      • 「どんぶらこ」というオノマトペ
        • 「物が水の流れのままに浮きつ沈みつして、漂いゆくさまを表わす語。どんぶりこ。」(日本国語大辞典)
  • EuRuKo 2022終わった
    • 来年はリトアニア
  • 燃料費高騰でデータセンターのラック単価が上がる話
  • AIによる自動生成でUGC系のサービスが大変になっていく
  • GitHub Sponsors
  • インボイス制度

2022/10/10

(スポーツの日)

2022/10/03

  • EuRuKo
  • Object Shapes
  • 物価高、USDが高い、TWDも高い
    • フリーランスきつそう
      • インボイスも始まる
  • Coverage: :alleval も含めるの?
  • 脆弱性の基準
    • HackerOneの(報奨金の)おかげで微妙なやつも脆弱性と主張する人が増えた
    • mrubyはセキュリティポリシーを定めて、ゴネる人は減った
  • Data.define が定義するクラスには共通のスーパークラスがあった方がいい
    • Data でいいのでは (matz)
    • サブクラスに継承させるインスタンスメソッドは Data 自身がインスタンスを持たないのでいいが、特異メソッドは Data に対して呼べてしまうのでどうなのか (nobu)
      • Data.members とか
      • 後から生やすのはいまいちに思えるしドキュメントしづらい
      • Data に生やしておいて、抽象クラス Data に対しては何もしない(空を返すとか)でいい

2022/09/26

2022/09/12

2022/09/05

2022/08/29

2022/08/22

  • Ruby OMR
  • ZSUPERの件
    • Bug #18729: Method#owner and UnboundMethod#owner are incorrect after using Module#public/protected/private - Ruby master - Ruby Issue Tracking System
    • メソッドオブジェクトはその時点の実体へのポインタか、オーナーとメソッド名の組か
      • 前者と捉える人が多い
      ​​​​​​​​class C
      ​​​​​​​​  def foo
      ​​​​​​​​    :C
      ​​​​​​​​  end
      
      ​​​​​​​​  private def hoge
      ​​​​​​​​    :C_hgoe
      ​​​​​​​​  end
      ​​​​​​​​end
      
      ​​​​​​​​class D < C
      ​​​​​​​​  alias bar foo
      ​​​​​​​​  public :hoge
      ​​​​​​​​end
      
      ​​​​​​​​p D.instance_method(:foo).owner #=> C
      ​​​​​​​​p D.instance_method(:bar).owner #=> D
      ​​​​​​​​p D.new.method(:foo).owner #=> C
      ​​​​​​​​p D.new.method(:bar).owner #=> D
      ​​​​​​​​p D.new.method(:hoge).owner #=> C
      ​​​​​​​​p D.instance_method(:hoge).owner #=> C # 3.1
      
    • メソッドテーブルと別にvisibilityテーブルがあるようなメンタルモデル
    • mrubyの実装

2022/08/15

  • Rubyのqsort実装の出所
    • オリジナルの実装を提供してもらった
    • その採用前は stdlib.h の qsort(3)
  • ソートアルゴリズムいろいろ
    • Pythonで TimSort が生まれて(2002)、Java, Android, V8, Swift, Rustに採用
      • 作者の名前って珍しい (Tim Peters)
      • 安定なソート
    • Comb Sort 1991年に名前が付いたが発明はもっと早かった
    • Rubyもハッシュのキー順序を保存するくらいなんだから安定なソートが標準であるべき?
  • Ruby 2.7でArrayをキーにしたHashを引くときにArrayが変化しても同じvalueを引いてしまう事象に当たった
  • お盆の過ごし方
  • Erg (erg-lang/erg: A Python-compatible statically typed language)
    • Pythonにtranspileされる静的型付け言語
    • Pythonで嫌なところがいろいろ直っている
    • Nat型とか物理学徒っぽい
  • ESのパイプ演算子(|>)

2022/08/08

2022/08/01

  • RDocとRBSの連携をしたい
    • $ rdoc sig/*.rbs
    • https://github.com/ruby/rbs/pull/1048
    • RBSに書かれたドキュメントをRDocに読んでくるプラグインができた
      • RBSにあるけどRDocにない概念をどうするか interface, type alias, generics
    • RBSとRDocのどちらに書くか
      • ユーザーが決める
    • そもそも連携とは何をやるのか
      • RubyソースコードにRDocとしてRBS相当の情報を埋め込む?
        • callseq に自然言語で書かれているが、複雑な型を厳密に書くのは大変なので
        • この方向も将来的に欲しい
          • ソースコードとドキュメントの近さがRDocの良さ
      • RBSにRDocを書けるようにする?
        • RDocからRBSを抽出する
        • 今やっているやつ
class Foo
  # @type method: (String) -> void
  def foo(x)
  end

  # RDocのコメント
  # @type (String) -> Integer
  def foo(x)
    x.to_i
  end
end
# https://yardoc.org/features.html # Reverses the contents of a String or IO object. # # @param [String, #read] contents the contents to reverse # @return [String] the contents reversed lexically def reverse(contents) contents = contents.read if respond_to? :read contents.reverse end # https://rubydoc.info/gems/yard/file/docs/GettingStarted.md # Converts the object into textual markup given a specific format. # # @param format [Symbol] the format type, `:text` or `:html` # @return [String] the object converted into the expected format. def to_format(format = :html) # format the object end

2022/07/25

  • https://www.mikeperham.com/2022/07/14/modernizing-einhorn/
  • ISUCON12 https://isucon.net/archives/56838122.html
  • Carbon
    • Googleのプロジェクト https://twitter.com/rui314/status/1549597027792998403
    • Rust や Zig と fn なのが同じで見分けが付きづらい
    • C23にはdeferが入る?
    • Rubyにもdeferがほしい話
      • インデントが深くならない
      • 素朴にensureに後処理を並べると途中でこけたときに残りが実行されない問題
      ​​​​​​​​def func
      ​​​​​​​​  1.times do |n|
      ​​​​​​​​    p n
      ​​​​​​​​  end
      ​​​​​​​​end
      
      ​​​​​​​​def func
      ​​​​​​​​  |n| <- 1.times
      ​​​​​​​​  p n
      ​​​​​​​​end
      
      ​​​​​​​​def func
      ​​​​​​​​  |y| <- height.times
      ​​​​​​​​  |x| <- width.times
      ​​​​​​​​  p [x, y]
      ​​​​​​​​end
      
      ​​​​​​​​def func
      ​​​​​​​​  |f| <- open("foo")
      ​​​​​​​​  |g| <- open("bar")
      ​​​​​​​​  f.gets
      ​​​​​​​​  g.gets
      ​​​​​​​​end
      
      ​​​​​​​​def func
      ​​​​​​​​  open("foo") do |f|
      ​​​​​​​​    open("bar") do |g|
      ​​​​​​​​      f.gets
      ​​​​​​​​    end
      ​​​​​​​​  end
      ​​​​​​​​end
      
      ​​​​​​​​def func
      ​​​​​​​​    open1
      ​​​​​​​​    open2
      ​​​​​​​​ensure
      ​​​​​​​​    close1
      ​​​​​​​​ensure
      ​​​​​​​​    close2
      ​​​​​​​​end
      
      ​​​​​​​​def foo
      ​​​​​​​​    f = open 
      ​​​​​​​​    ensure = f.close
      
      ​​​​​​​​    g = open
      ​​​​​​​​    ensure = g.close
      
      ​​​​​​​​    f.gets
      ​​​​​​​​    g.gets
      ​​​​​​​​end
      
      ​​​​​​​​def foo
      ​​​​​​​​    f = open 
      ​​​​​​​​    DEFER{ f.close }
      
      ​​​​​​​​    g = open
      ​​​​​​​​    DEFER{ g.close }
      
      ​​​​​​​​    f.gets
      ​​​​​​​​    g.gets
      ​​​​​​​​end
      
      ​​​​​​​​def foo
      ​​​​​​​​  f = open
      ​​​​​​​​  END(f) {|f2| f2.close }
      ​​​​​​​​  # END(:def) {...}
      ​​​​​​​​  # END(:block) {...}
      
      ​​​​​​​​  g = open
      ​​​​​​​​  END { g.close }
      
      ​​​​​​​​  f.gets
      ​​​​​​​​  g.gets
      ​​​​​​​​end
      
      • ユースケース
        • open系はだいたいライブラリが後始末を用意しちゃうよね
        • Tempfileとかはいちいちブロックを作りたくない。そのときによくあるのが ensure で f&.close するみたいなやつ(途中でfが定義される)で、これはdeferのユースケースだろう
        • シェルスクリプトだと trap finalize 0 とかよくやる
          • trap(:RETURN) { ... } でどうか
          • trap のセマンティクス的に複数回呼び出しで上書きされそう
  • Web3
    • 税制の話

2022/07/18

祝日のためお休み

2022/07/11

2022/07/04

2022/06/27

2022/06/20

  • RubyKaigiの応募が例年より少なかった話
  • コロナ感染者数
    • 後遺症がこわい
  • Python 3.11が速くなった
    • Rubyではだいぶ昔から当然のようにやっている最適化
      • Pythonはぜんぜん最適化に取り組んで来なかったのはなぜ?
      • 本体の開発がGuidoの意向で保守的だった?
      • サイドプロジェクトではいろいろな取り組みがあったがどれも主流にならなかった
    • まだ伸びしろありそう
  • パスワード管理
    • 1Password, LastPass, BitWarden, KeePass(XC)
    • 2要素認証の有効期限が短いサービスがめんどうすぎる
      • HackerOne
    • 2要素認証なのにOTPも同じアプリ/サービスで発行してしまうことへの葛藤
  • gcc 3.x はもう切っていいよね
    • gcc 4 (4.2.1)は一応GPL2最後のバージョンということで対応の需要があった
      • でもOpenBSDもClangに移行したのでもういいかも

2022/06/13

  • Rails 6.1でRuby 3.1いける話

  • どの辺から型を付けていくか

  • https://roda.jeremyevans.net/

  • RubyKaigiの宿と現地の交通手段

    • バスは有料とか1時間に1本とか
    • 糸柳さん元気かな
  • Atomの終焉

    • Electronの産みの親(旧称: Atom Shell)
    • Emacsユーザが減っているのは人口の自然減?
    • 秀丸エディタがまだ現役で、買い切りなのに作者が食えているというのがすごい
    • Unicodeへの移行で当時のエディタがみんな遅くなった
      • 当時のUnicodeヘイトはすごかった
  • GCC12でいろんな警告が出る

    • structの最後のメンバーを char a[0]; みたいにする可変長配列の定番テクニックで添え字の範囲エラーになる
  • レガシーメディア

  • 職場の公用語英語化

  • ベトナム支社

    • 日本語を覚えてくれる
    • Vietnam == 越南

2022/06/06

2022/05/30

2022/05/23

2022/05/16

  • Salesforce

    • 中のエンジニアの存在感があまりない話
      • Javaコミュニティ?
    • Slack その後?
    • Herokuもそんなにぱっとしない
    • TDの顧客に利用者が多い
  • GitHub Sponsorsは現状手数料取られない

    • これで海外から仕事を請けるみたいな形もできちゃう?
    • 雑所得だと経費積めないとか
    • 払う側の計上方法が面倒?
  • 円安

    • 石油も上がって渡航費高
  • 日本式の惣菜パンが売れている話

  • 海外の寿司、ラーメン

    • https://yosushi.com/
    • 味のないラーメン
      • タイ料理は食卓調味料クルアン・プルンで客が自分でカスタマイズするスタイル
  • Web広告が刺さらない話

  • Rubyのマーケティング

2022/05/09

2022/05/02

  • 子供の習い事、通学
  • ヘリコプターで福井から東京へ80分あまり、片道22,000円
  • USJやディズニーランドの混雑
  • 円安なので値上がりする前にiPadを買った
  • 渡航中にコロナに罹患したときの隔離って実際どうなるのか
  • 個人で家庭教師を直接募集した話
  • 英語教育

2022/04/25

  • io-nonblock を標準機能にしように対してむしろdeprecateしたいとまつもとさんが言ったら入れなくていいから消さないでの声
  • Canonical Ubuntu 22.04 LTS is released | Ubuntu
  • Netflixの契約者が減少のニュース
  • Individual Contributorという職掌
    • 我々みたいな人が各社にスペシャリストキャリアパスを作っていかないといけないが、評価制度とかを作るのにコミットすること自体はICのJDと違うという矛盾😅
    • でもそれをやって自分の給料の天井を破っていかないと自分のポジションがないのでしょうがない
  • 人口1800人の姫島村で年商5億4000万円 瀬戸内海に浮かぶ島が“ITアイランド”に変貌(OBS大分放送) - Yahoo!ニュース
    • Ruby開発がオフィス開設
  • Goでの開発の話
    • genericsはまだ制約が多い
      • カジュアルにgenerator (コード生成)を使う文化になっているので、あまり使いどころがないなという印象
    • リフレクションもカジュアルに使われている
      • jsonやvalidator、ORMなどは構造体のフィールドのタグを使って指示
    • 明示的な返り値チェックを徹底し、コンテキストや必要な情報は引き回すパラダイム
  • 例外機構・大域脱出冬の時代?
    • WASMもアセンブリレベルでスタックをすっとばすようなジャンプ機構は省かれている
    • system() は例外を出してほしい…
      • exception: true はあるが
      • コマンドが存在しないレベルのエラーは例外でいいけど、終了ステータスが非0で例外はそれでいい?
        • コマンドが存在しない場合も、シェルを通さない場合はErrno::ENOENTだがシェルを通す場合は終了ステータスが非0と異なる
          • シェルを通すかどうかはメタ文字の有無で決まるので分かりづらい
        • diff(1)などは差分の有無を終了ステータスで示すが、それを例外処理で拾うのはなんか違う感もある
      • Windowsだと存在しないコマンドでも例外が出てくれない?
        ​​​​​​​​​​​​p system("dirr")
        ​​​​​​​​​​​​#ruby 3.2.0dev (2022-01-14T04:46:12Z gh-4636 c613d79f9b) [x64-mswin64_140]
        ​​​​​​​​​​​​#nil
        
      • Rakeの sh が望みの物かも
        • ブロックを渡すとステータスチェックがユーザに委ねられるが、渡さないとエラー時に例外発生

2022/04/18

2022/04/11

  • 野球の話
    • 佐々木朗希の完全試合
  • 明後日リリース
    • 2.6
  • 最近JavaScript周辺ツールにGoやRustが使われている流れの話
  • Rustは面倒なのにみんな使い始めててすごい話
  • Cはコンパイラがあほなので介護の気持ちで書ける
  • NimはC++へのトランスパイラ方式
  • Jujia
    • 立ち位置はRubyと同じインタプリタ
    • aptとかじゃなくて公式からダウンロード
  • なんでも asdf べんり
  • aptの標準パッケージで済ませたい話
    • Ubuntu LTS→LTSのジャンプは毎回つらい
    • Ubuntu 22.04になるとOpenSSLが3なので古いRubyはインストールできない

2022/04/04

  • Wantedlyの n年前、#<WorkingHistory:0x0000xxxxxxxxxxxx>で働きはじめました メール
    • Object#to_s がインスタンス変数とか出す仕様じゃなくてよかったね
  • 数字のカンマ区切りの方法
  • Ruby 2.6 EOL
  • コードネーム
    • DebianやmacOSのは脈絡なくてわかりづらい
    • TDはコードネーム禁止令出た
    • pixivの社内プロジェクト名はコーポレートカラーの青いもの
    • Java SE8 でコードネーム廃止したらしい
  • Cobalt Qubeってあったな
  • 戒名=洗礼名
  • 現代日本の諱、マイナンバー カードはIMINA
  • Gmailで迷惑メールフィルタがたまに荒ぶる
    • heyとか順調なの?
    • Gmail, Sendgridなど寡占化が進む
    • メールもいずれ終わるのか
  • Twitterの広告
    • 有料プラン日本にも来る?
  • Cookie警告日本でも出始めた
  • GitHubのissue勝手翻訳サイト
    • Googleとのいたちごっこ
  • RubyのWebAssembly/WASIへの移植が実現、プレリリース版のバイナリ公開。RubyGemsにも対応 - Publickey

2022/03/28

def foo begin f1 = open f2 = open f3 = open # use f1, f2, f3 ensure f3.close ensure f2.close ensure f1.close end end
# Matz' idea def foo begin f1 = open f2 = open f3 = open # use f1, f2, f3 ensure f3.close f2.close f1.close end end #=> def foo begin f1 = open f2 = open f3 = open # use f1, f2, f3 ensure begin f3.close ensure begin f2.close ensure f1.close end end end end
  • 行単位というのはちょっと厳しそう
def foo f1 = open ensure do f1.close else XXX end f2 = open ensure do f2.close end f3 = open ensure do f3.close end # use f1, f2, f3 end #=> compiled to def foo f1 = open begin f2 = open begin f3 = open # use f1, f2, f3 ensure f3.close end ensure f2.close end ensure f1.close end
  • 命令レベルあるいはASTレベルでこうコンパイルされる?→たぶん?
def foo open do |f1| open do |f2| open do |f3| # use f1, f2, f3 end end end end def foo f1 <- open f2 <- open f3 <- open # use f1, f2, f3 end
def bar
  3.times do |x|
    4.times do |y|
      p [x, y]
    end
  end
end

def bar
  x <- 3.times
  y <- 4.times

  p [x, y]
end

def product(ary1, ary2)
  Enumerator.new do |g|
    x <- ary1.each
    y <- ary2.each
    g << [x, y]
  end
end

product([1, 2], [3, 4])
#=> [[1, 3], [1, 4], [2, 3], [2, 4]]

def product(ary1, ary2)
  Enumerator.new do |g|
    for x in ary1.each,
        y in ary2.each
      g << [x, y]
    end
  end
end

def product(ary1, ary2)
  g <- Enumerator.new
  x <- ary1.each
  y <- ary2.each
  g << [x, y]
end

def product(ary1, ary2)
  Enumerator.new do |g|
    g << [x, y] for x in ary1.each, y in ary2.each
  end
end

def product(ary1, ary2)
  Enumerator.new do |g|
    g << [x, y] for x in ary1.each for y in ary2.each
  end
end

def product(ary1, ary2)
  g << [x, y] for g in Enumerator.new \
              for x in ary1.each \
              for y in ary2.each
end
  • Tempfile.create, Dir.chdirや2つIOを開く場合など、入れ子の順番に意図がないときに平たく書きたい
  • Python の for/else が欲しい(Enumerable#find があるから多分要らない)
ary.each do break end.if_no_break do # break されんかったときの話 end

2022/03/21

春分の日につきお休み

2022/03/14

2022/03/07

  • Worldle
  • 子供の好きな食べ物
  • 物価上昇
    • そば屋がかわいそう。蕎麦の実、小麦粉、エビ等々
  • Rubyの話…
  • 航空便のロシア迂回ルート

2022/02/28

2022/02/21

  • Ruby 3.1 adds error highlighting gem | Saeloun Blog
  • Include diagrams in your Markdown files with Mermaid | The GitHub Blog
    • Graphviz, PlantUMLが超えられなかったキャズムを超える?
    • レイアウトヒントを与えても思ったように配置されないことが多い
    • この分野は最近けっこう動きがある
  • ruby -cについて
    • echo 'break if false' | ruby -c => Syntax OK だけど実行すると(breakは通らないのに) SyntaxError
      • 字句解析レベルだけチェックして意味は解析していない
      • →このままでよい by matz
    • Rubocopとのコラボ: https://github.com/rubocop/rubocop-rubycw
    • r7kamuraさんの日記

      最近、Railsアップグレードの仕事をやっている中で、Deprecation Warningを出してAPIを変更をする際、RuboCopのCopも提供してくれるといいのに、つまり静的解析で検知したり自動変換したりする仕組みも一緒に提供してくれたらいいのに、と思うことが増えてきた。例えば、rubocop-rails_deprecation、みたいな名前でGemを提供するというのはどうか。

  • コロナワクチン3回目
  • ウクライナ情勢
  • オフラインでカンファレンスに参加できるのはいつか
  • アメリカの寿司のレベルが上がっている話

2022/02/14

  • 東京の雪は肩透かし
  • ワクチン接種3回目
  • バレンタインデー
  • Wordle
    • NY Times に大金で買われたのは夢がある
    • 日本の新聞社の将棋と同じような感じ
  • NFT
  • Ruby 3.2
    • YJITに期待

    • しばらくは言語自体よりは体験の改善

    • マクロ

      • LISPのリーダーマクロまで?
      • Rustでは後悔もあるらしい
    • アノテーション

      • Pythonのデコレータみたいな
      • #[x:y] のように
      • どうせ依存するならコメントじゃなくても
        ​​​​​​​​​​​​@[rbs: (Integer) -> Integer]
        ​​​​​​​​​​​​def double n = n * 2
        
      • PythonのデコレータはRubyのメタプログラミングでできちゃうレベルなのであまりありがたくない?
      • PHPみたいにメソッドの属性として取れるものがいいのかな
    • obj.:foo を思いとどまった話

    • Unicodeの開放

      • 𝜆 (U+1D706 MATHEMATICAL ITALIC SMALL LAMDA)
    • %w

      ​​​​​​​​%w{
      ​​​​​​​​  a
      ​​​​​​​​  b
      ​​​​​​​​  c
      ​​​​​​​​}
      

      b を一時的にコメントアウトしたりできないものか

      • 行指向ではないからなあ
      • %w{}x
      • %wx{} のように2文字以上を解禁する?
        • %time{} とか出てきそう
    • open3を組み込みにしたい

      • IO.popen では足りない
    • Encodingの話

      • UTF-8 + ASCII-8BIT

2022/02/07

begin
  raise "foo"
rescue
  exc = $!
end

p exc.message                      #=> "foo"
p exc.detailed_message             #=> "foo (RuntimeError)"
p exc.detailed_message(xxx: false) #=> "foo"
p exc.full_message                 #=> "test.rb:2:foo (RuntimeError)\n\tfrom test.rb:2:<main>"

p exc.detailed_message(highlight: true)  #=> "\e[1mfoo\nbar\e[0m"
p exc.full_message(highlight: true)      #=> "\e[1mfoo\e[1m (\e[1;4mRuntimError\e[0m\e[1m)\e[0m\nbar\e[0m"

p exc.detailed_message(highlight: false)                                   # for Sentry
p exc.detailed_message(highlight: false).sub(/\A(.*?)(?: \(\w+\))/) { $1 } # for Sentry
p exc.detailed_message(highlight: false, exception_class_name: false)      # "foo"

raise              # unhandled exception
raise RuntimeError # RuntimeError (RuntimeError)

p exc.message + exc.additional_message(highlight: false)                   # for Sentry
  1. このまま(気になるならSentry側に頼む) → これ、もし要望が強ければ2
  2. exception_class_name: false みたいなキーワード引数を入れる
  3. (RuntimeError) の追加の責務を full_message に戻す
  4. additional_message styleを今から試す → highlightの責務が分散するのでいまいち
  • https://github.com/Shopify/rfcs/blob/new-signing-mechanism/text/0000-introduce-a-new-signing-mechanism.md

  • https://bugs.ruby-lang.org/issues/18573

    • Object に追加したくない
    • Array#maxArray#min のように最適化?
    • 最適化してうれしいほど使う?
    • 性能の話なのか、書き味の話なのか
    • pack は buffer: で既存の文字列への追加も可能
    • テンプレートをレシーバにして String のメソッドはどうか
    • 名前の問題? そもそも不要?
    • printf のフォーマット文字列に pack template を混ぜる?
    • python だと string interpolation にも書式指定ができる
    • 個別に対応するのではなく 配列リテラル.メソッド のようなパターンをまとめて対処できないか
    • Perl のように pack(template, *args) を追加する?
    • 書式と pack 対象の型は1対1対応しているので、Base64.encode64 のように個別に用意する?

2022/01/31

  • 開発者会議延長戦の感想戦(?)
    • Struct::Value の採用の反響
    • 右代入の束縛先に何を許すか
      • ローカル変数だけからインスタンス変数などにも拡張するが、定数がダメという理由付けが難しい
    • Exception#detailed_message/full_message と文字修飾

2022/01/24

  • Google Apps for Domain無償版がついに終了へ
    • メーリングリストのメールでたくさん容量使ってた
  • 第14回フクオカRuby大賞
    • まだオフィシャルリリースはなし?
    • f-ruby.com にちょっとドキッとする
      • 福岡空港のコードは FUK
    • はすみさんが大賞らしい
    • 訪問診療のSaaS
  • WASMサポートのマージへの反響が想像以上にでかい
  • 🎉 Happy 10th Birthday, Sidekiq! 🎂 | Mike Perham
    • もう50になるのでメンテナーを引き継ぎたいとのこと
    • まつもとさんも還暦が近づくので…😇
    • 80歳の現役プログラマー
  • 標準ライブラリなどの呼称 https://github.com/rurema/doctree/issues/2665
    • built-in, bundled, standard,
  • Zig Programming Language
    • Cライク/Rustほどガチガチではない
    • CRubyをC以外に書き直していくとしたらどんなシナリオ?
    • アーキテクチャによるunaligned accessのペナルティー
      • unalignedな可能性のあるコードはコンパイラが頑張ってSIGBUSを回避
    • RISC-Vマシンほしいね
      • 入手むずい

2022/01/17

  • 年末年始
    • 今年初回
    • このZoomは笹田さんがいなくても開ける(はず)ので休みでも有志でやってOK
  • rbtree問題
    • sorted_setが依存しているがRuby 3.2でビルドできない
    • 作者に連絡したが一週間ほど返事なし
      • ソースもGitHubなどにないので履歴が見られない、フィードバックの口がメールしかない、というのも問題
      • RubyForge/RAAとpost GitHubの時代の壁、不幸な歴史
    • 野良forkで rbtree2, rbtree3 などが生えている
    • google-cloud-ruby も rbtree に依存している
      • 以前Ruby 2.7で壊れたときにrbtree3への移行を提案したが、 互換性の問題が発覚、2021/1にrbtreeが突如リリースされたのでそのときはいったん中止した
      • この互換性問題を解消してから google-cloud-ruby には持って行こう
    • 互換性問題もあるので、乗っ取るよりは別に作って順次移行、が丸そう
    • 名前は?
      • rbtree[2-9] みたいなのは数字の意味が謎すぎるので避けたい… (@knu)
      • ordered_map とかでも。汎用のデータ構造として需要はあると思う @mrkn
        • 性能特性とかの話題は過去に出たので、赤黒木の名前は入っていた方がいいかも
    • 場所は?
      • とりあえずGitHubで (メンテナがGitLabとかがいいと強く言うなら考える)
      • 継続的メンテナンスに熱意のある人がいないなら github.com/ruby/ 以下もあり
    • ユーザアカウントのリポジトリの所有権の継続性を管理する - GitHub Docs
  • OSSフリーライド問題、npmパッケージ乗っ取り問題
  • OSSをやっていてよかったこと?

2021/12/27

  • Ruby 3.1おつかれさまでした
  • Rails 7.0.0が descendants でこけるのでアップグレード待機
  • Windowsでのlibffi
  • 火事に気を付けましょう
  • お墓の話、土葬・水葬ほぼできない問題
  • 行政区画の境界
  • 次の新機能
    • namespaceのようなもの
    • static barrier
      • 有効にして以降はクラスの再オープン等を禁止
  • Float 3.0 is misparsed as integer 3 in workflow YAML · Issue #849 · actions/runner
    • GitHub Actionsで ruby: 3.0 と書くと 3 と受け取られて3系最新の 3.1.0 が使われるので引用符が必要
    • github.com/ruby 配下はだいたいやっているが、自分のプロジェクトでも確認がてら3.1を追加するついでにやろう
  • 夜はリリースパーティー

2021/12/20

2021/12/13

  • Log4jの脆弱性
  • require "objspace/trace" したときのpの表示を拡張したい
    • 現状:Kernel#p を直接変えている
    • ObjectSpace.p(obj) #=> "#{ obj.inspect } @ #{ allocation_path }:#{ allocation_line }"
    • p ObjectSpace.site(obj) #=> "#{ allocation_path }:#{ allocation_line }"
  • Kernel#pにキーワード引数を与えたときの挙動
a = 10; b = 20
p a:, b:;
#=> {:a=>10, :b=>20}
#=> proposal
a: 10
b: 20
  • Class#subclasses と #descendants
    • 機能の重複感があるので前者を入れて後者は消す方向
    • Q. descendants は使うの?
      • A. Rails/ActiveRecordにはSTI(Single Table Inheritance)という機構があってクラスが多段継承されるので、全modelクラスを取得する際に必要
        • subclasses があればActiveSupportが descendants を効率よく実装できるのでOK
  • NEWSに足りないエントリを追加しましょう
  • https://bugs.ruby-lang.org/issues/18396
    • 実はいけるんじゃない?
    • 3.1を出したら警告を出すようにしてやってみよう
    • パターンマッチの in 節ではすでにそうなってる
      ​​​​x = { a: 1 }
      ​​​​case x
      ​​​​in a:
      ​​​​  :ok
      ​​​​end #=> :ok
      
      endless range (..) でダメなのも同じ
  • 最後に高額の現金を使ったのは?
    • 家を買うときの仲介手数料
    • 税金などのコンビニ払い
    • バイトの給料などは今も手渡しのところも
    • 免許持っていないコミッター結構多い
    • 合宿や保証には年齢制限

2021/12/06

2021/11/29

2021/11/22

  • 休みを取って4連休にしている人が多そう
  • Cloudflare Workers
  • asyncにいろいろ取ってきたり送ったりして待ち合わせる処理をRuby/Railsで書きづらい
    • RailsのAPIバックエンドに、TypeScriptなどでBFFを書いてかぶせることが多い
  • Rails 7の目玉は?
  • Time.new(str)

2021/11/15

  • BiDiにまつわる「脆弱性」の話題
    • 言語以前にツールで対応が必要
  • エンコーディングに応じて識別子に禁止するホワイトスペース類を拡張する?
  • キリル文字やギリシャ文字、装飾文字など見分けが付かない文字はいろいろある
  • イントネーション、方言の話
  • def foo ... でエラー
    • ; で区切るとダメっぽい
    • Classs.new { } の中でもエラーになるっぽい
  • AST Tooling

2021/11/08

  • 5万円くらいのiPadが大活躍していてコスパいい
    • Pro高い
  • アメリカのスーパーには魚が少ない
  • 税金
    • 日本の住民税高い
    • 所得税の予定納税
    • インボイス制度(2023/10から)
  • Async Ruby
  • ensureで非同期例外禁止?
    • Ctrl-Cが効かなくなるのはなあ…互換性も… vs. 「正しさ」
  • bidi文字でソースコードのレビュアーをだます https://trojansource.codes/
  • キーワード引数の bool_flag: nil は無指定(デフォルト値がtrueならtrue)と見るべきか、falsyだからfalseと見るべきか
    • JSだと undefined で無指定を表す

2021/11/01

  • 今日は雑談回
    • 11/11は中国で独身の日
    • 選挙
    • FacebookがMetaに
    • Nikola Tesla
  • Ruby Biz Grand Prix
  • macOS Monterey
    • nobuはまだBig Surにも上げていない
  • 新500円硬貨流通開始

2021/10/25

  • 開発者会議延長戦
    • Feature #18254: Add an offset parameter to String#unpack and String#unpack1
      • matz: OK
    • Feature #17795: Around Process.fork callbacks API
      • matz: fork!, _fork, or core_fork
      • knu: Let's pick name that a normal user would never use.
      • matz: Let's go with _fork.
    • Feature #17837: Add support for Regexp timeouts
      • Timeouts require system calls and that slow down the Regexp engine.
      • Backtrack counter is a lightweight feature but does not guarantee time.
      • knu: How about starting to measure time when/after a certain amount of backtracks occur? (after 10,000 backtracks, for example)
        • Using a timer signal could be a good idea.
  • Make each_cons {} return self (currently nil) https://github.com/ruby/ruby/pull/1509
    • matz, knu: OK
  • Time.new(string)
    • We want to leave Time.parse as it is and make a new method that is strict and controllable. Supporting the ISO 8601 format is so important we want to support it in the core. Also, being able to the Time#to_s format is a good addition. Other formats will remain supported by Time.parse
  • trapの第2引数
    • Procを取れる
    • "SYSTEM_DEFAULT""SIG_DFL"/"DEFAULT" (Rubyのデフォルトハンドラー)は別

2021/10/18

  • カナヘビ
  • RubyConf締め切り
    • 英語の不安
    • 一方ロシアでは日本語でしゃべってくれと言われて、翻訳してくれた
  • Intelのマニュアルを機械翻訳するバイト
  • リトルエンディアン、ビッグエンディアン(ネットワークバイトオーダー)
    • Intelの勝利
    • ARMはアラインメント必要
  • https://www.ruby2js.com/
  • 連想配列のキー順序
  • Three.js: Remove d.s files
    • TypeScriptの型定義が高度化してメンテナンス困難に
    • 先鋭化、教条主義化しがち
    • 型パズル大好きマンとライブラリを利用・開発したいマンが重なるのはまれなので、メンテナ不足時代が続くかも
  • ブラウザで使える言語の未来
    • wasmがんばれ…

2021/10/11

  • macOS 10.15
  • Windows 11
    • 10/5に正式リリースされてた
    • ハードウェア要件を満たしているのにエラーで上げられない
  • VS Code as the best SSH client ever
    • SSH先でいろいろやってる
  • https://bugs.ruby-lang.org/issues/18242
    ​​​​1 < 2   and a, b = 2, 1      # SyntaxError
    
    nobu: やってみたらできたよ
  • ruby-talkがプログラミング以外の話題で荒らされているのでモデレート
    • 続くようなら閉じる?

2021/10/04

2021/09/27

  • 感染状況落ち着いてる
    • 緊急事態宣言は解除されそう?
  • Ruby Garbage Collection in Under Two Hours by Jemma Issroff:
    • $29。ニューヨークでラーメンを食べたと思えば
  • ruby-jwtに脆弱性につながりそうな問題点を見つけた(?)がどうすればいいか、という話
    • 具体的な攻撃があるのではなく、利用者が勘違いして使いそうという類の問題であれば、普通に(オープンな場で)報告していいんじゃない?
    • いきなりPRよりはissueでコミュニケーションするといい
    • 英語はasakusa.rbとかで相談できる
  • TenderJIT
    • 2019年の暮れにスタートしてる。YJITの前身?
  • 配信用カメラの話
    • ささださんがコンデジに変えたらセピア色に
    • mrknがんばってた
  • GraalVM, TruffleRubyの話
    • TruffleRubyは独自にいろいろ入れてますって話
      • rubyでirbが起動するとか (TTYのとき)
        • CRubyでもやる?(gorubyではやってる)
        • python もそうなってる
          • python -v でバージョンが出ず、代わりにうるさいREPLが起動する問題
    • Oracle JDK
    • ShopifyがCRubyからTruffleRubyに切り替えるなんてこともある?
  • バージョン番号ポリシー
    • python を実行すると python3 か python-is-python3 を入れろと怒られる
    • Python 2.7系最後のバージョンは 2.7.18 (e?)
    • Python 4.0 はどうするの? Python3 4.0
    • バージョンリテラル
      • perl5には qv() がある
      • Gem::Version はちょっと長い
      • でも汎用の形・名前で入れるとsemver派がうるさそう
    • Marshalのバージョン
      • バージョンを維持したまま、Hashのcompare_by_identityに対応させるべく隠しインスタンス変数を使うようにしようと思ったら、この属性はハッシュを作った後からセットするのでは遅かった…
  • bundle gem の雛形にRBSも入れよう

2021/09/20

  • ギリシャ文字の書き方 (@knu)
    • 数学を趣味でやっていて、δを8に見間違えないように書こうと思って勉強
      • 上の折り返しは角張ってOK
      • アルファベットそれぞれいろんな書き方があり幅広い
      • 伝統的なフォントとモダンなフォント
  • 山梨の実況中継
    • ぶどうの話
  • メソッドを取得する演算子 (.:meth で一時的に入ったやつ)
    • デバッガーとかの開発でニーズが出てくるかな?

2021/09/13

  • 小学校のオンライン授業の話
  • { x: } が入った (https://bugs.ruby-lang.org/issues/14579)
    • { fork: } で fork が呼べる
    • {if:}[:if] でローカル変数 if が読める
    • str = "x"; { "#{str}": } は書けない
    • { "key": } のようにinterpolationがなくてもダメ
      • identifierは裸で書けるので括るのを許す理由はない
    • matz: 変数がないときメソッドが呼ばれるのはいいの?
      • RSpecなどは変数に見えるものがメソッドで提供されたりするし、attr_readerなどもある。利用者は変数かメソッドかを必ずしも区別していないので呼べるべき → issueにコメントしました
  • RubyKaigi Takeout 2021
    • 25分発表+5分休憩のペースはどうでした?
      • 5分短いかなとも思った
      • 10分だと長くね?という去年の感想も
      • テンポ良かった、30分なのできりがいい
    • オンラインイベントなので会社に申請せずに仕事をしながら聴く人も多かった模様
    • ライブ発表でのインターホンリスク
    • オンラインのよさ、オフラインのよさ
    • 海外からの参加者の反応も気になる
      • 時差問題、チャットの言語等
  • 骨伝導ヘッドホンいい
    • マイクはいまいちだしトイレに行ったとき問題があるのでZoom等の入力は本体のマイクなどにした方がいい
  • 2022はオフラインイベントはできるのか…?

2021/09/06

2021/08/30

  • マクロは入れたくないがannotation機能は提供したい
    • private, public などはannotationへ
    • magic comment で?
  • 名前空間を汚さずにインポートする
    • loadのwrapperを指定できる機能
  • 異能(INNO)vationプログラムの審査で忙しい話
  • NoMethodError#args がキーワード引数に対応していない?
    • mrubyで実装していて発覚
    • CRubyを見たら非対応(ハッシュ引数と区別が付かない)
      • バグとして直そう
begin foo(k: 1) rescue Exception p Hash.ruby2_keywords_hash?($!.args.last) #=> actual: false, expected: true other_foo(*$!.args) end
  • Exception#message に改行を含めたときの inspect の形式について
    • 改行をそのまま出すと didyoumean とかで紛らわしいのでエスケープしたい
p StandardError.new("foo\nbar") #=> # #<StandardError: foo # bar>
begin; foo(); rescue Exception; p $!; end; nil #=> # #<NoMethodError: undefined method `foo' for main:Object # Did you mean? for> # #<NoMethodError: "undefined method `foo' for main:Object\nDid you mean? for"> # #<NoMethodError: undefined method `foo' for main:Object\nDid you mean? for> # #<NoMethodError: undefined method `foo' for main:Object...>
  • 解決1. Exception#inspect の出力をエスケープするようにする

  • 解決2. did_you_mean 側で NameError#inspect に "Did you mean?" を挿入しないようにする

  • FYI: https://github.com/ruby/error_highlight/pull/10

  • 開発中のirbのデモ

    • メニュー補完 👏
    • くれぐれも補完処理でevalはしないように注意してください🙏
      • 今はレシーバの評価で副作用がないことを厳密に見ている
      • irbは本番でも使いうるので、 Model.where(超重いクエリ).to_sql を実行しようとした途中でevalされると死ぬ

2021/08/23

  • 健康の話題
    • 胃カメラ、大腸カメラ
  • RubyKaigi録画提出締め切り
    • 翻訳の話
      • method が手法と訳されていた
      • 中国語は1:1に直訳にしていてえらい
        • 日本語: オブジェクトのインスタンスメソッドを呼び出す。
        • 中国語: 调用该对象的实例方法。(要確認)
  • オリ・パラ、甲子園、フジロック
  • 用語の話
    • categoryの訳語の範疇の意味が変わっていく、等
  • ラーメンの話
  • Hashの省略記法がほしいという提案がまた来た
    • https://bugs.ruby-lang.org/issues/18124
    • この提案はさておき、欲しい人は増えている
    • deconstructはパターンマッチで実現された
    • constructの方は、JSにあるからとかではなくてRubyにとってよいユースケースとメリットを提示すればチャンスあり?

2021/08/16

  • Opal 1.2
    • すごい
    • 何に使うんだろう
    • Opal Railsすごい
  • 大雨
    • 島根大丈夫
    • 北広島町、北広島市
    • 府中市x2、伊達市x2
  • MacRuby
  • macOSのruby
    • 2.6.3
  • codespaces

2021/08/09

  • 台風
  • macOSのdfコマンドがよくわからない
    • 空き容量があると思っていたらほとんどなくなっていた
    • APFSなのでボリュームごとに空き容量があるのではなく、共有なのでは
    • VirtualBoxのディスクイメージがスナップショット作成により肥大化してしまった
      • 削除にはコピー分の空き容量が必要
  • オリンピックが終わってパラリンピックが8/24から
    • 道具や義足の進化
  • respond_to? とダックタイピングについてまつもとさんに振ってみた
    • そもそもダックタイピングは is_a? respond_to? 含め分岐を推奨していない
      • プロトコルを満たす前提で呼んでしまうのがduckと見なすということ
    • Numeric (coerceアーキテクチャ)やExceptionはnominalだが、そこは諦めポイント
    • structuralなチェックは考えたことがある
      • あるメソッドセットをインターフェースとして、それに準拠している(それらのメソッド持っている)かどうかを判定する
    • 現実には…
      • Rubyにはオーバーロードがないので is_a?respond_to? によるチェックがはびこってしまっている
      • 静的型チェックがない(発展途上)ので、みんなバリデーションを書いている
      • →それではパターンマッチ時代はどうか?
    • パターンマッチでメソッドの有無を判定できるようにするのはどうか? 例: case object; in .read then object.read; else object.to_s; end
      • 相性がいいのでいいと思う
      • ただ、メソッドセットを定義して名前を付ける、ANDパターンを導入するなどが必要になるだろう
      • アイデア・実装待ち

2021/08/02

  • Sorbet Compiler
  • オブジェクト指向で is-a 関係というとクラスの継承関係を言うが、Rubyの is_a? がクラス-インスタンス関係(継承を含む)をテストするメソッドなのはなぜ?という話題
    • まつもとさんが勉強した1980年代はクラス-インスタンス関係を示していたような…?
      • CLOSなどクラスとインスタンスを区別しない(プロトタイプベースのような)世界もあったのでそこで分岐してしまった可能性も
    • そういえばPerl5の @ISA はスーパークラスを指定するものだった (ただし $object->isa("Klass") はクラス-インスタンス関係のチェック)
    • UMLなどはインスタンスを特に論じないので、クラス同士の関係を記述する用語として発達するのは自然か
    • 動的型付けでダックタイピングを推奨するRubyではクラス/モジュール同士の is-a 関係を見たいということ自体が少ないはず (Module#<=> には別名がないしあまり使われていない)
    • ruby-jp Slackからの話題。まつもとさんからも「新しい知見を得ました」とのことです!
  • まつもとさんもようやくワクチン予約できた
  • RBOOL()マクロ

2021/07/26

2021/07/19

2021/07/12

  • Rubyのバージョンからパッチ番号を消したい
  • error_highlightがIRBで動くようにするにはどうしたら良いか
    • RubyVM::AST::Node#node_idってvcallとlvarで変わる?

2021/07/05

  • 最近のアカデミックペーパーに面白い実装っぽい話がみつからない(by matz)
  • Stripe のコンパイラすごいっすね
  • Crystal どうすか
  • ECOOP の開催形態すごい
  • Timezone の話
  • Copilot の話
    • 妥当でないコードがざっくりわかる静的解析が必須の時代になるかも
    • ライセンスどうなるんだろう話
  • http://ppl.jssst.or.jp/index.php?ss2021 を紹介するのにどこにポストしたらよいのか
    • 今はメーリングリストみたいなリーチとフォーカスのあるメディアが…
    • まつもとさんのTwitterで
      • 30万円相当
  • ささださんがrustで仕事したいらしい

2021/06/28

  • 下線で示すgemの名前
  • bundled gemのテストをruby/rubyで実行するときに、特定の名前だけskipしたい
  • ワクチンを打った腕が痛い
  • Windows 11

2021/06/21

  • minitest
  • 下線で示すgemの名前
  • Amazonプライムデーで何買う

2021/06/14

  • エラー箇所を下線で示す

  • DigestにJRuby実装をマージしたい https://github.com/ruby/digest/pull/21

    • knu: よさそう
  • Pythonでコンパイラオプションで劇的高速化した話

    • Rubyでは効果なし
  • https://teslatequila.tesla.com/ ⚡🥃

    • 西嶋さんが入手
    • 元はエイプリルフールネタから
  • VagrantがRubyからGoへ

    • (他の)HashiCorp製品はぜんぶGoとHCL
    • パッケージにRubyを同梱する辛さ
    • RubyによるDSLの展望は?
  • rdbgのデモと相談

2021/06/07

  • 議事録なし… 話したトピックを思い出した人は追加してください

  • エラー表示にカラム位置を示したり下線を入れる話

2021/05/31

  • rdoc早くできないか?
    • Cのパース、Rubyのパース
      • Cのパーサーが特に遅い
      • Ruby含め、小さいファイルがたくさんあるとWindowsなどで遅さが顕著
    • パースは進捗が出るが生成は進捗が出ずだんまりなのは待つ人の気持ち的によくないかも
    • Cメソッド定義をRubyに移していけば速くはなる
      • rdocは実装を読むときのヒントになっている
    • rdocを明示的に書かなくてもクラス・メソッド・定数定義等は拾われるので、処理しなくていいファイルというのはあまりないかも
  • object_tracer
    • 取り込むにはでかい
  • プロジェクトのGemfileに書かなくても、デバッグ用のgemを別途使いたい
    • ~/.rubyrc とか、自分用の Gemfile を持っておいて
    • $LOAD_PATH に自分用gemのパスが入った状態で bundle exec 相当ができれば良い
  • test/unit の話

2021/05/24

  • syslog は残したい?

    • rubyを入れてgemなど使わずsocketやsyslogを使ってシステムスクリプトを書く層もいるので、メンテナンスコストやセキュリティーリスクがない限りそっとしておきたい
  • debug

    • パスワード認証とかセキュリティについて中途半端にがんばると、逆に期待が高まってそこをつつかれそう。ほどほどでいいのでは
  • default gems

    • bundle exec時はアップデートがインストールされていても使われない
  • irbのデフォルトでカラーする挙動について

    • オフにはできる
    • 色を変えることは現状できない
    • NO_COLOR運動
    • ターミナルの設定でやるのが局所的には最適
      • GCPのターミナルなど、Webで出すターミナルはカスタマイズに限度がある
  • ターミナルでのダイアログやプログレスバーの話題

    • tty-progressbar がけっこうがちだった
    • ダイアログの出し方はpythonも参考になる

2021/05/17

  • Integer#size とは
    • size が 5 とか 9 を返すことがある
      • (Bignum)オブジェクトのサイズではなく、整数の表現部分のみのサイズ
      • 実用的にはそんなに意味はない。1.sizelong のサイズが分かります程度
      • ちゃんとサイズを取りたければ pack の結果とか RbConfig::CONFIG を見よ
    • require 'rbconfig/sizeof' すると RbConfig::SIZEOF が定義され、いろいろなCの型のサイズがそれで取れる。
      • VALUE のサイズはない
        • あってもいいが uintptr_t とか void *
    • sizeof(_Bool) == 1 なんだねえ
      • 構造体だとパックされるの?されなさそう
      • そういえば構造体のcharメンバーのアクセスはアーキテクチャによってはatomicじゃないね
        • https://www.jpcert.or.jp/sc-rules/c-con32-c.html
        • なのでraceはビットフィールド関係なく存在する (C11でchar境界では安全になったらしい、そのために0幅のフィールドを挟むということもできるようになっている)
    • そういえば object_id符号付き 64ビット整数なのでPostgreSQLのbigintに収まってよかったー事案がありました
  • psych 4.0.0でloadがsafe_loadになってしまって発生した非互換
    • https://github.com/ruby/psych/issues/490
    • Symbolも読めない
      • 設定ファイルで使われている
        • それを読めるために unsafe_load にしてしまったら本末転倒
      • もうSymbol DoSはないから許してもいいのでは
    • y を true と見なすなどのRuby拡張はあるし、SymbolもRuby拡張なので safe_load でも許したい
    • YAML 1.1 では on / offyes / no もboolean扱いだったが、YAML 1.2 では true / false のみになった
      • psychもYAML 1.2準拠のはずだけどおそらく互換性のために古い表現も許している
    • psychには指定したクラスのインスタンス化は許すというオプションがある
      • Symbolは許しているようにも見えるが?→継続調査
    • RubyGemsのgemに埋め込むspecで Gem::Requirement を埋め込んだりしているので要対応
    • rdocのテストもこけている
    • ChangeLogとかアナウンスなしなのは厳しいのでいったんrevertもありでは

2021/05/10

  • GW どうでした?
  • 島根県のコロナ状況
  • REDoS の話
    • 正規表現マッチにタイムアウトを設けたいという要望
      • 試験実装では5%遅くなった
        • 5%の価値はないのでは
    • バックトラック回数で制限するという案も
      • いずれにしても、正規表現エンジンはかなり最適化されているのでちょっと分岐が増えるだけで大幅に性能は落ちがち
    • 信頼できない文字列をパターンとして使う際はre2を使うなどが一般的
    • うっかりバックトラックしまくるパターンを書いてしまうことはよくある
    • (信頼できる入力を元に)動的に生成したパターンがモンスターになることはある
      • そのケースは自覚的にタイムアウトを設定できそう
    • 多くの場合は何が引き起こすかわからない(gemの中など)ので、グローバル(スレッド単位など)で上限を設定できた方がいいのかも
    • たとえばRailsでリクエストが長時間掛かっていたら止める、などがしたい
      • Timeout.timeoutはどこで発火するかわからないのでRailsなどでは使いづらいという話
        • たとえば重要なensureの処理中に発火するとまずい
    • 巨大な文字列に力業の正規表現をマッチさせる、みたいなことはよくあるのでデフォルトでタイムアウトされるのは困る
  • macos での release 版デバッグの話
  • ruby/debug 出ました

2021/05/03

  • Array#to_hに2.6からブロックを渡せるけど、2.5でも対応したい時、どう分岐するのが良いか
    • [[1,2]].to_h{[3,4]}のようにするとブロックを受け取るかどうかで結果が変わって良さそう
  • JRubyのRubyバージョン互換が難しい

2021/04/26

2021/04/19

2021/04/12

2021/04/05

1.instance_eval { p i # => (0+1i) }
  • 1i.i はできないのか (Complex#i)
  • private の逆でレシーバがないと呼べないメソッド
    • "python"
  • 変異株
    • 一般に小型犬の方が数年単位で長生き

2021/03/29

2021/03/22

  • Ruby Weekly Issue 544: March 18, 2021
  • 冷蔵庫買い替えの話
  • irb の最近の変更
    ​​irb(main):001:0> "a\n" * 100
    ​​=> "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n"
    
  • いろんな環境変数
    ​​ "LESSCLOSE"=>"/usr/bin/lesspipe %s %s",
    ​​ "LESSOPEN"=>"| /usr/bin/lesspipe %s",
    
  • irb のデザインについて
  • ドキュメントの話
    • Dashとかと連携したりしてドキュメントが簡単に見られるといいね
      • rdocで書かれたものは簡単にインストールできる
      • open dash:// でOK
      • 超便利だけど有償…
    • Windowsヘルプが広まったらよかったのに
      • 誰でも使える
    • GitHubにジャンプしてドキュメントの改善のPRを作れたり
    • るりまはバージョンを行き来できるのえらい
    • perldoc文化良い
      • まずざっくりした使い方が分かる
  • Cirrus CIを使いたい話 https://bugs.ruby-lang.org/issues/17720
    • ユニークなアーキテクチャのCIは歓迎だけどお金や手間は出したくないよ
    • 手を動かしてくれるならぜひ

2021/03/15

  • autoconf 2.70 の問題
    • autogen.sh として config.guess などのダウンロードをしてから autoconf をするものを用意しておくのはどうか
    • config.guess をコミットしておくのが嫌なのはなぜ?
  • 花粉、シダキュア
    • 小学生も発症 5歳から服用可 毎月要通院, 月3,000円くらい
  • mruby 3.0
    • 非互換で困っているユーザーの声
  • make
  • extend
  • Ruby Weekly Issue 543: March 11, 2021

2021/03/08

# standardrb, hsbt, mame
"foo"
"foo#{1}bar"
"foo\#{1}bar"
"\"" or '"'
%q{"'}

# rubocop default, usa, ko1
'foo'
"foo#{1}bar"
'foo#{1}bar'
'"'

# mrkn
"foo"
"foo#{1}bar"
'foo#{1}bar'
'"'
# standardrb
1.times { |n| p n }
1.times { |n|
  p n
}
1.times do |n|
  p n
end

# hsbt, mame, mrkn
1.times {|n| p n }

# ko1, usa
1.times{|n| p n}

# nobu
1.times {|n| p n}
# standardrb
"foo#{expr}bar"

# mame
"foo#{ expr }bar"
# standardrb
foo
.bar
.baz

# ko1, mame
foo.
bar.
baz
  • 範囲コメント
a = @
  ...
@ 1
# できるがキモイ

a = <!--
  ...
--> 1
# 衝突するからダメ

a = /*
  ...
  */ 1
  
a = %c{
  ...
  } 1
-- comment ++
<<COMMENT
...
COMMENT
  • %記法
    • %r は多用するが、# をエスケープするのがめんどくさい。%r%R を用意しておかなかった失敗
      • 今から %R を用意して移行を促せば?
      • さすがに無理じゃないかなあ
    • %x にも同じ問題が
  • 最近のRuby用エディタ
    • 秀丸
    • vscode
    • vim
    • neovim
    • Emacs

https://rails-hosting.com/2020/#os-editors-servers

https://www.pyblog.in/programming/top-10-code-editors-to-make-you-more-productive-in-2019/

2021/03/01

2021/02/22

2021/02/15

2021/02/08