読者です 読者をやめる 読者になる 読者になる

CubicLouve

Spring_MTの技術ブログです。https://github.com/SpringMT (http://spring-mt.tumblr.com/ からの移転)

ruby

特定のJSONの圧縮効率を調べてみる(snappy、gzip、xz、lz4、zstd)

snappyが入っているのは察してほしい データの詳細は後で書く。(これも察して欲しい。だいぶ偏ったデータではある) これから詳細をちゃんと書くが、一旦ここにおく マシンスペック iMac使っています。 % system_profiler SPHardwareDataType Hardware: Hardw…

gdbを使ってRuby 2.4.0のライブプロセスの情報を取得してみる

Ruby 2.4.0 リリース 2.4.0がリリースされたので、 spring-mt.hatenablog.com と同じことをやってみようかと思います。 準備 AWSのamazon Linux上で試しています。 # cat /etc/system-release Amazon Linux AMI release 2016.09 gccは 4.8.3、 gdbは7.6.1を…

gdbを使ってRuby(2.3.3)のライブプロセスの情報を取得する

Rubyのプロセスに対して、非破壊的に中をのぞいてみたいことが時々ありますよね???(詰まっているプロセスとか) 今回、gdbを使ってライブプロセスにアタッチして調べてみました。 準備 今回はAWSのamazon Linux上で試しています。 # cat /etc/system-relea…

SideCIの自動rubocop PRが羨ましかったので、自分で作った

blog-ja.sideci.com これを見て。 SideCIはGitHub Enterpriseに対応していない(2016/02/13現在)ので、自分で作った。 github.com サーバー上げて、githubのweb hookに仕込むだけでPRを送ったら、自動的にrubocopで自動修正した内容を別PRにして送ってくれま…

workerの枯渇状況が分かるrack-server_statusというgemを書いています

unicornのwokerのbusy数とidle数の比率がわからなくて、うっかりworkerが枯渇して大変なことになったので、workerの状況を返すエンドポイントを追加するrackミドルウェアを書いています。 SpringMT/rack-server_statusgithub.com ぶっちゃけkazeburoさんのPl…

sinatraで設定したパス一覧を取得する

メモ こんな感じでスクリプトを書いた。 require 'rack' require 'sinatra' class Sinatra::Base private class << self attr_reader :original_routes # なぜかsuperが呼べない... def route(verb, path, options = {}, &block) @original_routes ||= {} (@…

railsで特定のモデルに対してbelongs_toで参照先を設定しているモデルを取り出す

まあ、いろいろ調べる必要がありまして。。。 ざっくりとこんな感じでとれた。 # production環境では要らないが、development環境では必要かと Dir.glob(File.expand_path('./app/models/*.rb', Rails.root)).each do |f| require f end # 定数を全部取得 co…

rubyで局所的にパッチを当てる方法を模索中

下記のようなコードで、Cクラスの中だけで何とかAクラスに対するパッチを当てたい。 class A def self.foo p 'foo' end def bar p 'bar' end end module ExtendFoo refine A.singleton_class do def foo p 'extend foo' end end refine A do def bar p 'exte…

railsアプリでstackprofを使ってボトルネックを探す + JSON::Schema(2.2.1)の高速化

railsアプリが遅いって言われたので、久しぶりにrubyでisuconしてみました。 railsアプリでstackprofを使ったプロファイリング まず、自分がいつもやってる方法なのですが、config.ruにstackprofの設定を仕込みます。 stackprofはrackミドルウェアとして差し…

Webサイトに必要なfaviconが21個になっていたらしいのでrack-favicon_allっての書いた

Webサイトに必要なfaviconが21個になっていた - IT探検記 Webサイトに必要なfaviconが21個になっていた - IT探検記 どうもWebサイトに必要なfaviconが21個もあるらしい。 で@bayashiが 増殖中の favicon を Plack::Middleware ひとつで配信する - @bayashi D…

Faradayでnet/httpのアダプターを使っている場合のHTTPリクエスト/レスポンスを見る

忘れそうなのでメモっておく。 require 'faraday' module FaradayDebug def net_http_connection(env) http = super http.set_debug_output $stderr http end end module Faraday class Adapter class NetHttp prepend FaradayDebug end end end これを書い…

HTMを試す

rubykaigi一日目の発表でHTMを使ったパフォーマンス向上の試みが発表されていたので試してみました。 RubyKaigi 2014 | Eliminating Giant VM Lock in Ruby through Hardware Transactional Memory RubyKaigi 2014 | Eliminating Giant VM Lock in Ruby thro…

stackprofを使ってみる

2014/09/21 FlameGraphの出し方を追記しました rubykaigi 2014終わりましたね。 スタッフの皆様、本当にお疲れ様でした。 で、3日目のkeynoteを聞いて、stackprofは使いこなせんとあかんものやと思って、早速試してみました。 RubyKaigi 2014 | Ruby 2.1 in …

Ruby vs Rubinius vs GobiesVM

I benchmark GobiesVM compared with Ruby and rubinius. Rubykaigi2014で紹介されていたGobiesVMを使って、ベンチ取ってみた。 brucehsu/GobiesVM brucehsu/GobiesVM · GitHub Machine Specs % system_profiler SPHardwareDataType Hardware: Hardware Over…

rubykaigi2014 一日目(途中までのメモ)

メモ程度に RubyKaigi 2014 | Building the Ruby interpreter -- What is easy and what is difficult? Ruby Interpreterの責務はクオリティを高めることと考えている。 信頼性、高パフォーマンス、消費リソースが少ない、互換性、拡張性 これらの品質はそれ…

TSXのチェック

rubykaigi2014一日目のEliminating Giant VM Lock in Ruby through Hardware Transactional Memoryを聞いて、とりあえずコンパイルだけでもしておこうかと思って、TSXに対応しているか調べてみた。 % sysctl machdep.cpu.brand_string machdep.cpu.brand_str…

Rails4のtransactionでハマった <- これは私の間違いでした

申し訳ありません この記事完全に自分の間違いでした。 まず、自分のrailsアプリでは、、もろもろの深淵な理由で、モデルを作るときにActiveRecord::Baseを直接継承せずに、全てのモデルに共通で使うモデルを再定義しています。 なぜこんな事をしているかと…

core dump をとった後中身を見てみた(gdbruby編)

core dumpしても中身みないとしょうもないので、中身の見方をざっくりメモ。 rubyを使ってる場合は、gdbrubyを使うのがオススメです(結局gdbを使うことになるのですが。。。) 環境は、Centos6.2です。 まずはgdbrubyを使ってbacktraceとかをざっくりとみてみ…

rails 4.1.0にあげたらJSON::ParserErrorになった問題

rails 4.1.0に上げてみました。 Gemfileを書いて、 bundle update して、 bundle exec rake rails:update でひたすらYを選択しています。 ちょこちょこ直して、立ち上げてみると、 JSON::ParserError - 795: unexpected token at I"session_id: とかでた。。…

capistrano 3.1.0でハマったこと

capistranoのversionを3.1.0に上げて、cap deployしたら、unicornが再起動されなくて困った。。。 で、Changelogみてみたら、 deploy:restart task is no longer run by default. って書いてあった。。。。 Changelogにこれを見て設定しろやーって書いてあっ…

プロファイラーについて

この記事はパーフェクトRuby Advent Calendar 2013 - Adventar の21日目です。 前の日のエントリーは パーフェクトRuby の次に読む本 です。 パーフェクトRuby Advent Calendar 2013 - Adventar 2013/12/24 Array#<<の結果が出ない件追記しました パーフェク…

gdbを使ってみる

gdbをはっきり説明せよと言われてもわからんが使ってみる。 デバッグシンボル付きでrubyをビルドしておく rbenv + ruby-buildを使ってrubyを入れていれば、デフォルトでデバッグシンボル付きでビルドしてくれている。 rubyを読み込む rbenvを使ってると、gdb…