ruby

JPEGのフレームヘッダを読んでwidthとheightを取り出す

突然ですが、JPEG の構造はだいたい下記のような感じになってます。 今回は libjpeg 等のライブラリを使わずに、JPEGファイルから画像の width と height を取り出したいと思います。この width と height の情報は、上図におけるフレームヘッダセグメントに…

ActiveRecordが発行するSQLをフックして色々やるためのライブラリArproxyを公開しました

https://github.com/cookpad/arproxy http://rubygems.org/gems/arproxy これは何? Arproxyを使うと、ActiveRecordが発行したSQLがDB Adapterによって実行される直前をフックすることができます。これによって、カスタマイズしたクエリログを出力したり、ど…

#RubyKaigi 2011で気になったgem 13選

Rubyist達の夏フェスであるところのRubyKaigiが今年も開催され、猛暑の練馬が大いに盛り上がりました。今回が最後の開催とのことで、関係者各位は素晴らしい会議を本当にどうもありがとうございました。 さて、今年のRubyKaigi2011での各セッションで紹介さ…

query_trace: SQLが発行されたファイルと行番号を調べる

Railsで、ActiveRecordがSQLのログを吐いてくれるんですが、これだとどのクエリがどこから呼ばれたのか分からなくて、デバッグがしにくい。 Schedule Load (0.023687) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 Resource Load (0.001076) S…

ブロック引数つきのObject#presenceというのを考えた

以下のような処理をしたい。name という名前のユーザを探し、その年齢を出力する。 def age(name) Persion.where(:name => name).age end 上のコードはまずいところが一箇所ある。 name というユーザがいなかった場合に、例外になるという点だ。 def age(nam…

RailsじゃなくてもActiveSupportの自動require機能を使う

Railsでは、 config/application.rb で config.autoload_paths << Rails.root.join("lib") と書いておくと、例えば $ cat lib/my_library.rb class MyLibrary : endみたいなファイルが置いてあれば、Railsアプリ内で MyLibrary クラスを特にrequireしなくて…

ruby-profとKCacheGrindでプロファイル野郎になる

速さが足りない!!!!! そんな時はプロファイリングの時間ですね。 Rubyには標準添付ライブラリとして profile というプロファイラがついてくる。でもこのライブラリはあまりに遅すぎて実用に耐えないから、多分誰も使っていない。ほとんどのRubyistは ru…

capistranoでbundle installする

Capfileで run "cd #{release_dir}; bundle install vendor/bundle --without test development --deployment" とか書いてたけど、bundlerの公式サイト見てたら、capistrano用のbundle installタスクが用意されてることに気づいた。 使い方 Capfileの中で re…

doppelkunを復活させた

doppelkun( http://twitter.com/doppelkun )というtwitter-botを運営しているのですが、このたびBASIC認証の廃止を受けて死んでいたので、OAuth対応させることで復活させました。 当時やっつけで書いたコードだったので、直すのに苦労しました。かと言って…

Imlib2でImageMagickより3倍高速かつ美しいサムネイル画像の生成

この記事の概要 Imlib2を使って画像のサムネイルを生成してみたところ、ImageMagickより3倍速かった。 また一般的には、Imlib2の方が画質が悪いとされているが、パラメータを調整することで、十分に美しいサムネイル画像を得ることができた。 はじめに Imlib…

Amazon S3(ap-southeast)をRubyから使う

安価・容量無制限・高耐久性でおなじみの Amazon S3 (Simple Storage Service)をRubyから使ってみましょう。 AWS::S3 というgemを使えば、S3を簡単に扱えます。AWS::S3 - Ruby Library for Amazon Simple Storage Service (S3) インストール $ gem install s…

gem管理の新標準ツール"Bundler"のTips

Bundlerは、rubygemsのラッパーです。Rails3のgem管理に採用されています。 Bundlerを使うことで、 このgem、手元にはインストールされているのに、本番環境にインストールされてない! 開発環境にgemを入れまくったら、プロジェクトにどのgemが必要なのか分…

8分21秒で分かるRubyとOAuthによるTwitterAPIの使い方(動画)

TwitterAPIのBASIC認証は近々廃止され、今後はOAuth/xAuthにシフトされます。 混乱している開発者も多いと思うので、今回はOAuth対応なTwitterBotを作ることを前提にして、その簡単なやり方を動画に撮ってみました。スクリーンキャストというやつです。 動画…

rvm: 複数のRubyを共存させる最新のやり方

http://favotter.net/status.php?id=13069973879 こんにちは、4月からついに職業Rubyエンジニアになったmirakuiです。 あまり認めたくありませんが、Rubyは事実上、いまだに1.8系から1.9系への移行期にあります。 現在の安定版である1.8.7と1.9.1を開発環境…

Binding+callerで作るデバッグ出力メソッド

Rubyで変数をデバッグ出力をするときに、 hoge = 100 puts "hoge = #{hoge}" とかやるとおもうんですが、いちいち "hoge = #{hoge}" って書くのは面倒ですよね。 なので、理想的には hoge = 100 debug hoge # => 'hoge = 100' (あくまで理想) となってくれ…

RSpecでテストを書く

Rubyのテストでは、RSpecを使うと幸せになれます。 HelloWorld的な事は Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編) を順に試せばいいと思います。 インストール $ sudo gem install rspec --format-execut…

ActiveRecordをRails抜きの単品で使う

知らない人もいるかもしれませんが、 Rails で使われている ORマッパーである ActiveRecord は、Rails からでなくても単品で動きます。 ActiveRecord はとても簡単で便利なので、 Rails 使うまでもないちょっとした日常のスクリプトでもどんどん使いましょう…

RedmineでMercurialを使う方法

Redmine+Mercurial連携でちょっとハマったのでメモ。 1. config/environment.rb に python のパスを記述 ENV['PYTHONPATH'] ||= '/usr/local/bin/python' 2. mercurial_adapter.rb に hg のパスを記述 +++ lib/redmine/scm/adapters/mercurial_adapter.rb @@…

vimをruby用にビルドしなおしてvim-rubyを使う

CentOSとMacOSXで動作確認。 vimがruby用にビルドされているか確認 以下のコマンド。 $ vim --version | grep ruby +printer -profile -python +quickfix +reltime -rightleft -ruby +scrollbindはい、ここで「-ruby」となっていたら残念です。vimをリビルド…

RubyでGmailからIMAP経由で未読メールを取得する

twitterのフォロー通知メールとか、Amazonの発送通知メールとか、そういうメールを受け取ったらその内容に応じていろいろ処理したい時ってありますよね。 でもまあ、今時個人でメールサーバ立てるのなんて流行らないですし、自由にprocmailを仕込むわけにも…

doppelkunをアップデートした

doppelkunというtwitter-botを飼っているのですが、このたび、機能追加を行いました。 追加したのは以下の要素です。 誰かに取り憑いたとき、その人に対してダイレクトメッセージで「今日はあなたに決めた」と教えます。 @doppelkun 宛にリプライがあったら…

doppelkunというドッペルゲンガー系Twitter Botを作った

本日、「 @doppelkun 」という Twitter-Bot をリリースしました。 http://twitter.com/doppelkunアイディアは id:pha さんのもので、すでに id:pha さんがエントリを書かれてます。 ドッペルゲンガー系Twitter Bot「doppelkun」ができました - phaのニート日…

favotter503というTwitter-Botを作った

みんな大好き id:ono_matope 様によるWebサービス、ふぁぼったー(favotter)。コンテンツはすごく面白いけど、ちょっとサーバが不安定なのが、かわいいよね!というわけで、「ふぁぼったー」が落ちてたら教えてくれるBotを作ってみたよ。これでふぁぼったー…

Ruby+MechanizeでTwitterのfollowingをスクレイピングしてみる

WWW::Mechanize を使って、Twitter の following ユーザを取得してみる。ソースコードは以下の通り。 require 'rubygems' require 'mechanize' require 'logger' cookie_path = '/tmp/twitter_client.cookie.yaml' target = 'mirakui' agent = WWW::Mechaniz…

Windows+Rubyで外部プログラムの標準エラー出力を受け取る"win32-open3"

Rubyでは、外部プログラムを実行するメソッドが用意されている。 例えば、lsコマンドを実行したかったら、 result = exec "ls" もしくはバッククウォートを用いて result = `ls` と書く。すると、lsの実行結果の標準出力が、文字列となってresultに格納され…

JRubyで遊ぼう(2) JRuby on Rails を Tomcat+Apacheで

今回は、JRubyでrailsを設置し、さらにApacheと連携したTomcatで運用する方法を紹介します。なお、今回動作を確認したのは、以下の環境です。 Windows XP Professional SP2 JRuby 1.0.1 Apache httpd 2.2.4 Tomcat 6.0.14 JRuby on Rails JRubyでも簡単にrai…

JRubyで遊ぼう(1) JavaからRubyを実行する

JRubyはPure Javaで書かれたRuby実装。一方、JavaではJava6からスクリプト言語との連携ができるようになった。つまり、JavaからPerlやRubyを呼んだり、その逆ができるのだ。夢が広がりんぐである。そんななかで、Javaで書かれたJRubyはこの連携において非常…

Rubyはじめました

Rubyをはじめることにした。Ruby自体は何年か前、大学の実験で、簡単な自然言語処理(N-gramやTF/IDF)を組んだことがあるけど、ほとんど忘れてしまった。 普段はJavaがメインだけど、テキスト処理などのためにスクリプト言語も抑えておきたいと思ったため。…