タグ

ブックマーク / secondlife.hatenablog.jp (18)

  • 例えば GC を止める・Ruby ウェブアプリケーションの高速化 - 2nd life (移転しました)

    最近クックパッドでは、アプリケーションサーバの大半が Rails 2.3 から Rails 3 に置き換わったのですが*1、リリース前のベンチマークの時点ではあまりパフォーマンスが出ず四苦八苦していました。具体的には Rails 2.3 の時と比べ MRI 1.8.7 だとレスポンスタムが200%ぐらい遅い結果でした。Rails 3 になって実装が Merb core を取り入れ疎結合で綺麗になった反面、より多くのオブジェクトと・メモリを利用する様になった影響かと思います。 そこで Ruby インタプリタの変更*2を行い検証をしたところ MRI 1.8.7 (Rails 2.3と比べ) 約200%遅い MRI 1.8.7 -> Ruby Enterprise Edition 1.8.7 2011.03 (tcmalloc 無効) 約180%低速 MRI 1.8.7 -> Ruby Ente

    例えば GC を止める・Ruby ウェブアプリケーションの高速化 - 2nd life (移転しました)
    ukstudio
    ukstudio 2011/10/06
    GCさん...
  • さいきんの Rails サービスを高速化をしてみた - 2nd life (移転しました)

    先日のももクロハッカソンで出会った wantedly を作ってる仲さんが と言ってたので、面白そうなので wantedly を速くしてみました。 wantedly ちなみにデータが数百万オーダーもなさそうなのに、どのページもログインすると2-5秒ぐらいかかっていたので、確実に速くできそうだなぁという感覚はやる前からありました。 アプリケーションサイドのチューニング 初心者*1にありがちな問題として SQL に適切にインデックス張ってない キャッシュすべき場所をキャッシュしていない 無駄なデータを引きすぎてる ことがよくあります。ので順に実装を見ていきました。 SQLに適切なインデックスを張ってない 張ってありました!びっくり!\(^o^)/ キャッシュすべき場所をキャッシュしていない Facebook API を利用したアプリケーションなんですが、ユーザのデータの取得を毎回馬鹿正直に HT

    さいきんの Rails サービスを高速化をしてみた - 2nd life (移転しました)
    ukstudio
    ukstudio 2011/09/20
  • rubygems-test で rubygems インストール時にテストを行う - 2nd life (移転しました)

    Ruby のパッケージングマネージャの rubygems と Perl の CPAN と比較して、rubygems の残念なところの一つに『インストール時にテストを行わない』ことが挙げられます。rubygems は gem install package で一発で入れられる事は便利なんですが、インストール時にテストが行われないため、実際にその環境で正しい挙動をするとは限りません。また、rubygems で入れたパッケージのテスト方法もコマンド一発で簡単にできるわけではないのでめんどくさかったりします。なにより問題なのが、インストール時にテストが行われないため『開発者がテストをさぼりがち』になってしまいます*1。 最近 rubygems でも CPAN と同じように、インストール時にテスト可能なパッケージはテストを行い、失敗したら基的にインストールできない(設定で変えられます)仕組みを持っ

    rubygems-test で rubygems インストール時にテストを行う - 2nd life (移転しました)
    ukstudio
    ukstudio 2011/04/13
  • 大江戸Ruby会議01 高速なテストサイクルを回すには - 2nd life (移転しました)

    日大江戸*1で行われた大江戸Ruby会議01で、高速なテストサイクルを回すにはという内容で発表してきました。 大江戸Ruby会議01 高速なテストサイクルを回すには View more presentations from hotchpotch テストを速くするには二パターンあり、一つは単体実行時の速度・フィードバックの高速化、もう一つはすべてのテスト実行時の高速化があると思っていて、それらについての話です。ぎゅっとまとめると、前半の単体実行時の速度・フィードバック高速化には spork / prefetch-rspec / autotest / watchr を使おうという話と、後半は REE / parallel_tests による高速化・並列実行、remote spec によるリモートマシンでの分散テストについての話です。 特にオレオレプロジェクトの prefetch-rspec

    大江戸Ruby会議01 高速なテストサイクルを回すには - 2nd life (移転しました)
    ukstudio
    ukstudio 2011/04/12
    remote specすごい良かったです! prefetch-rspecも使ってみます
  • watchr - ファイルに変更があったら何かする / もしくはオサーンについて - 2nd life (移転しました)

    みなさま、いかがお過ごしでしょうか。以前人のことをオサーンオサーン云いまくっていたけどその当時のオサーン年齢のもうすぐ三十路になります secondlife ですこんばんわ。言葉のしっぺ返しが痛い今日この頃です。 さて、若かりし頃には合わなかったけど今使ってみるとしっくり来る物もありますね。その一つが AutoTest(ZenTest) です。ファイルが更新したらこける / SyntaxError になると解っていてもテストが走りFFF、自分のテストサイクルでテストが実行できないのが我慢できませんでしたが、久しぶりに使ってみるとそんなのは気にならず、いちいちテスト実行しなくてよくなってとても気持ちがよい感じです。 しかしながら ZenTest に含まれる AutoTest はレールが敷かれているテスト環境では利用しやすいけど、ちょっと道を踏み外すと結構テストを実行するのがめんどくさいです。

    watchr - ファイルに変更があったら何かする / もしくはオサーンについて - 2nd life (移転しました)
    ukstudio
    ukstudio 2011/01/24
  • はてなモノリス開発話 - 川o・-・)<2nd life

    日、はてなモノリスという Android / iPhone3GS 向けの簡単にモノのバーコードをスキャンして投稿(Twitter にも同時投稿できます)というサービスを作りました。是非対応端末をお使いの方は利用してみてくださいね。概要だけきいてもうーん、という感じですが実際に使ってみると簡単にモノのバーコードが認識できお気楽に投稿できるのは楽しいです! http://mono.hatena.ne.jp/ 約一ヶ月ほど専念して開発したんですが、その話でも。 開発の経緯 最近僕ははてなブックマークのディレクターと、はてなAndroid 開発周りを担当しています。とあるミーティングで今後 Android をどう展開していくか、という話を id:jkondo, id:naoya, id:cho45 と僕で行いました。Android の開発おもしろーい、と個人的に強く思ってることもあり And

    はてなモノリス開発話 - 川o・-・)<2nd life
    ukstudio
    ukstudio 2010/04/06
    cho45さんかっけーっす
  • デブサミ2009 はてなの開発戦略 - 2nd life (移転しました)

    先日のデブサミ2009で発表した、はてなの開発戦略 (すごい名前だ…) のプレゼン資料を公開します。前半は主に git の話で、後半ははてなブックマークリニューアルの、Perl 層の開発をどんな感じで行っていったか、という話です。 デブサミ2009 はてなの開発戦略View more presentations from hotchpotch. はてなの git では、中央のマスタレポジトリサーバがあって、そこから各自 clone / fetch して開発を行ってるので、完全に github のような分散のメリットを生かしているわけではありません。 しかし完全に分散を生かさずとも、git に移行したメリットは十分にあって、資料の中でもふれていますが、やはり一番便利なのが git のブランチ機能です。もうこれ無しでの開発は考えられないなぁ、ぐらいで、さくっとブランチ切って開発、ブランチの切り

    デブサミ2009 はてなの開発戦略 - 2nd life (移転しました)
  • gist.github.com で GreaseMonkey Script を管理しよう - 川o・-・)<2nd life

    http://gist.github.com/ 最近 github にまた新しいサービス、gistが誕生しました。これはよくあるソースコードを web にペーストして参照できるサービスの git 版、と云ったところです。 gist の良いところは、まず git を知らなくても使えるところが上げられます。普通のペーストサービスと同じで、ソースコードを適当にはっつければOKで簡単です。編集ももちろん web 上からでき、インターフェイスから編集を行うと、git の履歴としてサーバサイドに保存されます。また、匿名による作成・編集も可能です。(匿名による編集は cookie が切れるまでっぽいですが) そして、git と同じく、github にログインしてれば、gist で誰かが貼り付けたソースコードを fork でき、自分の権限の元編集操作が可能になります。ので、誰かが貼り付けたコードを for

    gist.github.com で GreaseMonkey Script を管理しよう - 川o・-・)<2nd life
  • 2008-07-19 - 川o・-・)<2nd life Uffy externalinterface external interface

    日の OSC Kansaia 2008 で開かれた Shibuya.js in Kyoto で、JavaScript と ActionScript の連携について話しました。関西のカンファレンスでの発表は初めてでしたが、楽しかったです。スピーカの皆さん、参加された皆さん、どうもありがとうございましたー。 以下発表資料です。 JS <-> AS JavaScript と ActionScript の連携 自己紹介 はてなエンジニア 舘野 祐一 (id:secondlife) http://tako3.com/http://rails2u.com/ Ruby, ActionScript3, JavaScript JS と AS JS だけでよくない? AS だけでよくない? 相互に補完しあえる関係 両方使えると、様々なメリットが JavaScript -> ActionScript cros

    2008-07-19 - 川o・-・)<2nd life Uffy externalinterface external interface
  • vim の text-object をより便利に使えるプラグイン - surround.vim - 2nd life (移転しました)

    http://www.vim.org/scripts/script.php?script_id=1697 vim7 から追加された text-object は大変便利で、今や手放せなくなっています。その text-object をより便利に使えるプラグイン、surround.vim が便利すぎるので紹介します。 いままで、text-object では (以下では、コードの『*』の位置に現在カーソルがあると考えてください。) foo 'b*ar' bazの位置にカーソルがあるとき、i' でシングルクオーテーションの中身を選択できたり、a' でシングルクオート含む部分を選択できました。しかし『'』そのものを削除したり、置換したりはできなく、ちょっと不便でした。しかし、surround.vim では ds cs ys vs それぞれにコマンドを割り当てて、様々なことができるようになってます。たと

    vim の text-object をより便利に使えるプラグイン - surround.vim - 2nd life (移転しました)
    ukstudio
    ukstudio 2008/06/27
  • 昔話 - 川o・-・)<2nd life

    昔話でもしようか。 自分は6年前はプログラミングが全くできなかった。プログラム書ける人は一部の天才だと思っていた。プログラミングができないことに劣等感を覚えた自分は、Linux が使えると格好いいんじゃと思い、Debian で自宅サーバを構築し、アンテナ*1や tDiary で日記サイトを運営したり始めた。 そんなとき、id:antipop と出会った*2。島に住んで、特にITもなにも関係ない仕事をしていた彼が、全く知識が無いところから勉強し Linux で自宅サーバを動かし、php + postgres で blog っぽいシステムを日々バージョンアップさせ、Button Maker for Japanese などのツールを作っていくのを blog 経由でリアルタイムで見ていて、プログラミングもやれば誰でもできるんじゃないかと感じ、自分の日記ツールが tDiary ということもあって、R

    昔話 - 川o・-・)<2nd life
  • TDD で作る RakuAPI ライブラリ - 2nd life (移転しました)

    RakuAPI - 楽天市場 非公式ウェブサービス という楽天の非公式 API のライブラリを作るのが流行みたいなので作ってみました。ただそれだけでは面白くないので、最近自分が TDD でライブラリ作るときの方法も軽くご紹介します。 まずはインターフェイスの構想 何はともあれ、どんなインターフェイスを定義して、どんな結果が返ってくるのかがイメージできないとライブラリは作りにくいです。というわけでざっくり最初に構想を練ります。 RakuAPI の場合は WebAPI がシンプルに使えて良い感じなので、構想を練るのに考え込む、というのはありませんでした。 そんなんで、RakuAPI.new でインスタンスを取得して、search メソッドで第一引数に検索文字列、第二引数はオプションでジャンルやプライスを渡せるように、結果は配列にStruct が格納されてる感じにしよう。と考えました。 テストを

    TDD で作る RakuAPI ライブラリ - 2nd life (移転しました)
  • rails.vim まとめ - 2nd life (移転しました)

    id:higepon に『rails.el も rails.vim も知らなかったよ!もっと早く知ってたら生産性が三倍になっていたのに!(一部誇張』と云われたので、rails.vim について ひげぽん OSとか作っちゃうかMona- - rails.el まとめ に沿った形で簡単に紹介したいと思います。 インストール 通常のインストール http://www.vim.org/scripts/script.php?script_id=1567 から rails.zip をダウンロードし、~/.vim/ 以下に展開します svn からのインストール vba (vim のパッケージングシステム)を使うので vim7 以上限定の方法ですが svn co http://svn.tpope.net/rails/vim/railsvim/ railsvim cd railsvim rake rails

    rails.vim まとめ - 2nd life (移転しました)
  • RubyのHTML HelpのCSS - 2nd life (移転しました)

    http://elbereth-hp.hp.infoseek.co.jp/ruby.html で配布しているRubyHTML HelpのCSSを変更して再コンパイルしてみた。デフォルトのデザイン*1が好みじゃなくて、以前も変更して使っていたんだけど、再配布しても問題ないCSSにして配布る! http://rails2u.com/tmp/ruby_htmlhelp/ruby_htmlhelp.png http://rails2u.com/tmp/ruby_htmlhelp/ruby-refm-rdp-1.8.1-ja-htmlhelp_css.zip http://rails2u.com/tmp/ruby_htmlhelp/ruby-refm-rdp-1.9.0-ja-htmlhelp_css.zip ( 最新版に更新 ) フォントサイズ小さめ、青メインの配色で。見た目重要! RDE のプ

    RubyのHTML HelpのCSS - 2nd life (移転しました)
  • ruby のスクレイピングツールキット scrAPI - 川o・-・)<2nd life

    http://blog.labnotes.org/category/scrapi/ rubyスクレイピングして web の情報を取得するのには、今まで正規表現か xpath でやってたので、わりと面倒でした。で、ふと scrAPI というスクレイピングツールキットを知ったのですが、これがかなり便利そう。 このツールキットを使うと、CSS3 なセレクタを記述することで、要素を取得することができます。たとえばとあるサイトのリンクを全部取得したければ、 require 'rubygems' require 'scrapi' require 'open-uri' require 'nkf' require 'pp' $KCODE = 'u' links = Scraper.define do process "a[href]", "urls[]"=>"@href" result :urls e

    ruby のスクレイピングツールキット scrAPI - 川o・-・)<2nd life
  • 川o・-・)<2nd life - Rails における信頼とは

    アンカテ(Uncategorizable Blog) - Rails的世界の「安心」と「信頼」の力学 自分の場合 Rails における信頼とは DHH (Rails 作者) のセンスだと思ってます。Rails はマーケティング、設計思想、共に成功したと言えますが、そのうちエンジニアの自分が興味があるのは設計思想なわけで。 最初 Rails に出会ったときは、日では一年遅れでやってきた「Rails って簡単に素早く Web アプリケーションが作れるよね」といったスピード感に Rails ってばスゲー、と思いましたが今は違います。ここら辺は結局フレームワークに慣れれば、他のフレームワークでも大概は出だしのスピード感をつけることができます*1。 実際 Rails を使っていても、周りのその他たくさんの開発者と技術力の差をつけるには、結局 Rails のソースを読み、ネット上でかなりの情報が流れ

    川o・-・)<2nd life - Rails における信頼とは
  • 川o・-・)<2nd life - RubyGems パッケージの作り方 - rubyforge 登録まで

    語の解説で RubyGems パッケージの作り方や rubyforge 登録までの一連の方法が書いてあるところを見かけたことがないため、エントリーにしてみます。なれると割と簡単です。 優しい RubyGems パッケージの作り方 newgem コマンドでのひな形作成 http://drnicwilliams.com/2006/10/11/generating-new-gems/ perl には module-starter など、CPAN モジュールのひな形を作ってくれる便利なユーティリティがありますが、gem でそれにあたるのが newgem というパッケージです。 使い方は簡単で、 # gem install newgemで newgem をインストールしてから newgem コマンドを実行するだけで以下のようにひな形を作ってくれます。 $ newgem packagename c

    川o・-・)<2nd life - RubyGems パッケージの作り方 - rubyforge 登録まで
  • 川o・-・)<2nd life

    Perl での print debug の方法の紹介がブーム(?)だったので、自分がよく行ってる Ruby での debug 方法7つについて書いてみます。 p ご存じの人も多い Kernel#p メソッド。これを使うとオブジェクトの内容を見やすい形で出力してくれます。 >> p ({:foobar => :baz}) {:foobar=>:baz}Object#inspect を使うと、p で出力するときと同じ文字列を String として取得できます。 >> puts ({:foobar => :baz}).inspect {:foobar=>:baz}初心者の頃この p での出力を使う方法がわからなくて困った記憶が…。 pp pp というライブラリを使うと、p より、より見やすい形式で出力してくれます。たとえば >> a = Array.new(10) { {:foobar => :

    川o・-・)<2nd life
  • 1