Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

ブックマーク / watson.hatenablog.com (30)

  • RubyのC拡張ライブラリのdSYMを作成 - @watson1978 の日記

    macOS 上で RubyのC拡張ライブラリのパフォーマンスを計測するために、 Xcode 付属の Instruments というアプリを利用してます。以前は特になにもしなくともパフォーマンス計測結果を見るときにソースコードが表示されてどの箇所がパフォーマンスが悪いか表示されていたのですが、年末年始に時間があったので久しぶりに試したらアセンブラコードしか表示されずに読み解くのがとても大変でした。 C拡張ライブラリをインストールするときに、コンパイルしたときに収集したシンボル情報をもとに dSYM を作成したら解決しそうだったので試してみました。 Ruby の mkmf.rb に手を加え、C拡張ライブラリをインストールする際に生成する Makefile に dSYM を作成するためのコマンドを追加しました。 diff --git a/lib/mkmf.rb b/lib/mkmf.rb ind

    RubyのC拡張ライブラリのdSYMを作成 - @watson1978 の日記
    Watson
    Watson 2025/01/02
  • 最終出社日でした - @watson1978 の日記

    今日はReproでの最終出社日。思い返せば 30 歳も過ぎてから Ruby とどう関わっていくかという人生だった。 MacRuby (2010年~) 暇つぶしに Mac OS X のアプリを作ってみようかと思い立った時に出会ったプロジェクトだった。 今のように Swift や clang というコンパイラもなく、 Objective-C 言語というとにかく [] を書きまくらないとならずどうにもなじめなかった。もともと趣味Ruby はさわっていたのでそれでアプリが作れたら良いのにと思っていたところで、渡りに船的にさわり始めたのがきっかけだった。 私がさわり始めたころはちょっとしたコードを書いてもすぐにクラッシュするような感じで、ちまちま「こういうコードを書くとクラッシュするんだけど何でだろう?」とプロジェクトの issue に書き連ね、気がついたら「こういう風に直すと動くようになるんだ

    最終出社日でした - @watson1978 の日記
    Watson
    Watson 2024/02/09
  • Oj のパフォーマンス改善についてまとめました + 余談 - @watson1978 の日記

    Oj のパフォーマンス改善についてまとめて、弊社のテックブログにかきあげました。 tech.repro.io 文量の問題で全ては記載してないので、もし他の変更が気になる方は Commits · ohler55/oj · GitHub をご覧ください。 余談 なんでパフォーマンス改善ばかり(バグ修正もたまにしてますが)なのか、matzを説得する方法 にすべてが書かれています。つまり、「速度改善というのはわりと誰にでもわかりやすいのでマージされやすい」に尽きるかと。 という私なりの戦略のご紹介でした

    Oj のパフォーマンス改善についてまとめました + 余談 - @watson1978 の日記
    Watson
    Watson 2023/12/19
    “matzを説得する方法” はバイブル ( ˘ω˘ )
  • Ruby の FFI によるメソッド呼び出しのオーバーヘッド - @watson1978 の日記

    FFI を利用して C のライブラリを呼び出す時のオーバーヘッドがどれくらいなのかと思い調べてみました。 使用したコード 呼び出し時のオーバーヘッドを知りたかったので、処理負荷がかからない単純に加算するだけのコードとしました。 int add(int x, int y) { return x + y; } 使用したコード一式は https://github.com/Watson1978/ffi-benchmark にあるので、興味がある方はそちらを参照ください。macOS 上でしか試してないので、他の環境だと動かないかもしれません。あしからず。 環境 macOS 13.1 Apple M1 Max Apple clang version 14.0.0 (clang-1400.0.29.202) ruby 3.2.0 (2022-12-25 revision a528908271) [arm

    Ruby の FFI によるメソッド呼び出しのオーバーヘッド - @watson1978 の日記
    Watson
    Watson 2022/12/31
    あまり見かけないので調べてみた
  • gruff のメンテナーになりました - @watson1978 の日記

    RMagick が ImageMagick 7 に対応できたので、今度は RMagick を使用しているライブラリを見ていこうかとおもい、gruff のオーナーに連絡したら Contributor として招待していただきました。 とりあえず Rubocop を導入したので調教したりしながら、気長にやっていこうと思います。

    gruff のメンテナーになりました - @watson1978 の日記
    Watson
    Watson 2020/03/29
  • ImageMagick 7 に対応した RMagick 4.1.0 への移行方法 - @watson1978 の日記

    年始に転職して、現在は Repro株式会社 に所属しています。 昨日 ImageMagick 6 & 7 に対応した RMagick 4.1.0 をリリースしましたので、簡単に移行手順を書きます。 はじめに ImageMagick 6 と ImageMagick 7 が提供する異なる API インタフェースの差分を吸収するために、作業に取りかかった初期の頃から RMagick のインタフェースを変えないと対応が困難だと判明しておりました。 そのため、RMagick 3.2.0 から RMagick 4.0.0 へバージョンを上げた際に事前にインタフェースのみ変え、RMagick 4.1.0 は内部的な変更のみで ImageMagick 6 と 7 に対応したため、このようなバージョニングになっております。 RMagick 4.1.0 へ移行する ver 4.0.0 未満をアプリで使用されて

    ImageMagick 7 に対応した RMagick 4.1.0 への移行方法 - @watson1978 の日記
    Watson
    Watson 2020/03/23
    雑な説明を書きました。
  • imagemagick formula のアップデート方法(備忘録) - @watson1978 の日記

    RMagick が ImageMagick 7 に対応しそうなのだが Homebrew で提供されているバージョンだとビルドに失敗するので、アップデートをリクエストした。 やっていることは、ほぼ imagemagick@6 formula のアップデート方法(備忘録) - @watson1978 の日記 とおなじ。 $ export IMAGEMAGICK_VERSION="7.0.9-26" $ curl -O https://imagemagick.org/download/releases/ImageMagick-$IMAGEMAGICK_VERSION.tar.xz $ export SHASUM256=`shasum -a 256 ImageMagick-$IMAGEMAGICK_VERSION.tar.xz | awk '{print $1}'` $ cd $(brew --r

    imagemagick formula のアップデート方法(備忘録) - @watson1978 の日記
    Watson
    Watson 2019/09/23
  • imagemagick@6 formula のアップデート方法(備忘録) - @watson1978 の日記

    ImageMagick がちょいちょい細かくバージョンを上げてくれるので、自分が使いたいバージョンにあげたときの作業ログです。 私が作業したのは https://github.com/Homebrew/homebrew-core/pull/40921 です。 Pull Request を作成するところで hub が使われるのでインストールしておく。 $ brew install hub Pull Request を送れるように、手元の Repository に https://github.com/Linuxbrew/brew/blob/master/docs/How-To-Open-a-Homebrew-Pull-Request.md#formulae-related-pull-request に従い Repository を fork し remote を指定しておきます。 $ cd

    imagemagick@6 formula のアップデート方法(備忘録) - @watson1978 の日記
    Watson
    Watson 2019/06/16
    備忘録。Homebrew の ImageMagick はバージョンをあげましたよ。
  • RMagick のメモリ使用量を改善した - @watson1978 の日記

    【追記 2019/06/17】パッチを含んだ RMagick v3.2.0 がリリースされました。 RMagick を使用すると馬鹿みたいにメモリ使用量があがると言われ続けてましたが、修正方法の見込みがたちようやく直しました。 何が起きていたか RubyKaigi 2019 で登壇した際にも話しましたが、RMagick が引き起こしていた多数のメモリリークは修正済み だったので、Ruby の GC が動作すると抱え込んでいる不要なメモリ領域は解放されていました。 問題は Ruby の GC がなかなか動作してくれないことにありました。例えば RMagick で画像用のオブジェクトを生成しても、サイズはたかだか 40 bytes しかありません。 require 'rmagick' require 'objspace' img = Magick::Image.new(1000, 1000)

    RMagick のメモリ使用量を改善した - @watson1978 の日記
    Watson
    Watson 2019/06/15
    日記( ˘ω˘)
  • RubyKaigi 2019 で登壇しました。 - @watson1978 の日記

    RubyKaigi 2019 CFP を書いた - @watson1978 の日記 で応募した CFP が無事採択されたので、RubyKaigi 2019 で登壇してきました。CFP を採択、運営に携わったスタッフの皆さんに感謝です。 CFP にはエモいことを書いたりしましたが、RMagick がどう改善されていてどういう方向性で進むのかがみなさん興味あるでしょうから、それを全力で話したつもりです。至らない点があったら申し訳ない。 スライドの英語を添削してくれた RMagick Team メンバーにも感謝です。 以下は自分の印象に残ったことを。 0 日目 「RubyKaigi 2019 前夜祭 - Ippudo Party!! -」に参加いたしました。ペパボさんで「大名エンジニアカレッジ」というのを始めるそうで、igaigaさんが大名に任命されてた。おめでとうございます(\( ⁰⊖⁰)/)

    RubyKaigi 2019 で登壇しました。 - @watson1978 の日記
    Watson
    Watson 2019/04/25
    雑に書いた
  • Xcode を使って Ruby C 拡張ライブラリをデバッグ - @watson1978 の日記

    RMagick のテストが通らないものを調べる際にどのようにデバッグしようかと思ったのですが、Debugging Ruby C Extensions in XCode - Emil Soman's blog に有益なことが書かれておりました。元の記事では Xcode 5.1 が使われていたので最新の Xcode のスクリーンショットを交えつつ手順を書いてみます。 この記事では Ruby C 拡張ライブラリの C 言語で書かれたコードをデバッグする手法を記述します。 デバッグ対象のコードを入手 $ git clone https://github.com/rmagick/rmagick.git Makefile を作成 Ruby C 拡張ライブラリの C 言語のコードは ext ディレクトリ配下にあります。RMagick では ext/RMagick となります。そこへ移動し Makefil

    Xcode を使って Ruby C 拡張ライブラリをデバッグ - @watson1978 の日記
    Watson
    Watson 2019/02/02
    デバッグがんばってます( ˘ω˘)
  • Ruby の Windows 環境 (備忘録) - @watson1978 の日記

    RMagick の ImageMagick 7 対応 作業をするにあたり Windows 環境でも簡単に使えるようにインストールまわりを昨年末くらいからやってました。備忘録がてら作業ログを残しておきます。 RubyWindows 環境は 2 種類存在しております。 RubyInstaller に代表される GCC を使用する MinGW 環境 ActiveScriptRuby のように Microsoft Visual Studio でビルドされた mswin 環境 MinGW 環境 RubyInstaller から Ruby+Devkit 2.6.0-1 をダウンロードしインストールします。 RubyInstaller なのですが途中でメンテナーが代わりパッケージング方法が変わったのか、Ruby+Devkit 2.4.5-1 とそれ以前のバージョンとで挙動が違っていました。Fix

    Ruby の Windows 環境 (備忘録) - @watson1978 の日記
    Watson
    Watson 2019/01/18
    Windows 環境が死ぬほど難しくて、もうやりたくない(・ω・)
  • RubyKaigi 2019 CFP を書いた - @watson1978 の日記

    RubyKaigi 2019 CFP に応募しました。以下は書いた内容です。 RMagick, migrate to ImageMagick 7 Abstract The currently RMagick has some problems about installing on macOS/Windows platform. I will talk about RMagick that it will be migrated from ImageMagick 6 to 7 and it will be solved the problems. Details RMagickは2003年ごろから開発されているImageMagickを利用した画像処理用のgemです。現在のImageMagickの最新バージョンは7.0.8なのですが、RMagickは依然としてImageMagick 6に依存

    RubyKaigi 2019 CFP を書いた - @watson1978 の日記
    Watson
    Watson 2019/01/14
  • バッチ処理の一部で 30 分以上かかっていた処理を 14 秒で終わるようにした話 - @watson1978 の日記

    Ubiregi Advent Calendar 2018 の 18 日目です。 ユビレジではたくさんのお客様の大量の POS データをお預かりしており、様々なバッチ処理も実行されています。今回は特定のケースでバッチ処理の一部が 30 分以上かかっていた処理を 14 秒で終わるようにした話について書きたいと思います。前回の Ruby 2.5 の SEGV と闘った話 - @watson1978 の日記 に引き続き DTrace を使った話になります。 はじめに ユビレジでは CSV ファイルでお客様が特定のデータをダウンロードしたりアップロードできる機能があります。CSV ファイルにエクスポートしたり、CSV ファイルから DB に取り込む処理を Worker を起動してバッチ処理しています。 大量のデータを保有しているアカウントと同量のデータを用意して手元の環境で試したところ時間がかかるこ

    バッチ処理の一部で 30 分以上かかっていた処理を 14 秒で終わるようにした話 - @watson1978 の日記
    Watson
    Watson 2018/12/18
    書いたよ( ˘ω˘)
  • Ruby 2.5 の SEGV と闘った話 - @watson1978 の日記

    Ubiregi Advent Calendar 2018 の 5 日目です。 同僚が「Ruby 2.5 が SEGV するんだけど」というので調べて見たときの話です。結論から言うと Ruby 2.6 では直っています。 クラッシュログ 同僚の変更内容を手元の macOS で動かすと確かに SEGV して以下の様なクラッシュログが出力されていました。 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGABRT) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY VM Regions Near 0: --> __TEXT 000

    Ruby 2.5 の SEGV と闘った話 - @watson1978 の日記
    Watson
    Watson 2018/12/05
    公開した( ˘ω˘)
  • RMagick の ImageMagick 7 対応の進捗 - @watson1978 の日記

    Ubiregi Advent Calendar 2018 の 2 日目です。 私は ユビレジ でスクラムチームに所属し Rails や iOS、React.js なコードを書いております。スクラムチームでは各個人に得手不得手がありながらもサーバやクライアントのコードを分け隔て無く面倒見ています。チームの簡単な紹介については、初日の ユビレジ開発チームのご紹介 をご覧ください。 2 週間のスプリント期間で機能開発しています。この期間内にはバグマッシュデーという「普段の開発では見落とされがちな軽微な不具合の修正や技術的な調査をしたり、メンバーが自由にプロダクトに貢献」できる日が用意されています。私はバグマッシュデーを活用しながら弊社でも利用している RMagick を ImageMagick 7 に対応する作業を細々とやっております。 出発点 大江戸Ruby会議 07 の発表題材として作業をは

    RMagick の ImageMagick 7 対応の進捗 - @watson1978 の日記
    Watson
    Watson 2018/12/02
    書いたよ( ˘ω˘)
  • numo-narray と malloc の不可解さ - @watson1978 の日記

    RubyKaigi 2018 が終わった後、Red Data Tools に参加しようかと思い numo-narray を見ていたりするのですが、ベンチマークが不可解な値を示して頭を悩ませています。 使用しているベンチマークは公式の Wiki にあった Tentative Benchmark を用いてます。 require 'numo/narray' N = 100000 M = 10000 a = Numo::DFloat.new(N).seq b = Numo::DFloat.new(N).seq M.times{|i| c = a + b } これを macOS で実行した結果が以下のようになります。 $ rbenv install 2.5.1 $ gem install numo-narray $ time ruby bench.rb ruby bench.rb 1.59s use

    numo-narray と malloc の不可解さ - @watson1978 の日記
    Watson
    Watson 2018/07/01
    日記( ˘ω˘)
  • 先週、Ruby 本体のカバレッジの取り方を学びました - @watson1978 の日記

    やり方を忘れる前に。 先週の土曜日に Cookpad Ruby Hack Challenge #4 カバレッジ特別回という meetup に参加してきました。 Ruby 体の C 言語で書かれた部分と Ruby で書かれたライブラリのカバレッジを取得する方法を勉強して実際にカバレッジを向上してみようという趣旨の集まりでした。 Ruby Hack Challenge #4 カバレッジ特別回 資料 from mametter 詳しいことは資料を見て頂ければ良いのですが、以下のようなコマンドを実行すると $ ./configure --enable-gcov $ make test-all COVERAGE=true $ make lcov lcov-c-out というディレクトリが生成され、そこにカバレッジの結果が出力されるとのことでした。あとはカバレッジが向上するようにテストコードを書くと

    先週、Ruby 本体のカバレッジの取り方を学びました - @watson1978 の日記
    Watson
    Watson 2018/06/29
    備忘録( ˘ω˘)
  • #RubyKaigi 2018 3日目に参加しました。 - @watson1978 の日記

    途中からぬけて、嫁と合流して仙台市内を観光したりしてました。 Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby 3年以上 TruffleRuby のことやっているそう CRuby と C extension のフルサポートをターゲッティング CRuby 2.5.1 より起動が速い (25ms vs 44 ms) 実行速度は3倍以上 OptCarrot CRuby 2.0 → 28 fps TruffleRuby with JIT → 200+ fps C extesion を動かすにはパッチが必要になったりする 改善はされそう TruffleRuby の JIT はすごいね 途中で定数になると、つぎつぎインライン展開していて、最終的に定数を返すだけになっていた CRuby の JIT だと runtime の C AP

    #RubyKaigi 2018 3日目に参加しました。 - @watson1978 の日記
    Watson
    Watson 2018/06/02
    最終日のメモです( ˘ω˘)
  • #RubyKaigi 2018 2日目に参加しました。 - @watson1978 の日記

    RubyKaigi 2018 2日目に参加してきました。お昼に弁当べたあと、仙台城跡を見に歩いて行ってきました(帰りはタクシーだったけど)。天気が良くて満足度が高かったです。 My way with Ruby My way with Ruby 活動されている内容のはなし。 フリーソフトウェアを使って Ruby でできることをたくさん増やす ライブラリのメンテナンス 130くらいメンテナンスしているライブラリがある 自分にとって必要だったから。 Web の feed RSS/ATOM RSS/ATOM の validation Ruby 2.6 以降はキーワード引数に対応 REXML REXML → Ruby Electric XML ライブラリ作者と Ruby を通じてやりとりすることになった コード懇親会しますよ Matz も参加しますよ 2010年からメンテナーになった Ruby

    #RubyKaigi 2018 2日目に参加しました。 - @watson1978 の日記
    Watson
    Watson 2018/06/02
    メモした内容( ˘ω˘)