タグ

rubyに関するrryuのブックマーク (81)

  • 「Ruby 3」系統の正規表現コンパイラーに情報漏えいの脆弱性、修正版がリリース/v3.0.7、v3.1.5、v3.2.4、v3.3.1への更新を

    「Ruby 3」系統の正規表現コンパイラーに情報漏えいの脆弱性、修正版がリリース/v3.0.7、v3.1.5、v3.2.4、v3.3.1への更新を
    rryu
    rryu 2024/04/30
    テキストの先頭から相対指定できる正規表現の何かって何があるんだろう。
  • Ruby のメソッド定義時に仮引数があるとき、それをカッコでくくらないのは私だけなの? - STORES Product Blog

    テクノロジー部門で Ruby インタプリタの開発をしている笹田です。RubyKaigi 2024 楽しみですね。 さて、Ruby のメソッドを定義するとき、仮引数がある場合、カッコを省略することができます。 def foo(x, y) end def bar x, y end bar の定義の方法ですね。私は好んでこの書き方をしてたんですが、同僚の遠藤さんに「そんな書き方をしているのは今時笹田だけだ」と言われてショックを受けたので、ちょっと調べてみました。 ちなみに、カッコがないと使えないメソッド定義の方法があるので、その時には涙を呑んでカッコをつけます。 def foo(kw:) # 必須キーワード引数 end def bar(&) # 無名ブロック引数 end 補足1:Ruby では「メソッド呼び出し時にカッコをつけるかどうか」にいろいろな論争がありますが、ここでは「メソッドを定義する

    Ruby のメソッド定義時に仮引数があるとき、それをカッコでくくらないのは私だけなの? - STORES Product Blog
    rryu
    rryu 2024/04/15
    そもそも省略できることを知らなかった…
  • Ruby のメモリ使用量問題を調査し upstream で解決していただいた話 - ANDPAD Tech Blog

    はじめに こんにちは。リアーキテクティングチームの髙橋と申します。 この記事では、アンドパッドの施工管理サービスで利用している Ruby をバージョンアップしたときに発生したメモリ使用量の問題の発生から解決までをお話しします。 Ruby のバージョンアップ(3.0 -> 3.2) アンドパッドでは昨年 2023 に、施工管理サービスで利用している Ruby を 3.0 から 3.2 にバージョンアップしました。 バージョンアップ自体は過去に確立済みの手法(詳しくは過去記事をご参照ください)により、粛々と進められリリースされました。 ところがこのリリースから数日後、とある問題が発覚しました。 メモリ増大問題 アプリケーションのリソース使用状況を監視している SRE チームのメンバーから、以下のような連絡がありました。 Ruby バージョンアップのリリース以降、アプリケーションの利用するメモリ

    Ruby のメモリ使用量問題を調査し upstream で解決していただいた話 - ANDPAD Tech Blog
    rryu
    rryu 2024/02/16
    巨大なSet同士の差分でごく小さなSetが生成される時に、そのごく小さなSetが元の巨大なSetのメモリ使用量のままという不具合なのか。
  • Ruby 3.3でYJITを今すぐ有効にすべき理由 - k0kubun's blog

    Ruby 3.3がリリースされた。YJITには非常に多くの改善が含まれたリリースだったが、 NEWS解説記事やリリースパーティーでは 2点しか触れられなかったので、この記事ではRuby 3.3でYJITがどう改善されたかについて解説する。 YJITは既に実用段階 YJITRuby 3.1で導入されたが、Ruby 3.2の時点でexperimentalのマークが外れ、実用段階となった。 Ruby 3.2では、以下のような企業で性能改善が報告された。 DeNA: 40% 高速化 GMOペバボ: 18% 高速化 STORES: 6.5-7.5% 高速化 Timee: 10% 高速化 メドピア: 2.8% 高速化 BOOK☆WALKER: 20-30% 高速化 Discourse: 15.8-19.6% 高速化 Lobsters: 26% 高速化 CompanyCam: 20-40% 高速化 弊

    Ruby 3.3でYJITを今すぐ有効にすべき理由 - k0kubun's blog
  • Ruby 3.2 で導入された Integer#ceildiv とは - Qiita

    Ruby 3.2 で Integer#ceildiv なるメソッドが導入された。これはどういうものか。 用途 テニスボールが 15 個ある。これを「4 個入るケース」に詰めて保管しておきたい。ケースはいくつ必要か。 15 を 4 で割ると 3 余り 2。ということは,3 ケースに 4 個ずつ詰めて,半端の 2 個を別の 1 ケースに入れることになるので,ケースは計 4 個必要になる。 この計算は,Ruby でやるなら

    Ruby 3.2 で導入された Integer#ceildiv とは - Qiita
    rryu
    rryu 2023/01/10
    メソッド化するのはそのイディオムを書くより良い方法があるからだろうと思ってRubyの実装を見たら「-self.div(-other)」で実現されていてなるほどと思った。
  • Ruby 3.0 の Ractor を自慢したい - クックパッド開発者ブログ

    Ruby の開発をしている技術部の笹田です。娘が自転車に乗り始め、まだ不安なためずっとついていなければならず、少し追っかけまわしただけで息切れがヤバい感じになっています。運動しないと。 ここ数年、Ruby で並列処理を気軽に書くための仕組みである Ractor を Ruby 3.0 で導入するという仕事を、クックパッドでの主務として行ってきました(クックパッドから、これ、と言われていたわけではなく、Ruby を前進させるというミッションの上で行ってきました)。 Ractor は、もともと Guild という名前で開発をはじめ、2020年の春頃、Ractor という名前に変更することにしました。いくつかの機会で発表しています。下記は、RubyKaigi での発表の記録です。 A proposal of new concurrency model for Ruby 3 - RubyKaigi

    Ruby 3.0 の Ractor を自慢したい - クックパッド開発者ブログ
    rryu
    rryu 2022/12/14
    名前は単語ではなくてR actorなのか。
  • Rubyでrescueしたらグローバルなオブジェクトを破壊してたよって話 - ANDPAD Tech Blog

    こんにちは、ydahです。 2021年の12月から株式会社アンドパッドでソフトウェアエンジニアとしてANDPAD検査の開発に携わっています。 昨年、息子が生まれてから夜更かしすることがなくなり、早朝に起きては軽くジョギングをしてから、OSSプログラミングにいそしむのが朝のルーティンになった今日このごろです。 さて稿では、Rubyの例外処理を眺めていたらrescueがグローバルなオブジェクトを破壊するケースがあったんですよという話と、その対策について話したいと思います。 発生していたケースについて 突然ではありますが以下のコードをご覧ください。 この中にグローバルなオブジェクトを壊してしまうrescueがいます。 # 1 begin raise 'foo' rescue ArgumentError end # 2 begin raise 'foo' rescue => ArgumentEr

    Rubyでrescueしたらグローバルなオブジェクトを破壊してたよって話 - ANDPAD Tech Blog
    rryu
    rryu 2022/08/25
    定数なのにrescueなら上書きできるのが驚き。エラーにしないのは何か理由があるのだろうか。
  • Ruby が YJIT でなんで速くなるのか? Lazy Basic Block Versioning をサクッと理解してみた - estie inside blog

    estie でソフトウェアエンジニアをしている徳永(@yTo_9)です。 estie では Ruby を書いたりTypeScriptを書いたりしています! estie 夏のブログ祭りにかこつけて、せっかくなら普段は追わない部分だけど、気になっていたYJITなるものを深掘りしてみようと思い、「YJITがなぜRailsアプリケーションの高速化を実現できたのか」を調べてみたので紹介したいと思います。 「どうせ難しいんでしょ?」と思いながら調べてみたのですが、講演や論文の説明がわかりやすく、意外に概要を把握することは難しくありませんでした。 YJIT の核となっているのは Lazy Basic Block Versioning (LBBV) という手法で、これはRubyだけに限らず動的言語全般に適用可能な強力なアプローチであることがわかりました。 「あるタイプの条件分岐は、ほとんどの場合で片側しか

    Ruby が YJIT でなんで速くなるのか? Lazy Basic Block Versioning をサクッと理解してみた - estie inside blog
    rryu
    rryu 2022/08/16
    動的型では型チェックなどの内部的な分岐があるが、実行時に集めた型情報を使って必要な分だけJITしていくとほとんど分岐しないコードになるので速くなるということらしい。
  • 認証自作、 Rails 、 Devise - Diary

    認証自作、 Rails 、 Devise https://ockeghem.pageful.app/post/item/uQFX4oRNbnax82V これを読んで思ったことなんですけど、 Ruby On Rails 界隈では「認証は自作すべきではない、デファクトスタンダードの Devise を使うべき」という考え方が一般にあるように思います。 ではその Devise なんですけど、ドキュメントに以下のようにあります。 Starting with Rails? If you are building your first Rails application, we recommend you do not use Devise. Devise requires a good understanding of the Rails Framework. In such cases, we ad

    rryu
    rryu 2020/08/16
    2012-02-16にBLACKLIST_FOR_SERIALIZATIONで強制的にlast_sign_in_ip等を除外するコードが入ったので知らずに使っても大丈夫になったのだが、noteは2014-04-07サービス開始なので対応していないバージョンなのかも。
  • Rubyのテストのややこしい失敗を直した話 - まめめも

    Ruby の CI 維持業というのはこんな感じという事例紹介。 CIを観察する RubyのCIがときどき次のように失敗していました。 1) Error: TestM17N#test_object_inspect_external: Encoding::CompatibilityError: incompatible character encodings: UTF-8 and UTF-16BE /tmp/ruby/v2/src/trunk-test-random/test/ruby/test_m17n.rb:311:in `encode' /tmp/ruby/v2/src/trunk-test-random/test/ruby/test_m17n.rb:311:in `inspect' /tmp/ruby/v2/src/trunk-test-random/test/ruby/test_m1

    Rubyのテストのややこしい失敗を直した話 - まめめも
    rryu
    rryu 2020/03/24
    実行途中でEncoding.default_externalを変えた時の挙動による罠。
  • Ruby 2.7のここがすごい! パターンマッチ、コンパクションGCなどをリリースマネージャーに聞いた - エンジニアHub|Webエンジニアのキャリアを考える!

    Ruby 2.7のここがすごい! パターンマッチ、コンパクションGCなどをリリースマネージャーに聞いた 2019年12月25日にリリースされたばかりのRuby 2.7では、どのような機能がどういった経緯で採用されているのでしょう。リリースマネージャーのnaruseさんと、フルタイムコミッターのmameさんに詳しくうかがいました。 まつもとさんはとにかく忙しくて 実はすごいirbの改良 パターンマッチはRubyをどう変えるか キーワード引数は、端的に壊れていたのを大整理した 高速化に向けたいくつかの観点 Ruby 2.7で導入される「コンパクションGC」とは Ruby 3のビジョンは「静的解析」「並行並列」「JIT」 プログラミング言語Rubyには、クリスマス前後に新しいバージョンをリリースする伝統があり、2013年の2.1.0以降は毎年12月25日にメジャーバージョンアップが行われています

    Ruby 2.7のここがすごい! パターンマッチ、コンパクションGCなどをリリースマネージャーに聞いた - エンジニアHub|Webエンジニアのキャリアを考える!
    rryu
    rryu 2019/12/26
    ラインエディタではなくスクリーンエディタなREPLというのがあったがirbがそんな感じになるということなのだろうか。
  • なぜrubyは他の言語と比べて遅いのでしょうか?

    回答 (3件中の1件目) Rubyの実行速度に興味があって、15年くらいMRIの開発をしています。興味があるので長い記事になっちゃったことをお詫びします。 遅いと言ったとき、多分「実行速度」の話をしているんだと思いますが、それ以外にも結構いろんな「はやさ」があります。思いつくところで少しご紹介します。 (1) プログラムを作るはやさ Ruby は生産性が高い言語と言われることが多いので、プログラムを作る早さは早い、という評価が一般的です。 Cで書くと2日かかる。実行時間は0.1秒 Rubyで書くと1日かかる。実行時間は10秒(Cの100倍) と、すこし極端な仮定を置いてみると...

    なぜrubyは他の言語と比べて遅いのでしょうか?
    rryu
    rryu 2019/03/28
    昔のバージョンと比べればかなり速くなっているのだが、まだまだ高速化できる余地が全然あるあるというのが驚き。
  • Rubyでもbcryptはバイナリセーフではない - Qiita

    RubyのBCryptはバイナリセーフなのか 徳丸先生が注意喚起としてあげられていたこちらの記事に関して “bcryptの72文字制限をSHA-512ハッシュで回避する方式の注意点 | 徳丸浩の日記” https://t.co/AA1yFVd0TH — 徳丸 浩 (@ockeghem) 2019年2月24日 記事ではPHPの例が上がっていましたが、Rubyではどのような影響があるのかが気になります。 BCryptは非常にメジャーなアルゴリズムで、例えば Devise や Sorcery などの定番の認証gemを使う場合、デフォルトでBCryptを利用する設定になっています。Railsアプリを開発されている方なら、ほとんどの方が使っているのではないでしょうか。 詳しくは徳丸ブログを見ていただくとして、以下ではbcrypt-rubyについて、同じ現象が起こるのかどうか簡単に調査しています。 T

    Rubyでもbcryptはバイナリセーフではない - Qiita
    rryu
    rryu 2019/02/27
    確かにヌルを含む文字列では正常に動作しないのだから例外を投げるべきな感じがする。
  • Cコンパイラを利用したRubyのJITコンパイラ / Programming Symposium 60

    第60回 プログラミング・シンポジウム

    Cコンパイラを利用したRubyのJITコンパイラ / Programming Symposium 60
    rryu
    rryu 2019/01/30
  • Ruby 2.6 の改善を自慢したい - クックパッド開発者ブログ

    技術部で Ruby インタプリタの開発をしている笹田です。娘のために、今年はじめて大きなクリスマスツリー(1.8 m)を買いました。 稿では、私が Ruby 2.6 で取り組んだ中から、次の新しい機能と性能改善について紹介します。どちらのトピックも、普通に Ruby を使っているだけなら気にならない、玄人向きの記事になっていると思います。興味がある人にお読み頂ければ幸いです(居ればいいのですが)。 TracePoint の拡張 新しいイベント script_compiled の導入 フックを有効にする場所を制限する機能の導入 デバッガの実装が、10~100倍くらい速くなる、かもしれない ブレイクポイントの実装を例に解説 Transient Heap の導入 短寿命メモリオブジェクトの高速化 世代別コピーGCのアイディアを利用 Rails とかには効かないかも...。 そういえば、両方とも

    Ruby 2.6 の改善を自慢したい - クックパッド開発者ブログ
    rryu
    rryu 2019/01/04
  • インタプリタ開発者によるRubyの挙動解析への道 - クックパッド開発者ブログ

    Ruby インタプリタを開発している笹田です。今年のクリスマスにリリース予定の Ruby 2.6、楽しみですね(無事、出るといいな)。 この記事では、私がRubyの挙動を調べるために頑張った記録を書いておきます。 基的に、単純作業の積み重ねなので、難しい内容はありません。お気楽にお読みいただければ幸いです。 大雑把にまとめると、こんな内容が書いてあります。 デバッグカウンタの導入によるRubyの詳細な挙動調査の紹介 (私には)簡単な話で、Rubyをいろいろいじって、Rubyの細かい挙動、しかもほとんどの人が気にしない挙動を調べられるようにした話です。 多くの人が興味ないだろう、Rubyに仕込まれている統計情報をとる仕組みを紹介します。 クックパッドアプリを手元で調査できるようにした話 (私には)難しい話で、Ruby 開発版で弊社アプリを手元で動かすために四苦八苦した記録です。 Ruby

    インタプリタ開発者によるRubyの挙動解析への道 - クックパッド開発者ブログ
    rryu
    rryu 2018/10/26
    何かの呼び出し回数を調べたい時にカウンタを仕込んだりするが、それをデバッグカウンタとして標準で組み込んだという話。
  • Rubyのサンドボックスを作って、evalするBotを作った

    Rubyのサンドボックスを作って、evalするBotを作った posted at 2018-07-10 01:04:56 +0900 by kinoppyd 注意:安全じゃありません RubyのSnadbox環境 Sansbox環境とは、外部から入力されたプログラムを安全に実行する環境のことです。任意のコードを入力可能な場所で、いきなり system(“rm -rf ~/) とか入力されて、それが当に実行されたら困りますよね? 自分は困ります。ですが、外部から入力されたコードを安全に実行する環境というのはそれなりに需要があり、最もわかりやすいところではJavaScriptを実行するブラウザ、わかりにくいところでは今回作ろうとしているeval用のbotです。 ブラウザに関しては、インターネットという非常に治安の悪い場所から送られてくるコードを自分の環境で実行するので、サンドボックスが必要で

    Rubyのサンドボックスを作って、evalするBotを作った
    rryu
    rryu 2018/07/11
    evalも塞いでいるからモジュール定義込みでevalしないといけないのか。合法だけど閉じのendを超える技とか生み出されそう。
  • mrubyの文字列結合のパフォーマンスを改善する | ten-snapon.com

    先日、来る下記のイベントの資料でmrubyの文字列結合におけるメモリパフォーマンスについて記述し、それを社内で共有したところ、それをみた @matsumotory がmrubyにおける文字列結合は + での結合より、破壊的ではあるが <<のほうがパフォーマンスが良いということに気づいた。 valgrindで測定すると下記のような具合である。 # new.rb a = "aaa" b = "bbb" 100000.times do |n| a += b end $ sudo valgrind ./mruby new.rb ... ==2374== HEAP SUMMARY: ==2374== in use at exit: 0 bytes in 0 blocks ==2374== total heap usage: 102,786 allocs, 102,786 frees, 15,002,

    mrubyの文字列結合のパフォーマンスを改善する | ten-snapon.com
    rryu
    rryu 2018/03/19
    つまりmallocはreallocより13000倍遅いということになるのだが、一体どこでそんな差が…
  • pycallを使ってみての感想 - 環境構築・零

    (RubyAdventCalendar2017の代わりに投稿記事にしました) github.com Rubypython3ライブラリを読むことができます。 こんな風に書いていけました。 Vimプラ銀まで進めていきたいと思います。 gem install pycall gem install matplotlib #coding: utf-8 require 'pycall/import' include PyCall::Import sys = PyCall.import_module('sys') puts sys.stdout.encoding pyimport :datetime puts datetime.date.today() pyimport :datetime puts datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S

    pycallを使ってみての感想 - 環境構築・零
    rryu
    rryu 2017/12/29
    RubyからPythonのモジュールをロードして呼び出せるライブラリについて。どういう仕組みなんだろう。
  • ファイルオープンの罠 - Journal InTime(2017-12-15)

    _ ファイルオープンの罠 僕が書いたNet::FTPのコードに脆弱性報告があり、修正版がリリースされた。関係者のみなさん、ありがとうございました。 CVE-2017-17405: Net::FTP におけるコマンドインジェクションの脆弱性について 問題があったのは以下のようなコードだった。 def getbinaryfile(remotefile, localfile = File.basename(remotefile), blocksize = DEFAULT_BLOCKSIZE, &block) # :yield: data f = nil result = nil if localfile if @resume rest_offset = File.size?(localfile) f = open(localfile, "a") else rest_offset = nil f

    rryu
    rryu 2017/12/18
    Kernel#openはあるあるネタだけど、File.readもなのか…