Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
まあ、タイトルは若干釣りで、特定のユースケースにおいて3割程度の高速化が見込める、というだけです。 joker1007/curl_escape: This gem provides fast URL escape by libcurl. 以下、実装経緯。 Railsのurl_forを辿っていくと、最終的にクエリパラメーターとして渡したハッシュやらArrayやらに対して、Object#to_queryを発行します。 このObject#to_queryの実装は、ほぼCGI.escapeの実行です。 やたらとlink_toの数が多くて、クエリパラメーターをそれなりに渡している、というページを表示しようとすると、割とこの処理時間が馬鹿にならない感じになってきます。 ということで、CGI.escapeを早くすれば、ちょっとはマシになるんじゃないかと思いました。 しかし、CGI.escapeの実装をR
Grape は Ruby で API を書くのに便利なフレームワークです。 Grape 自体については fakestarbaby 氏がすでにすてきなエントリを書いてくださっています。 Grape | API生成マイクロフレームワーク #Rails #Gems #Ruby #grape #api_builders - Qiita ここではどうやってテストを書くのかということについて書いてみたいと思います。 想定 RSpec の受け入れテストの request_spec を使うよ API は JSON を返すよ API 用のサブドメイン(api.foobar.com)を切っているよ JSON のテストは json_expressions を使うよ(参考) OAuth 2.0 の Provider になって Web Application Flow とかで認証しちゃったり モックは Factor
1. ベンチマーカー プロファイルすると、プロファイル自体に時間がかかるので正しく速度が測れない。そのためベンチマーカーも使うと良い。 ただし、ベンチマーカーはどこが遅いか等の解決の糸口は教えてくれない。 benchmark-ips 2. プロファイラ 実際に速度のボトルネックを見つける際に使う。 stackprof どのメソッドに多くの時間を費やしているかがわかる これを入れても速度にさほど影響がない rblineprof 行ごとにかかっている時間を出してくれる peek-rblineprofを使うとブラウザで結果が見れる ただしプロファイリングに結構時間がかかる (3. NewRelic) 実際、これらのことを手元でやらなくても、特にstackprof的なことや、どこのページやどのSQLクエリが特に遅いかなどは、 New Relic がやってくれます。お金を払うと結構詳細な部分も見れま
背景 macでmecab-rubyをビルドせずにインストールするでは、mecabの基本的な言語バインディングを用いました。 このバインディングはSWIGを用いてMeCabと密に結合しているため、mecab gemのバージョンとMeCabのバージョンを合わせる必要がありました。 今回はmecab gem以外の選択肢を使ってみます。 納豆 今回はrubyからmecabを利用するためにnattoというgemを使用します。 nattoは、FFI(foreign function interface:外部関数インタフェース)を使用して、RubyとMeCabを繋ぐgemです。 nattoはC言語拡張ではないためコンパイルは必要ありません。 そのためCRuby(MRI / YARV)でもJRuby(JVM)でも実行できる利点があります。 (jruby 1.7.4 (1.9.3p392) 2013-05-
はじめに MeCab の標準の Ruby 用バインディングを利用してテキスト解析を行っていたら、 hoge.rb:XX: [BUG] Segmentation fault at 0x00123456789abc のようなエラーが発生した。 発生したタイミングは次の通り。 ・処理が一定の負荷を超えた場合、毎回そこで落ちる。 ・軽い処理の場合は落ちない。 落ちてた部分は下記の行。 node = MeCab::Tagger.new.parseToNode(string) Python で同様の事例 以前 Python で意図しないガベージコレクションが実行されることにより、 似たような事例が発生した事があった。 (この件は次のサイトが詳しくまとめてくれている Shogo's Blog: MeCabをPythonから使う注意点とか) 対処 Ruby でも同じことが起きてるんじゃないかと思ったので、
定期的にプログラムで生成するような、サイズも少し大きめのファイルを外部のメンバーとやり取りをする場合、AWSのS3のバケットを一時ファイル置き場にすることがあります。 がっ!日々自動アップロードされるファイルによってS3上のファイル数・容量がモリモリ成長し、ボディーブローのようにお財布を削っていくのに対し、古いファイルを削除することをすっかり忘れちゃうことってありますよね。セキュリティ的にも古いファイルを置きっぱにするのはよろしくありません。 そんな事態を防ぐため、S3にファイルをアップして一定期間後に自動的に削除するメソッドを作りましたので、S3破産する前に使ってみてくださいませ。 準備:aws-sdkに、一定期間後にファイル自動削除するメソッドを追加 RubyのAWS操作用標準Gemであるaws-sdkのAws::S3::Clientクラスにdelete_expired_objects
なぜTransactionが必要なのか Transationの目的は、あるいコードブロックにあるSQL文の変更を、全部成功することを守るための存在である。Transactionにより、データの統一性を保ことができる。銀行などの受け入れと引き出しの処理には必要でしょう。二つの処理の中一つが失敗すると、コードブロークにあるSQL処理を全部ロールバックされるのが、Transactionの特徴である。 Transationのロールバックが発火条件 Railsでは、ロールバックが発火するには、「例外」が必要である。これがTransactionを使うときのもっとも重要なことである。 例えば、Railsでは #update_attributeは例外を発火せずに、falseに返すとなる。そのため、#update_attributeを使うには、結果を見て、例外をスローする必要がある。Railsではびっくりマ
kuromojiとは Kuromojiはatilika社が開発したJavaで作成されたオープンソースの日本語形態素解析エンジンです。 Kuromojiは下記の機能を持っています。 複合語の分割 品詞のタグ付け 見出し化 漢字の読み方を抽出 検索用の設計(複数の単語分割モード) KuromojiのライセンスはApache v2ライセンスなので、商用でも利用できそうです。 準備 ソースコードはgithubにあるのでビルドしても良いのですが、zipでもダウンロードする事が出来ます。 今回はプロジェクトディレクトリ以下に解凍し、呼び出します。 kuromojiはjavaで作成されていますが、今回はrubyから使うことが目的なので、rjbを使います。 rjbはJNI (Java Native Interface) を利用してJava VMを操作するライブラリです。 具体的には、Rubyプロセス内にJ
はじめに まずどうやってひな形を作るか。ですがこれは bundle gem という、bundlerがデフォルトで提供しているコマンドを利用するのが一番簡単です。 今回はhello_worldという名前でgemを作るので、bundle gem hello_worldとします。 実行すると、このような形でひな形が生成されます。これを使ってgemを開発していくことになります。 gemspec Gemの作成でまず大事になるのが gemの名前.gemspec というファイルです。例えば上記で生成したひな形だと # coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'hello_world/version' Ge
はじめに まずどうやってひな形を作るか。ですがこれは bundle gem という、bundlerがデフォルトで提供しているコマンドを利用するのが一番簡単です。 今回はhello_worldという名前でgemを作るので、bundle gem hello_worldとします。 実行すると、このような形でひな形が生成されます。これを使ってgemを開発していくことになります。 gemspec Gemの作成でまず大事になるのが gemの名前.gemspec というファイルです。例えば上記で生成したひな形だと # coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'hello_world/version' Ge
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く