こしごぇ(B)

旧:http://d.hatena.ne.jp/koshigoeb/

重い腰を上げてテストにかかる時間の短縮を試みる

とあるプロジェクトの通しテストについて、MRIとREEで設定を変えて時間を計ってみた。 その後、parallel_tests を試してみた。 .rbenv-vars RUBY_HEAP_MIN_SLOTS=1000000 RUBY_HEAP_SLOTS_INCREMENT=1000000 RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 RUBY_GC_MALLOC…

New Relic がどうやってメトリクスを集めているのか気になったのでちょっと調べてみた

Passenger の場合について簡単に調査。PhusionPassenger.on_event(:starting_worker_process) で、NewRelic::Agent.after_fork を実行している。 NewRelic::Agent.after_fork は、Thread.new してワーカースレッドを作っている。という事で、Passenger のワ…

Homebrew の patches で圧縮ファイルを指定する場合

patch の流れはざっくりと以下の様な感じ。 curl で %03d-homebrew.diff という名前で保存する 圧縮されているか判別して適切な拡張子を付け足す(mv する) 圧縮されている場合は展開する %03d-homebrew.diff という名前のファイルを patch する 圧縮ファイル…

Mechanize で fetch した HTML を任意のウェブブラウザに表示させる簡単な方法を知りたい

Ruby の Mechanize を使って書いたプログラムの途中経過を簡単に目視点検する方法を知りたい。以下は、Mechanize::HTTP::Agent#fetch の後処理として無理矢理実装したもの。HTML をローカルファイルに書き出して、それをウェブブラウザに読み込ませるという…

Mechanize で Cookie を手動でセットする

Mechanize::Cookie.new のパラメータ指定でミスっていたので自戒のメモ。 require 'rubygems' require 'mechanize' require 'logger' agent = Mechanize.new do |agent| agent.log = Logger.new($stdout) end [ 'http://www.google.com', 'http://www.google…

Phusion Passenger Enterprise

https://www.phusionpassenger.com/enterprise とても気になる。英語読めない。 Rolling Restarts Unicorn とかは、既存プロセスと新規プロセスで2倍のメモリが必要な実装になっている。 一方、Phusion Passenger Enterprise では、一つずつ置き換えていく方…

OSX 用のドキュメントブラウザ Dash

App Store を眺めていたら、Dash というドキュメントブラウザがある事を知りました。 http://kapeli.com/dash/ マシンのメモリに大分余裕が出来たこともあり、ダウンロードして使ってみることにしました。なんとなく良さそうな印象ですが、用意されているド…

rubyのYAMLによるシリアライズについて

全く中身を把握していなかった事に気づかされたので、少しだけ調べてみました。以下は Object#to_yaml のソース。 # yaml/rubytypes.rb class Object yaml_as "tag:ruby.yaml.org,2002:object" def to_yaml_style; end def to_yaml_properties; instance_var…

『Mobageを支える技術』を読んだ

Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)作者: DeNA出版社/メーカー: 技術評論社発売日: 2012/06/13メディア: 単行本(ソフトカバー)購入: 29人 クリック: 607回この商品を含むブログを見る購入してから大分時間が経ちましたが…

Mechanize(2.5.1) のエンコーディング周りに関するメモ

Mechanize#get などによって取得されたリソースは、Mechanize::Page のインスタンスとして返される。その際の Mechanize::Page の初期化プロセスの中で、取得したリソースの文字エンコーディングを推定している。 エンコーディング候補 以下で得られるエンコ…

Mechanize(2.5.1) のエンコーディング周りに関するメモ

Mechanize#get などによって取得されたリソースは、Mechanize::Page のインスタンスとして返される。その際の Mechanize::Page の初期化プロセスの中で、取得したリソースの文字エンコーディングを推定している。 エンコーディング候補 以下で得られるエンコ…

リーダブルコード

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)作者: Dustin Boswell,Trevor Foucher,角征典出版社/メーカー: オライリージャパン発売日: 2012/06/23メディア: 単行本(ソフトカバー)購入: 3人 クリック:…

Rubyでデバッグモードの時だけ実行されるメソッドってあるんだっけ?

ruby -d で実行して $DEBUG が真になった時にだけブロックを実行するメソッド、的なものはあるんでしたっけ? if $DEBUG def debug yield if block_given? end else def debug end end debug { puts 'x' } こんな感じのやつ。※ ついでに、こういうやつにふさ…

MySQLの全文検索を全く理解してないのでさわりだけでも調べておく

FULLTEXT INDEX として作成したインデックスを利用した検索で、WHERE 句の MATCH(カラム名) AGAINST('フレーズ') を使って検索条件を指定する。 http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html http://dev.mysql.com/doc/refman/5.1/ja/fullt…

RubyのCSVパーサを追試

FasterCSVは改行を含まない一行のレコードは十分高速に解析できる FasterCSVはレコード区切りがCRLFで、カラムに含む改行がLFであれば十分高速に解析できる LightCsvが安定して高速(速度のみ確認) CSVScanも安定して高速(速度のみ確認)

Ruby の CSV.parse_line が遅いケース

改行が多いとパースに時間がかかるらしい。どこで時間がかかっているかなど、ソースは見てない。旧CSVは安定している様子。 1.8.7-p358, FasterCSV 1.5.5 # -*- coding: utf-8 -*- require 'benchmark' require 'rubygems' require 'fastercsv' require 'csv…

OSX Lion で iconv を使って WINDOWS-31J のデータを扱いたい

とある用途で Ruby の Mechanize を使う事になったわけですが、Mechanize は内部で Iconv を使用してエンコーディング変換を行っています。 なので、WINDOWS-31J なページを扱おうとした場合に、iconv が WINDOWS-31J に対応していないと困ってしまうわけで…

kakasiのFormula

こんなんでよいのかな? https://raw.github.com/gist/2575204/f3ce1dd8c6bb90aba25dd5ecc3b757bb91f46fd8/kakasi.rb makeで以下のエラーメッセージが出るので、適当にconfigureを書き換えているわけですが、コンパイル周りは全く知識がなくて泣きそうです。…

『Emacs 実践入門』読了

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)作者: 大竹智也出版社/メーカー: 技術評論社発売日: 2012/03/07メディア: 単行本(ソフトカバー)購入: 11人 クリック: 212回この商品を含むブログ (1件) を見る流しただけでは…

Perl環境を構築しながらWebibloでmobipocketフォーマットのデータを作ってみる

Webibloをチェックアウト。 https://github.com/mizzy/webiblo $ git clone https://github.com/mizzy/webiblo.git $ cd webiblo Perlbrewとcpanmをインストールする。 http://perlbrew.pl/ $ curl -kL http://install.perlbrew.pl | bash $ source ~/perl5/…

tmux本(mobi)を購入して読んでいるところ

少し前にGNU screenからtmuxに乗り換えたわけですが、あまり把握できていないので本を買ってみました。今はChapter 4まで読んだところですが、そこまでの足跡を以下に簡単に記録しておきました。 http://w.koshigoe.jp/study/?%5Bsystem%5D+tmux%A5%C1%A5%E5…

相対パスのsvn:externalsもgit-svnする

git-svn-clone-externalsの仕組みを参考に、相対パスで書いたsvn:externalsもgit-svnするスクリプトを書いてみた。出来は悪いけど、それなりに動いている、はず。

Clean Coderを読んだ

Clean Coder プロフェッショナルプログラマへの道作者: Robert C. Martin,角征典出版社/メーカー: アスキー・メディアワークス発売日: 2012/01/27メディア: 大型本購入: 1人 クリック: 72回この商品を含むブログ (14件) を見る…、胸が痛い。

MaxMind社のGeoLite Cityデータベースを使ってIPアドレスから都道府県を特定する話

GPSではなくIPアドレスから都道府県(地理情報)を特定したい場合、MaxMind社のデータベースを使うのが一般的なんでしょうか?地理情報関係はほぼ触れずに今日まで生きてきたのでよく分かりませんが、とりあえずIPアドレスから都道府県を割り出すプログラムで…

VagrantのBase Boxの要求仕様のようなもの

VagrantのBase Box用に仮想マシンを作る際に、最低限何が必要とされているかという情報が見つからないなと思ってたら、普通にありましたねという話。 Vagrant - Documentation - Base Boxes 上記ドキュメントに書かれている内容をおおざっぱに抜粋。 Virtual…

最近になってようやく/etc/resolverを使い始めた話

ドメイン別に利用するネームサーバを使い分けられるやつを便利だなと思いつつ、DNS音痴が故に使えずにいましたが最近になって重い腰を上げましたよという話です。BINDを軽くは触ったことがありますが本当に浅いところしか触ったことがなく、またTTLの話とか…

yumの$releaseverについて

理解しておらず恥をかいてしまったのでメモ。 $releasever This will be replaced with the value of the version of the package listed in distroverpkg. This defaults to the version of ‘redhat-release’ package. 設定項目distroverpkgで指定されたパ…

known_hosts

known_hostsに疎い自分ですが、いくつか覚えたことがあるのでメモしておきます。 指定したサーバのknown_hostsを取得する サーバをコマンドライン引数で指定する。 $ ssh-keyscan -t rsa 127.0.0.1,localhost >> .ssh/known_hosts サーバをファイルで指定す…

git-svn-clone-externals

git-svn歴もそこそこになるけど、最近ようやくgit-svn-clone-externalsを使い始めました。便利ですね。 git-svn-clone-externals 今まではmrでごまかしていたんですが、git svn cloneする回数が増えてきて設定が面倒くさくて耐え切れなりました。もっと早く…

Rubyの環境構築方法が未だ定まらず

いろいろな方法があって、未だにふらふらしています。最近は以下の様な環境を利用しています。 Homebrew rbenv ruby-build rbenv-gemset Bundler 過去の変遷を振り返ると、MacPortsで直接→Homebrewで直接→rvm→rbenv→rvm→rbenv→(ryという感じです。rvmとrbenv…