Ruby

Cucumber+Mockで悩んでいる

CucumberでMockに対するmethod呼び出しのexpectation(should_receive)をどのように書くか悩んでいる. 動くけど好きじゃない例 CucumberのexamplesにMockを使う例がある. https://github.com/cucumber/cucumber/tree/master/examples/rspec_doublesこの例…

Ruby 2.0.0-p0がリリースされてた

Ruby 2.0.0-p0 リリースノートわーい.開発・リリースに関わった皆さん,本当におつかれさまでした&ありがとうございました. 非互換 リリースノートにRuby 2.0.0の「特筆すべき非互換」について書いてあったので真っ先に確認してみた. デフォルトのスクリ…

mecab-rubyのMeCab::Tagger#parseToNodeの戻り値が気に入らないのでアレする

mecab-rubyでテキストを形態素解析するときによく使うMeCab::Tagger#parseToNodeですが,戻り値がMeCab::NodeのArrayやEnumeratorではなく,以下のようにMeCab::Node#nextを使って各要素にアクセスしなければならないので使い勝手が悪いです. # -*- coding:…

Ubuntu 10.04でMeCabをRubyから使えるようにする

MeCabのインストール MeCabと辞書のインストールはapt先生にお任せします.辞書はUTF-8のものを使います. $ sudo apt-get install mecab mecab-ipadic-utf8MeCabが正常に動くことを確認します. $ echo "俺、この戦争が終わったら結婚するんだ。" | mecab …

rbenvでインストールしたRubyのgemコマンドがzlib云々ほざいて動かない時の対処法

rbenvでインストールしたRubyのgemを動かしたら以下のようなエラーを吐いて死にました. $ gem install -V twitter ERROR: Loading command: install (LoadError) no such file to load -- zlib ERROR: While executing gem ... (NameError) uninitialized c…

Rubyの文字列リテラルの種類と使い分け方

Rubyでは文字列リテラルの記述にダブルクォート("),シングルクォート('),そして%記法が使える.Rubyでコードを書く上でそれぞれをどのように使い分ければいいか迷ったことがある人も多いのではないかと思う.というわけで自分なりの使い分け方を簡単にまと…

日本全国の地震の推移をggplot2で可視化する

RubyやRでスクリプトを書いて可視化してみた. tenki.jpの地震情報を取得するRubyスクリプト (fetch_quake_info.rb) 以下は2011/3/11 0:00から現在時刻までのtenki.jpの地震情報を取得するRubyスクリプト.Nokogiriを使ってスクレイピングする. #!/usr/bin/…

Rubyによるワンライナーのまとめ

Rubyでワンライナーを書く際によく使うコマンドライン引数と具体例をまとめてみた. 基本 -e : コマンドラインからスクリプトを指定 コマンドラインからスクリプトを指定する場合に使う.ワンライナーでは必須. $ ruby -e 'puts "Hello, world!"' 行単位の…

Rubyで配列の条件を満たす要素を列挙するor取り除く(select, reject, partition)

Arrayの以下のメソッドについてまとめてみた. select (select!) reject (reject!) partition select : 条件を満たす要素を列挙 条件を満たす要素を列挙するにはselectを使う.selectはブロックの評価結果がtrueとなる要素からなる配列を返す.非破壊的. a …

Rubyで文字列をn文字ごとに区切って配列に格納する

String#each_charとEnumerable#each_sliceを使えば簡単にできる. "ABCDEFGH".each_char.each_slice(3).map{|a| a.join} #=> ["ABC", "DEF", "GH"] ただしRuby 1.8.7以降が必要.each_charやeach_sliceなどのイテレータメソッドはブロックを与えないで呼び出…

bit.ly API ver 3.0をRubyから使う

URL短縮サービス「bit.ly」のAPIがいつの間にかversion 3.0になっていた.それに関連してversion 2系のAPIが今日の昼頃から利用できなくなった.雨予報botのmickey24_botが各種URLをポストする時にbit.lyのAPIを使って短縮するようにしているのだけど,この…

RubyでFizzBuzzのコードゴルフ(61バイト)

やってみたけどコードゴルフの定石を知らないのでこれくらいしか縮まらない. 1.upto(100){|i|print(i%3<1?:Fizz:i%5>0?i:'',[:Buzz][i%5],$/)} 記号プログラミングの方が楽だ.anarchy golfのランキングによると,RubyでFizzBuzzを書いた場合の最短コードは…

Rubyの難読化へのさらなる一歩

RubyではUTF-8文字の変数名を使うことができるということを@fusuianさんとの会話で思い出した.このことを利用すると,以下のように変数名を全角スペースにしてしまうこともできる. # -*- coding: utf-8 -*- = "Hello, world!" puts 読めない.また,どうや…

Rubyで記号だけを使ってFizzBuzz

@shtaxxxがFizzBuzzでコードゴルフをやっているのを見かけた.気分転換に私もやってみようと思ったけど,コードゴルフはよく分からないので記号プログラミングでやってみた.以下は1から100までのFizzBuzz.Ruby1.9以降で実行できる. $____="#"=~/$/;$___=$…

RubyでうどんげQuine(とAA型Quineの作り方講座)

山手Quineのid:ku-ma-meさんに敬意を表しつつ. Quineって何なの Quineとは実行すると自身のソースコードを出力するプログラムのこと.クワイン (プログラミング) - Wikipedia うどんげQuine ソースコードがうどんげのAAになっているQuineコードを作ってみた…

Rubyのブロック構文の書き分け(do end,{})

do endと{}の違い Rubyにおけるブロックはdo endと{}の二通りがあり,基本的にどちらを使っても同じようにブロックを記述することができるが,両者にはdo endより{}の方が結合が強いという違いがある. # fの引数はa,b,ブロック f a, b do end # bの引数は…

unlessの使い所

RubyにもPerlと同様にunless文がある.unless文では与えられた条件式が偽の場合のみ処理が実行される.if not 条件式と書くよりも「偽の場合に実行する」という意図をより明確にできるという理由で積極的に使っている人もいるかもしれない.しかし,このunle…

RubyGemsのTwitter::Baseがraiseするサーバーエラー関連の例外を拾いリトライ処理を行う

RubyGemsのtwitterパッケージは非常に便利で,これを使うと少ないメソッド呼び出しで簡単にTwitter APIを利用することができる.このパッケージのTwitter::Baseを用いてTwitter botを運用している人も結構多いのではないかと思う. # create Twitter::Base o…

Fixnumのobject_id

SymbolだけでなくFixnumも値が等しければobject_idが等しくなるようだ. # Fixnum 1.equal?(1) #=> true 3.equal?(1 + 2) #=> true # Float 1.0.equal?(1.0) #=> false # Bignum 10000000000000000000.class #=> Bignum 10000000000000000000.equal?(1000000…

Rubyにおける==,===,eql?,equal?の違い

どれが何なのかたまに混乱するのでメモ. == オブジェクトの同値性のチェック クラスやオブジェクトの性質に合わせて再定義できる === オブジェクトの同値性のチェック(所属性を加味) case式で使われる クラスやオブジェクトの性質に合わせて再定義できる eq…

Ruby 1.9.2から$LOAD_PATHにカレントディレクトリが含まれなくなった

タイトルの通り,Ruby 1.9.2から$LOAD_PATHにカレントディレクトリが含まれなくなった($:も同様).この変更により,以下のような条件でrequireを使っているスクリプトが動かなくなった. スクリプトが置いてあるディレクトリdirで実行することが前提として作…

Rubyで任意のメソッドをメモ化する

Rubyベストプラクティスの5-4より.メタプログラミングの例として面白かったのでまとめてみる. メモ化とは メモ化とは,引数に対するメソッドの戻り値を保存しておき,再び同じ引数でメソッドが呼び出された時にその値を再利用することにより,同じ計算を何…

Hashみたいだけどちょっと違うHashie::Mash

Hashie::MashはRubygemsのパッケージで公開されているclassのひとつで,m.key = valueのような書き方でkeyにアクセスできるHashのようなもの.twitterパッケージの内部でも使われている.GitHub - intridea/hashie: Hashie is a collection of classes and m…

読んでおきたいRuby本

C++本のついでに読んでおきたいRuby本も列挙してみる(既読含む). 既読 初めてのRuby 他のプログラミング言語の学習経験がある人向けのRuby入門書.224ページと非常にコンパクトで読みやすく,なおかつ要点が分かりやすくまとめられている.また,ブロック構…

GIFアニメをTwitterアイコンとして利用可能な形式に変換するためのRubyスクリプト

(追記 2010/08/10) どうやら以下の方法でもGIFアニメのアイコンが投稿できなくなったようです.残念…. - いつの間にかTwitterの仕様が変わってアイコンにアニメーションGIFが使えなくなっていた(拡張子をpngに詐称してもダメ).使おうとすると"There were p…

RSpecでモックを使って外部サービスに依存するコードのテストを書いてみた

こんな風にモックを使ってテストすればいいのかな.変な点があったら指摘して下さると嬉しいです. 目標 Twitterとは通信せずにTwitterクラスを使うコードのテストを行う(Twitterクラス関連のコードは適当にパスさせる) sample_tweet.rb SampleTweetのコンス…

Brainf*ck(o=('-'o)

こんなBrainf*ckのコードを, +++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.こんな殴り合い(ボクシング)に変換する. (o'-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-'…

Yahoo!の係り受け解析APIをRubyから利用してみた

Yahoo!デベロッパーネットワークで日本語係り受け解析用のAPIが公開されているので,試しにRubyから利用してみた.APIの利用にはアプリケーションIDが必要(無料で取得できる). http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html #!/opt/local/bin/…

もっとカッコつけないと

Rubyではメソッドの引数リストの括弧を省略できるけど,省略しまくっていたら何か失敗したよ,という話. 現在時刻が07:02,13:02,18:02,23:02のときに真になる式を以下のように書いた. # まちがい [7, 13, 18, 23].include? Time.now.hour && Time.now.m…

$KCODE = "u"

mickey24_botのメインのRubyスクリプトに書いておいたはずなのになくなってた. http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24KCODE $KCODE = "u" スクリプト中でUTF-8のマルチバイト文字列を扱っていたので,これを書いておか…