ActiveRecord::Base storeの速度検証

Rails 3.2.0から追加された機能3.2.0リリースから1年近くたっていて、 今更な感じですが、最近使ってパフォーマンス的に痛い思いをしたので、 ちゃんと計測してみました。 機能/用途の説明は、こちらにおまかせ。 http://d.hatena.ne.jp/hichiriki/20120229…

ハッシュの値を宣言と同時に参照する方法

久々に更新しますが、かなり自分用のメモですorz ruby だと以下のように書くのをperlでどう書けばいいのか。。 # ruby # 無名ハッシュ(という呼び方でいいかわからないけど)を作成と同時に値を引っ張る {:k1 => 'v1', :k2 => 'v2'}[:k2] # ==> "v2" 一応、こ…

image_tagで付加される画像のタイムスタンプを、production環境でも画像ファイルが更新されたタイミングで更新されるようにする

image_tagで画像を表示した際に、srcの後ろに付くタイムスタンプは 基本的には File.mtime(image_path) なので、画像ファイルの最終更新時刻です。 image_tag 'rails.png' #=> <img src="/images/rails.png?1298610241" alt="Rails" /> なので、developement環境では画像ファイルをtouchしてあげたりすると、タイム…

jpmobileを使って、au/softbankでも、controller内で、ドコモ絵文字にマッピング済みのutf8値を得る方法

非常にわかりにくいタイトルですが、 ユーザがテキストフォームに絵文字を入れて送ってきたときの話しです。以下のようなコードがあった際に、 class HogeController < ApplicationController mobile_filter def hoge # 例えば、ドコモの「晴れ」に対応する…

主キー(primary key)の id を任意に指定して、createする

# ruby script/console # 普通に指定しても無視される >> User.create(:id => 100) => #<User id: 1, created_at: "2010-12-13 02:47:03", updated_at: "2010-12-13 02:47:03"> # ブロックで指定すると >> User.create do |u| ?> u.id = 100 >> end => #<User id: 100, created_at: "2010-12-13 02:48:22", updated_at: "2010-12-13 02:48:22"> 使う機…</user></user>

sqlite3-ruby の version が 1.2.x だと、select AS で名前を指定したときに integer 型のカラムのはずが string 型で取れてくる件

sqlite3-ruby : version 1.2.5 $ rails testapp1 $ cd testapp1 $ ruby script/generate model user $ rake db:migrate $ ruby script/console >> User.create => #<User id: 1, created_at: "2010-11-25 08:49:43", updated_at: "2010-11-25 08:49:43"> >> User.first.id.class => Fixnum >> User.find(:first, :select =>…</user>

パラメータ(params, query_paramters, path_parameters)取得方法メモ

params だとpathパラメータまで混じってたので、クエリパラメータだけ取る方法などを調べてみたメモ。 hoge コントローラに indexアクションが存在している状態で、 config/routes.rb は以下とします。 ActionController::Routing::Routes.draw do |map| map…

あるモデルの配列から、モデルの1要素を値とする配列を作るメモ

きれいな書き方を教えて頂いたので、メモ たとえば、id, name, age, job_id といったカラムからなるUserモデルがあったときに、 特定の job_id の User の id 配列が欲しいという際にどう書くか。 # たとえば User.find_all_by_job_id(1)でこんな配列が取れ…

session の保存方法(session_store)の違いによるパフォーマンス(処理速度)テスト

cookie (default), ActiveRecord (:active_record_store), memcached (:mem_cache_store) を比較した。なお、セッション新規作成時(record insert)と、既にあるセッションでアクセスする時も比較した。 環境 findテストと同じですが、 App Server Amazon EC2…

routes の(記述量と)記述箇所の違いによるパフォーマンス(処理速度)テスト

下のような config/routes.rb を用意して、 routes_check の map.connect をループの上に書いたときと、 ループの下(コメントアウトされてる箇所)に書いたときで比較した。 ActionController::Routing::Routes.draw do |map| map.connect '/routes_check', :…

find方法の違いによるパフォーマンス(処理速度)テスト

環境 前回のフィルタテストと同じですが、 App Server Amazon EC2: Large Instance Apache: デフォルト設定 Ruby: 1.8.7 Passenger RailsEnv: production RailsMaxPoolSize: 30 RailsPoolIdleTime: 1200 Rails: 2.3.8 Request 兼 DB Server Amazon EC2: Larg…

filterのパフォーマンステスト

before_filter, after_filter, around_filter を枚数重ねて、 どのくらいパフォーマンスに影響が出るのかをざっくり調べてみた 環境 App Server Amazon EC2: Large Instance Apache: デフォルト設定 Ruby: 1.8.7 Passenger RailsEnv: production RailsMaxPoo…

paperclip の保存ディレクトリ名あるいはファイル名をid連番ではなく、MD5とかSHA1のハッシュ値にするメモ

画像を扱う際のrailsプラグインpaperclip GitHub - thoughtbot/paperclip: Easy file attachment management for ActiveRecord基本的な使い方は、githubとか紹介ページを参照してもらうとして、 ここでは画像保存のディレクトリ名あるいはファイル名をid連番…

iPhone, Android(desire) ブラウザのhtml5対応状況

手元にあるスマートフォンのhtml5対応状況を、http://html5test.com/ で確認したのでメモ。 iphone4 (4.0.2): Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_2 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A400 Safar…

google の検索結果で、文字切りされているタイトルをフル表示する Greasemonkeyスクリプト

需要があるかは謎ですが、title属性にもフルのタイトルが入ってなくて微妙だと思ったので。 google の検索結果で、タイトルが長いと途中で文字切りされている場合があります。 例えば、このブログの記事だとこれとか。 こういう文字切りをしている場合は、リ…

iPhone Safariだとaudio/videoタグのautoplay, autobuffer属性が効かない

Resources - Safari - Apple Developer の User Control of Downloads Over Cellular Networks」の部分 In Safari on iPhone OS (for all devices, including iPad), where the user may be on a cellular network and be charged per data unit, autobuffer…

(jpmobile の) mobile_filter hankaku => true は controller.response.body が freeze されてるとエラーになる

そもそも response.body が freeze された後に、文字変換すんなよというのは置いておいて。。。例えば、 class HogeController < ApplicationController mobile_filter :hankaku => true around_filter :my_around_filter # mobile_filter は around_filter …

before_filter, after_filter, around_filter, prepend_before_filter, prepend_after_filter, prepend_filter の順番整理メモ

before_filter before_filter :b1, :b2 # b1 --> b2 --> action before_filter :b1 before_filter :b2 # b1 --> b2 --> action before_filter + prepend_before_filter before_filter :b1, :b2 prepend_before_filter :b3 # b3 --> b1 --> b2 --> action bef…

jpmobile のmobile_filter を部分的に無効にする(強引な方法)メモ

使える状況が限られているし、jpmobile自体をいじるし、グローバル変数を汚すしで、 極悪な解だが、一応メモしておく。 たとえば下のように、親コントローラに mobile_filter を記述し、それを継承した子コントローラがいくつかあるとする # 親 class Mobile…

Togetter で「RT」以降の文字を薄くするGreasemonkeyスクリプト

タイトル通りですが、RT/QT という文字列以降を薄く(#999999)するスクリプトを作りました。 下記リンク先のInstallボタンからインストールしてください。 RT obscure for Togetter for Greasemonkey こんな感じです。 【2010/07/04 03:08 追記】 Toggeter --…

JSON.parse に渡せるJSON文字列が厳密すぎて使いにくい件

JSON文字列をオブジェクトに変換してくれる JSON.parse() を使ってみたが、 かなり使いにくく感じた。 というのも、 JSON.parse("{hoge: 1}"); // error これがSyntaxErrorになる*1 JSON.stringify() が厳密なJSON文字列をくれるらしいので、 どう書けばよか…

model のインスタンスを hash化する

使う機会はあまり無い気もするが、メモしておく*1 結論から書くと、モデルインスタンス#attributes とするだけ。 model_instance = Model.new attributes_hash = model_instance.attributes # {"attr1" => "val1", "attr2" => "val2", ...} p attributes_has…

ActiveSalesforce を使ってみたメモ

http://activesfdc.rubyforge.org/ を少し使う機会があったので、そのメモを。 ちなみに、Salesforce の知識はほぼ無い状態で触ってますのであしからず・・・。 なお、rails のバージョンは 2.3.5 です。 Setup と HelloWorld みたいなもの 1. install 公式…

html5 の File API を使って、ローカルのテキストファイルを読み込んでみる

とっても簡単です(Firefox 3.6 で動作を確認)。 html fileのアップロードフォームにonchangeを仕込んでおきます。あとは、読み込んだファイルの内容を表示するtextareaを用意。 <html> <head> <meta charset="utf-8"> </head> <body> <input type="file" onchange="read(this)" /> <hr /> <textarea id="text" cols="80" rows="20" wrap="off"></textarea> </body> </html>…

html5の File API を使って、アップロード無しで画像プレビュー

画像をプレビューするために、サーバへアップロードする必要がなくなります*1。 html fileのアップロードフォームにonchangeを仕込んでおきます。 あとは、プレビュー表示用の要素だけ準備。 <html> <head> <meta charset="utf-8"> </head> <body> <form> <input type="file" name="file" onchange="preview(this)" /> </form> <hr /> <b>preview:</b><br /> <div id="preview_field"></div></hr></body></html>

html5で複数ファイルアップロード&保存

とても簡単。 html <html> <head> <meta charset="utf-8"> </head> <body> <form action="save.cgi" method="POST" enctype="multipart/form-data"> <input type="file" name="files" multiple /> <input type="submit" value="submit" /> </form> </body> </html> input type="file" で multiple属性を追加するだけ。 save.…

オブジェクトのプロパティの存在確認方法メモ

1.単純に obj.property で確認すると・・・ var obj = {}; if (obj.hoge) alert('not exist'); obj.hoge = false; if (obj.hoge) alert('exist false'); obj.hoge = null; if (obj.hoge) alert('exist null'); obj.hoge = undefined; if (obj.hoge) alert(…

public配下の任意の静的ファイルへのURLを作成するメモ

ローカルでは、http://localhost:3000/ で開発をしているが、 本番サーバで動かすときは、http://domain/prefix/ で動かしたい場合がある。 viewでリンクなどのURLを直書きしていると、相対パスなら大丈夫かもしれないが、 絶対パスは prefix があるせいで、…

Stringのおもしろメソッド

おもしろというか、単に自分が知らなかっただけかもしれませんが。 'hoge'.big() // '<big>hoge</big>' 'hoge'.small() // '<small>hoge</small>' 'hoge'.bold() // '<b>hoge</b>' 'hoge'.italics() // '<i>hoge</i>' 'hoge'.blink() // '<blink>hoge</blink>' 'hoge'.strike() // '<strike>hoge</strike>' 'hoge'.sub() // '<sub>hoge</sub>' 'ho…

canvasに描いた絵(画像)をサーバに保存

canvasに描かれたデータを取得するには、canvas.toDataURL() を使います。 toDataURL()で得られるのは、base64エンコードされた画像情報なので、 それをサーバに送って、base64デコードして保存という流れです。 toDataURL()して、そのデータをPOSTする部分…