Ruby

SinatraでModularスタイルのときのテストでハマってた話

ざっくりまとめると SinatraのModulerスタイルで書いたときは、RSpecなどでテストするときに上書きするRack::Testのappメソッドを def app Sinatra::Application end ではなく def app HelloSinatra end みたいに、アプリケーションのクラス(上記の場合はHe…

YARDで拡張ライブラリのドキュメントを書くときはメソッドの定義のところで@overloadタグを書かなきゃダメという話

はじめに まぁ表題のとおりなんですが、要は 「YARDで拡張ライブラリのドキュメントを書くときは、@overloadタグでメソッドシグニチャを書かないと正しくドキュメントが生成されないので注意しましょう」 という話です。 環境 Ruby 1.9.3-p194 YARD 0.8.0 何…

Sinatra(というかRack)で複数の同名パラメータを受け取る

はじめに Sinatraで http://localhost:4567/?foo=123&foo=456&foo=789って感じで複数の同名パラメータを送ったら require 'sinatra' get '/' do params[:foo] #=> 789 end のように、最後の1つしか取ってくれませんでしたf**k! そんなわけで、全部取り出すに…

Rubyの拡張ライブラリを作ってみよう!

はじめに Ruby Advent Calendar jp: 2011 : ATNDの17日目の記事です。昨日は@yoppiblogさんのSeleniumの自動テストをCI環境(Jenkins)で快適に実施するでした。 Rubyを使ってて 遅い…ここだけ超遅い… とか あのライブラリが使いたい!でもRuby用のライブラリ…

RubyKaigi2011に行ってきました

はじめに 7月16日〜18日の3日間、練馬文化センターで開催された日本Ruby会議2011(RubyKaigi2011)に参加してきました。 セッションやイベントの内容はすばらしいまとめなどがあるのでそちらを見ていただくとして、ここではRubyKaigi2011全体を通しての感想な…

Rubyの拡張ライブラリを作るときはメモリ確保失敗時に自分でGCしてリトライしなきゃダメという話

はじめに 表題のとおりでよく考えれば当たり前なのですが、ちょっとハマったので書いておきます。 要約すると、Rubyの拡張ライブラリを作る場合、用意されているALLOC()などのメモリ確保マクロを使わないときには、ちゃんと自分でGCを呼ぶ必要がある、という…

Ruby1.8でも1.9でも動くTest::Unit用テストランナーを作る

はじめに Rubyでユニットテストを行うフレームワークはいろいろありますが、とりあえず手っ取り早いのは標準添付のtest/unitだったりします。しかし、Ruby1.9以降のTest::Unitは1.8に添付されているものとは別モノ*1のため、1.8用のテストランナーはそのまま…

Ruby/OpenCVで遊んでみる

※この記事はRuby/OpenCV - An OpenCV Ruby wrapperを日本語訳したものです。はじめにRuby/OpenCVは、OpenCVというコンピュータビジョン用ライブラリのRuby用ラッパーです。これを使うことで、顔検出のようなコンピュータビジョンのプログラムをRubyで簡単に…

Ruby/OpenCV - An OpenCV Ruby wrapper

(Japanese version is here.) IntroductionRuby/OpenCV is a wrapper of OpenCV (a computer vision programming library) for Ruby. It helps you to write computer vision programs (e.g. detecting faces from an image) with Ruby. There, I'll show yo…

同じ年月は同じグループとしてカウントして数を求める例でのコード比較をRubyでも

はじめに 同じ年月は同じグループとしてカウントして数を求める例でのコード比較を Squeak Smalltalk でも - Smalltalkのtは小文字です経由でこんな問題を見つけたのでRubyでやってみました。 各言語共通ロジック条件 同じ年月は同じグループとしてカウント…

rvmを入れなおしたのでメモ

概要 rvmとは、複数の種類のRubyを簡単に管理できるツールです。コマンド一発で使うバージョンを切り替えたりしてくれます。便利ですよね!すごく便利ですよね!! 実は前から使っていたのですが、今回opensslなどを使えるようにするために入れなおしたので、そ…