Ruby-dev office hour logs: 2021-2022
2022/12/19
- Twitterがいろいろ揺れてる、人が抜けたり
- リアルタイムで見るアプリ増やしたくない問題
- Windows ARM版
- 夢の壺を眺める
- メモリー消費のプロファイリング
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
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:
:all
に eval
も含めるの?
- 脆弱性の基準
- 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
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
に自然言語で書かれているが、複雑な型を厳密に書くのは大変なので
- この方向も将来的に欲しい
- RBSにRDocを書けるようにする?
2022/07/25
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要素認証の有効期限が短いサービスがめんどうすぎる
- 2要素認証なのにOTPも同じアプリ/サービスで発行してしまうことへの葛藤
- gcc 3.x はもう切っていいよね
- gcc 4 (4.2.1)は一応GPL2最後のバージョンということで対応の需要があった
- でもOpenBSDもClangに移行したのでもういいかも
2022/06/13
2022/06/06
2022/05/30
2022/05/23
2022/05/16
2022/05/09
- QRコード物語
- 中日新聞:自動車工場のガロア体 QRコードはどう動くか
- 科学班が頑張ったのかな
- asahi.comやnikkei.comがCMSや配信システムに自社でエンジニアリングリソースを投入しているのは有名だが、取材や記事作り、プレゼンテーションについては?
- 選挙速報とかは各社頑張っているので、結局は関心やお金の総量で決まってしまうのかな
- 教育とプログラミング
- Dynabook構想は未だ実現していない
- 手元の端末で手軽に物理シミュレーションするなど
- ビジュアルプログラミングはちゃんと機能している
- ここには式しか入れられない、みたいなことが目で見て分かる
- 「PyScript」はJavaScriptのようにPythonコードをHTML内に記述して実行可能、Anacondaがオープンソースで公開 - Publickey
- Semantic Webは死んだ?
- CSS、意味と構造の分離
- ボールドはデザイナーの意図として最初からボールド
- EPUB
- Web3
- NFT
- スパチャでAMA的な配信イベントもありかも
- 技術顧問ビジネス
- KPIを立てるのはなかなか困難という話
- バーンダウンチャート、健全性指標、予測可能性
- Windows 11
- Insider Previewから上げようとしたらクリーンインストールを強いられて辛い
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!ニュース
- Goでの開発の話
- genericsはまだ制約が多い
- カジュアルにgenerator (コード生成)を使う文化になっているので、あまり使いどころがないなという印象
- リフレクションもカジュアルに使われている
- jsonやvalidator、ORMなどは構造体のフィールドのタグを使って指示
- 明示的な返り値チェックを徹底し、コンテキストや必要な情報は引き回すパラダイム
- 例外機構・大域脱出冬の時代?
- WASMもアセンブリレベルでスタックをすっとばすようなジャンプ機構は省かれている
- system() は例外を出してほしい…
- exception: true はあるが
- コマンドが存在しないレベルのエラーは例外でいいけど、終了ステータスが非0で例外はそれでいい?
- コマンドが存在しない場合も、シェルを通さない場合はErrno::ENOENTだがシェルを通す場合は終了ステータスが非0と異なる
- シェルを通すかどうかはメタ文字の有無で決まるので分かりづらい
- diff(1)などは差分の有無を終了ステータスで示すが、それを例外処理で拾うのはなんか違う感もある
- Windowsだと存在しないコマンドでも例外が出てくれない?
- Rakeの sh が望みの物かも
- ブロックを渡すとステータスチェックがユーザに委ねられるが、渡さないとエラー時に例外発生
2022/04/18
2022/04/11
- 野球の話
- 明後日リリース
- 最近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勝手翻訳サイト
- RubyのWebAssembly/WASIへの移植が実現、プレリリース版のバイナリ公開。RubyGemsにも対応 - Publickey
2022/03/28
- 命令レベルあるいはASTレベルでこうコンパイルされる?→たぶん?
- Tempfile.create, Dir.chdirや2つIOを開く場合など、入れ子の順番に意図がないときに平たく書きたい
- Python の for/else が欲しい(Enumerable#find があるから多分要らない)
2022/03/21
春分の日につきお休み
2022/03/14
2022/03/07
- Worldle
- 子供の好きな食べ物
- 物価上昇
- Rubyの話…
- 航空便のロシア迂回ルート
2022/02/28
- Time.new で 2021-03-01 を作ろうとしたら 2021-02-30 という時刻が生成される (Ruby 3.1, master)
- ウクライナ情勢
2022/02/21
2022/02/14
- 東京の雪は肩透かし
- ワクチン接種3回目
- バレンタインデー
- Wordle
- NY Times に大金で買われたのは夢がある
- 日本の新聞社の将棋と同じような感じ
- NFT
- Ruby 3.2
2022/02/07
- このまま(気になるならSentry側に頼む) → これ、もし要望が強ければ2
exception_class_name: false
みたいなキーワード引数を入れる
(RuntimeError)
の追加の責務を full_message に戻す
- additional_message styleを今から試す → highlightの責務が分散するのでいまいち
2022/01/31
- 開発者会議延長戦の感想戦(?)
- Struct::Value の採用の反響
- 右代入の束縛先に何を許すか
- ローカル変数だけからインスタンス変数などにも拡張するが、定数がダメという理由付けが難しい
- Exception#detailed_message/full_message と文字修飾
2022/01/24
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
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
にキーワード引数を与えたときの挙動
- 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 節ではすでにそうなってる
endless range (
..
) でダメなのも同じ
- 最後に高額の現金を使ったのは?
- 家を買うときの仲介手数料
- 税金などのコンビニ払い
- バイトの給料などは今も手渡しのところも
- 車
- 免許持っていないコミッター結構多い
- 合宿や保証には年齢制限
2021/12/06
2021/11/29
- Module#descendants/subclasses の性能要件、必要性(用途)
- コロナ、入試シーズン、学区制の話
- PHP 8.1 Released!
- error_highlight のバックスラッシュエスケープ問題
- 端末に垂れ流すリスクは?
- 他の言語(処理系)は垂れ流しているし、いいんじゃない?
2021/11/22
- 休みを取って4連休にしている人が多そう
- Cloudflare Workers
- asyncにいろいろ取ってきたり送ったりして待ち合わせる処理をRuby/Railsで書きづらい
- RailsのAPIバックエンドに、TypeScriptなどでBFFを書いてかぶせることが多い
- Rails 7の目玉は?
- Hotwire
- これと心中する覚悟がいるかも
- 管理画面が簡単に書けるとかなら
- QueryLogs
Time.new(str)
2021/11/15
- BiDiにまつわる「脆弱性」の話題
- エンコーディングに応じて識別子に禁止するホワイトスペース類を拡張する?
- キリル文字やギリシャ文字、装飾文字など見分けが付かない文字はいろいろある
- イントネーション、方言の話
def foo ...
でエラー
;
で区切るとダメっぽい
Classs.new { }
の中でもエラーになるっぽい
- AST Tooling
2021/11/08
- 5万円くらいのiPadが大活躍していてコスパいい
- アメリカのスーパーには魚が少ない
- 税金
- 日本の住民税高い
- 所得税の予定納税
- インボイス制度(2023/10から)
- Async Ruby
- ensureで非同期例外禁止?
- Ctrl-Cが効かなくなるのはなあ…互換性も… vs. 「正しさ」
- bidi文字でソースコードのレビュアーをだます https://trojansource.codes/
- キーワード引数の bool_flag: nil は無指定(デフォルト値がtrueならtrue)と見るべきか、falsyだからfalseと見るべきか
2021/11/01
- 今日は雑談回
- 11/11は中国で独身の日
- 選挙
- FacebookがMetaに
- Nikola Tesla
- 歯
- Ruby Biz Grand Prix
- macOS Monterey
- 新500円硬貨流通開始
2021/10/25
- 開発者会議延長戦
- Feature #18254: Add an
offset
parameter to String#unpack and String#unpack1
- 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
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のマニュアルを機械翻訳するバイト
- リトルエンディアン、ビッグエンディアン(ネットワークバイトオーダー)
- https://www.ruby2js.com/
- 連想配列のキー順序
- Three.js: Remove d.s files
- TypeScriptの型定義が高度化してメンテナンス困難に
- 先鋭化、教条主義化しがち
- 型パズル大好きマンとライブラリを利用・開発したいマンが重なるのはまれなので、メンテナ不足時代が続くかも
- ブラウザで使える言語の未来
2021/10/11
- macOS 10.15
- Windows 11
- 10/5に正式リリースされてた
- ハードウェア要件を満たしているのにエラーで上げられない
- VS Code as the best SSH client ever
- https://bugs.ruby-lang.org/issues/18242
nobu: やってみたらできたよ
- ruby-talkがプログラミング以外の話題で荒らされているのでモデレート
2021/10/04
- ruby-talkのポリシー/CoC
- RubyWorld Conference 2021
- 新将棋会館建設クラウドファンディング
- 10/10は何の日
- キーワード引数分離
- YJIT は YARV JIT の略らしい
- 国会
2021/09/27
- 感染状況落ち着いてる
- Ruby Garbage Collection in Under Two Hours by Jemma Issroff:
- 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
- Hash#inspectのシンボルキーの表記
- YouTube, Twitterなどの収益化の話
- お年寄りとZoom
- 8進数リテラル (
0
+ 8進数)
- 歴史的経緯で変えるのは厳しいか
- C, C++, Perl, Java, …
- C# にはないらしい
- Rust は
0o
プレフィクスのみ
- 既存のコードで使われまくっている
- RubyKaigi Day 2に Committers vs. the World やります
- Python高速化
- YJIT, MIR
- https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/
-
roughly 45% of CVEs issued for V8 were related to the JIT engine.
-
We find that disabling the JIT does not always have negative impacts.
- require/load に代わるライブラリロード方法 (import?)
2021/08/30
- マクロは入れたくないがannotation機能は提供したい
- private, public などはannotationへ
- magic comment で?
- 名前空間を汚さずにインポートする
- 異能(INNO)vationプログラムの審査で忙しい話
- NoMethodError#args がキーワード引数に対応していない?
- mrubyで実装していて発覚
- CRubyを見たら非対応(ハッシュ引数と区別が付かない)
- Exception#message に改行を含めたときの inspect の形式について
- 改行をそのまま出すと didyoumean とかで紛らわしいのでエスケープしたい
-
解決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の省略記法がほしいという提案がまた来た
2021/08/16
- Opal 1.2
- すごい
- 何に使うんだろう
- Opal Railsすごい
- 大雨
- 島根大丈夫
- 北広島町、北広島市
- 府中市x2、伊達市x2
- MacRuby
- macOSのruby
- 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で
- ささださんがrustで仕事したいらしい
2021/06/28
- 下線で示すgemの名前
- bundled gemのテストをruby/rubyで実行するときに、特定の名前だけskipしたい
- ワクチンを打った腕が痛い
- Windows 11
2021/06/21
- minitest
- 下線で示すgemの名前
- Amazonプライムデーで何買う
2021/06/14
2021/06/07
2021/05/31
- rdoc早くできないか?
- Cのパース、Rubyのパース
- Cのパーサーが特に遅い
- Ruby含め、小さいファイルがたくさんあるとWindowsなどで遅さが顕著
- パースは進捗が出るが生成は進捗が出ずだんまりなのは待つ人の気持ち的によくないかも
- Cメソッド定義をRubyに移していけば速くはなる
- 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で出すターミナルはカスタマイズに限度がある
-
ターミナルでのダイアログやプログレスバーの話題
2021/05/17
- Integer#size とは
- size が 5 とか 9 を返すことがある
- (Bignum)オブジェクトのサイズではなく、整数の表現部分のみのサイズ
- 実用的にはそんなに意味はない。
1.size
で long
のサイズが分かります程度
- ちゃんとサイズを取りたければ
pack
の結果とか RbConfig::CONFIG
を見よ
require 'rbconfig/sizeof'
すると RbConfig::SIZEOF
が定義され、いろいろなCの型のサイズがそれで取れる。
- VALUE のサイズはない
- あってもいいが
uintptr_t
とか void *
で
- sizeof(_Bool) == 1 なんだねえ
- 構造体だとパックされるの?されなさそう
- そういえば構造体のcharメンバーのアクセスはアーキテクチャによってはatomicじゃないね
- そういえば
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
/ off
や yes
/ 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 の話
- 正規表現マッチにタイムアウトを設けたいという要望
- バックトラック回数で制限するという案も
- いずれにしても、正規表現エンジンはかなり最適化されているのでちょっと分岐が増えるだけで大幅に性能は落ちがち
- 信頼できない文字列をパターンとして使う際はre2を使うなどが一般的
- うっかりバックトラックしまくるパターンを書いてしまうことはよくある
- 信頼できない文字列にマッチさせるとDoS成立
- JavaScript方面でも頻発している
- 定量的に複雑さを測る方法はあるか?
- (信頼できる入力を元に)動的に生成したパターンがモンスターになることはある
- 多くの場合は何が引き起こすかわからない(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
- 1i.i はできないのか (Complex#i)
- private の逆でレシーバがないと呼べないメソッド
- 変異株
- 犬
2021/03/29
- Rails の話
- マイクの話
p
便利という話
- 構造化データを吐く機能
- Webアプリの実行環境では普通になっている
- console.log()も構造化データを吐ける
- PIDやsource locationみたいなものもメタデータで
- ビューワーがほしい
- https://rubyweekly.com/issues/545
- crystal
- スエズ運河コンテナ船座礁
- distroless などの話
2021/03/22
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
- %記法
%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