Ruby
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の「特筆すべき非互換」について書いてあったので真っ先に確認してみた. デフォルトのスクリ…
mecab-rubyでテキストを形態素解析するときによく使うMeCab::Tagger#parseToNodeですが,戻り値がMeCab::NodeのArrayやEnumeratorではなく,以下のようにMeCab::Node#nextを使って各要素にアクセスしなければならないので使い勝手が悪いです. # -*- coding:…
MeCabのインストール MeCabと辞書のインストールはapt先生にお任せします.辞書はUTF-8のものを使います. $ sudo apt-get install mecab mecab-ipadic-utf8MeCabが正常に動くことを確認します. $ echo "俺、この戦争が終わったら結婚するんだ。" | mecab …
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やRでスクリプトを書いて可視化してみた. tenki.jpの地震情報を取得するRubyスクリプト (fetch_quake_info.rb) 以下は2011/3/11 0:00から現在時刻までのtenki.jpの地震情報を取得するRubyスクリプト.Nokogiriを使ってスクレイピングする. #!/usr/bin/…
Rubyでワンライナーを書く際によく使うコマンドライン引数と具体例をまとめてみた. 基本 -e : コマンドラインからスクリプトを指定 コマンドラインからスクリプトを指定する場合に使う.ワンライナーでは必須. $ ruby -e 'puts "Hello, world!"' 行単位の…
Arrayの以下のメソッドについてまとめてみた. select (select!) reject (reject!) partition select : 条件を満たす要素を列挙 条件を満たす要素を列挙するにはselectを使う.selectはブロックの評価結果がtrueとなる要素からなる配列を返す.非破壊的. a …
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などのイテレータメソッドはブロックを与えないで呼び出…
URL短縮サービス「bit.ly」のAPIがいつの間にかversion 3.0になっていた.それに関連してversion 2系のAPIが今日の昼頃から利用できなくなった.雨予報botのmickey24_botが各種URLをポストする時にbit.lyのAPIを使って短縮するようにしているのだけど,この…
やってみたけどコードゴルフの定石を知らないのでこれくらいしか縮まらない. 1.upto(100){|i|print(i%3<1?:Fizz:i%5>0?i:'',[:Buzz][i%5],$/)} 記号プログラミングの方が楽だ.anarchy golfのランキングによると,RubyでFizzBuzzを書いた場合の最短コードは…
RubyではUTF-8文字の変数名を使うことができるということを@fusuianさんとの会話で思い出した.このことを利用すると,以下のように変数名を全角スペースにしてしまうこともできる. # -*- coding: utf-8 -*- = "Hello, world!" puts 読めない.また,どうや…
@shtaxxxがFizzBuzzでコードゴルフをやっているのを見かけた.気分転換に私もやってみようと思ったけど,コードゴルフはよく分からないので記号プログラミングでやってみた.以下は1から100までのFizzBuzz.Ruby1.9以降で実行できる. $____="#"=~/$/;$___=$…
山手Quineのid:ku-ma-meさんに敬意を表しつつ. Quineって何なの Quineとは実行すると自身のソースコードを出力するプログラムのこと.クワイン (プログラミング) - Wikipedia うどんげQuine ソースコードがうどんげのAAになっているQuineコードを作ってみた…
do endと{}の違い Rubyにおけるブロックはdo endと{}の二通りがあり,基本的にどちらを使っても同じようにブロックを記述することができるが,両者にはdo endより{}の方が結合が強いという違いがある. # fの引数はa,b,ブロック f a, b do end # bの引数は…
RubyにもPerlと同様にunless文がある.unless文では与えられた条件式が偽の場合のみ処理が実行される.if not 条件式と書くよりも「偽の場合に実行する」という意図をより明確にできるという理由で積極的に使っている人もいるかもしれない.しかし,このunle…
RubyGemsのtwitterパッケージは非常に便利で,これを使うと少ないメソッド呼び出しで簡単にTwitter APIを利用することができる.このパッケージのTwitter::Baseを用いてTwitter botを運用している人も結構多いのではないかと思う. # create Twitter::Base o…
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…
どれが何なのかたまに混乱するのでメモ. == オブジェクトの同値性のチェック クラスやオブジェクトの性質に合わせて再定義できる === オブジェクトの同値性のチェック(所属性を加味) case式で使われる クラスやオブジェクトの性質に合わせて再定義できる eq…
タイトルの通り,Ruby 1.9.2から$LOAD_PATHにカレントディレクトリが含まれなくなった($:も同様).この変更により,以下のような条件でrequireを使っているスクリプトが動かなくなった. スクリプトが置いてあるディレクトリdirで実行することが前提として作…
Rubyベストプラクティスの5-4より.メタプログラミングの例として面白かったのでまとめてみる. メモ化とは メモ化とは,引数に対するメソッドの戻り値を保存しておき,再び同じ引数でメソッドが呼び出された時にその値を再利用することにより,同じ計算を何…
Hashie::MashはRubygemsのパッケージで公開されているclassのひとつで,m.key = valueのような書き方でkeyにアクセスできるHashのようなもの.twitterパッケージの内部でも使われている.GitHub - intridea/hashie: Hashie is a collection of classes and m…
C++本のついでに読んでおきたいRuby本も列挙してみる(既読含む). 既読 初めてのRuby 他のプログラミング言語の学習経験がある人向けのRuby入門書.224ページと非常にコンパクトで読みやすく,なおかつ要点が分かりやすくまとめられている.また,ブロック構…
(追記 2010/08/10) どうやら以下の方法でもGIFアニメのアイコンが投稿できなくなったようです.残念…. - いつの間にかTwitterの仕様が変わってアイコンにアニメーションGIFが使えなくなっていた(拡張子をpngに詐称してもダメ).使おうとすると"There were p…
こんな風にモックを使ってテストすればいいのかな.変な点があったら指摘して下さると嬉しいです. 目標 Twitterとは通信せずにTwitterクラスを使うコードのテストを行う(Twitterクラス関連のコードは適当にパスさせる) sample_tweet.rb SampleTweetのコンス…
こんなBrainf*ckのコードを, +++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.こんな殴り合い(ボクシング)に変換する. (o'-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-')9)゚-'…
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…
mickey24_botのメインのRubyスクリプトに書いておいたはずなのになくなってた. http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24KCODE $KCODE = "u" スクリプト中でUTF-8のマルチバイト文字列を扱っていたので,これを書いておか…