Ruby

k0kubun/ruby-jit-challenge 完了報告

16.85倍はやい僕のJIT RubyKaigi 2023 お疲れ様でした。非常に面白かったですね。k0kubun さんのRJITについての発表が面白かったので ruby-jit-challange をやりました。無事完走できたので感想記事を書こうと思います(激ウマギャグ) ※: ベンチマークから …

Rails で全部のモデルについて何かの処理をしたい

eager_load = true にした上で ↓ のスクリプトを bundle exec rails r する ar_classes = [] ObjectSpace.each_object do |obj| next if obj.class.name.to_s != 'Class' if obj.ancestors.include?(ActiveRecord::Base) && obj != ActiveRecord::Base ar_cl…

オフラインリアルタイムどう書くE28の実装例 ( Ruby )

オフラインリアルタイムどう書くE28の問題「増築の果ての隣室」の実装例を、Ruby で。 問題 : http://nabetani.sakura.ne.jp/hena/orde28sqst/ 実装リンク集 : https://qiita.com/Nabetani/items/4e3fac2746ca05a93165 イベント : https://yhpg.doorkeeper.j…

Ruby でリファクタリングをした際にテスト要否を判断したい

TL; DR rubocop の自動修正とかが正しいのか不安になる Ruby なら ISeq に差分があるか調べればよい line number, column number 問題は本体に手をいれておけばある程度乗り越えられる 前提 tech-blog.monotaro.com qiita.com $ ruby -v ruby 2.5.1p57 (2018…

Rails におけるパフォーマンス検証パターン: action 抜けた後が遅いケース

TL; DR アクション抜けたあとは action の callback, rendering, rack middleware の世界 おもそうなものを特定して抜こう bullet は重いぞ 事象 新機能開発中に、大量データ突っ込むか〜と思って突っ込んで開いたらまあ全然返ってこない。 はあ、まあそうい…

オフラインリアルタイムどう書く E26 の実装例(Ruby)

問題 : https://cedretaber.github.io/doukaku/e26/ 実装リンク集 : https://qiita.com/Nabetani/items/0bcabb80bdcbc9b2ff52 負けました。 とりあえず当日中に書いたのはこんなの。 github.com 縦n列目については n + 1 列目にあるやつをうごかせば揃うなー…

WIP: ast でメソッドコールを探すやつを作り始めました + designing data-intensive application を読んでいます

本日は2本立てでお送りします(特にネタがないので小ネタというか終わってないネタを2つ合わせて記事にしとくか……という記事です。 ast でメソッドコールを探すやつを作り始めました ほしくない?と思って作っています github.com 使い方は何かと言うとある特…

trick2015 ko1さんの1つ目のやつを読むやつ

前回に引き続き trick コードを読んだのを書きます、といっても実はこっちのほうが先だったのですが。最近これに関連するものを twitter で教えてもらったので書きます。 前回はこちら hkdnet.hatenablog.com trick とは なんかよくわかんないけどすごい rub…

trick2015 yoshi-taka さんの作品を読むやつ

最近毎週水曜日に trick 読書会というのが開催されておりましてそこで読んだネタをブログ記事にしておくやつです。 先週読んだのはコレ。 trick2015/entry.rb at master · tric/trick2015 · GitHub とりあえずぱっとみ markdown ファイルにしか見えないやつ…

RubyVM::AST を用いた Ruby 製 Ruby インタプリタを作っている話

Ruby では v2.6 から RubyVM::AST というのが入ることになりまして、Ruby ランタイム上から AST を取得できるようになります。この話は以前に書いたので省略しますが、ASTがとれるということはASTを解釈して実行することもできるわけです。やるしかないです…

オフラインリアルタイムどう書く E25 の解答

qiita.com オンライン参加で解けました。17:02なので45分くらいでしょうか。 #yhpg とけたー— はくどー (@HKDnet) July 7, 2018 方針としては、たかだか200x200マス = 40000通りなので、スタート地点以外の1点を選んでベクトル作ってベクトル回して伸ばして…

datadog の ruby ライブラリ dogapi で batch_metrics をネストするとダメそう

NOTE: v1.3.0 で見てます。 先日 datadog にメトリクスなげてーなと思ったのでライブラリの使い方を見てたのですがあんまり出来がよくなさそうです。気になったのはここ。 dog.batch_metrics do dog.emit_point('test.api.test_metric',10) dog.emit_point('…

RubyVM::AST に関するメモ書き

hkdnet.hatenablog.com 作ったけど微妙ですわこれ(手のひら返し 使い始めたら、 children にアクセスするのに node_type とかそんなに意識したくないんだよなーということに気づきました いまやろうとしてるのは RubyVM::AST を使って Ruby インタプリタを R…

RubyVM::AST を便利に使いたいので gem を作った

github.com さっと作りました。 rubygems には登録してません(名前が重複してるかすら調べてないや) 経緯 Ruby 2.6.0preview2 から RubyVM::AST モジュールが使えるようになりました。 Ruby 2.6.0-preview2 Released RubyVM::AST [Experimental] Ruby 2.6 in…

オフラインリアルタイムどう書く E24 の回答

負けました。ほっとんどのテストケースは通るが4つほど通らない、というのがあるというのが時間内の回答です。 が、終わったあとの懇親会でぼーっと考えてたらあそこじゃね?というところに気づいて解けました。そしてその diff がしょーもない。 とりあえず…

その rescue_from ほんとに必要ですか

だいたい必要ないと思ってますよ、という話。 Rails アプリケーションの開発において rescue_from を追加することが正しいことは少ないと思っています。 rescue_from とは実際にはアクションおよびコントローラをまたいだ begin - rescue ( try - catch )で…

jewel polisher

最近自分たちのプロジェクトが依存する gem 関連で何かが起きて対応が必要だったことが続いたのでメモっておく。 rails-html-sanitizer 0.4.0 CVE-2018-3741 対応。これは依存が多いので追うのがちょっとめんどかった。情報としては以下の issue が非常によ…

どうかくE22とjit

問題: 辞書順に数を並べる 2018.3.3 実装: github.com とりあえずナイーブに解いたやつ。鍋谷さんは「Rubyでは解けないくらいの計算量にしたつもりだった」と言っていたが案外解けている。 $ ruby -v ruby 2.6.0preview1 (2018-02-24 trunk 62554) [x86_64-d…

Ruby の ! について

はいどうも ! メソッド Ruby における ! ってご存知ですか? Ruby は演算子っぽいようなものもメソッドとして実装されているという話があったりします。 1 + 1 # Integer の + メソッドが呼ばれている class Integer # 上書き def +(other) 42 end end 1 + 1…

ランダム性は心の弱さ -- Rails においてテストデータをランダムに作ることについて

お気持ち やめよう 何がおきたか 単純化するとこんな感じのコードがあって爆死した1。 describe Foo do let(:left_foo) { Foo.new(value: 1000, bar: left_bar) } let(:left_bar) { BarMaster.all.sample } let(:right_foo) { Foo.new(value: 100, bar: righ…

オフラインリアルタイムどう書くE21 に参加して負けてきました

yhpg.doorkeeper.jp 負けました。敗因はなんだろ……。方針が定まりきらなかったのが敗因なのかなー。 プレイヤーベースで考えると打ったときに、そのタイミングでアタリを引いたのか、次のターンでアタリを引いたのかの場合分けがめんどくさそうだなーと思い…

Ruby本体読みはじめた人に届けたいドキュメント

RubyKaigi2017に参加してやる気が高まったので最近は ruby/ruby のコードを読むようになってます。 github.com しかしこれがなかなか読むのにコツがいる感じです。 RubyKaigi参加前は “Ruby under a microscope”1 を読んで「Rubyの内側面白い!!!」ってな…

最近のコーディングネタ

Ruby テスタビリティのために引数をとりたい 普通にプロパティアクセスするような気楽さでアクセスしたい この2つの気持ちがあわさってこういうことをよくしている class Foo attr_reader :baz, :qux def bar @bar ||= build_bar(baz, qux) end def build_ba…

mrubyだと32個以上の必須引数をとれない

www.amazon.co.jp 別に普段mruby使ってるわけでもないんですが『言語のしくみ』を読んでたら気になったので検証。 本の記載 タイプ3 Ax(25ビット) op(7ビット) 命令タイプ3はオペランド雨を全部1つにして25ビットのオペランド(Ax)として取り扱います。タイプ…

『オブジェクト指向設計実践ガイド』 実践編

はじめに この記事は『オブジェクト指向設計実践ガイド』の内容をもとにテストコード書いてたらよくわかんなくなったので助けてくれ、という内容です。だれか助けてください。コメントとかRe:記事とかのリアクションあると嬉しいです! 本の内容の抜粋 詳細…

RubyでEnumerableを条件Xを満たすものと満たさないものに排他的に分けたいんだけど

どうするのがいいんでしょうか。 メモリとかパフォーマンスとかそういうのはあんまり気にしない前提です。 以下のサンプルコードでは対象のEnumerableは変数 arr に代入されているものとし、条件Xを満たすかどうかのメソッドは foo?(x) という名前であるとし…