ruby

変数_

基本的にはあまり推奨はされないのだろうけど"_"っていう変数名もそういえば使えるなと思った。RubyをDSLっぽく使う際に何か使いどころがあるかもしれない。

コメント行でUnitテストが出来るようにするスクリプト

http://d.hatena.ne.jp/walf443/20060710/1152551319 のアイディアを部分的に実装してみた。一時ファイルに出力して云々とかはしてないのでまだちゃんとした体裁にはなっていないのですが。今のところの問題は クラスが一つしか認識できないこと setup()メソ…

初めてのプログラミング

http://www.oreilly.co.jp/books/4873112923/より。オライリーより、プログラミング入門の本が出るらしい。なんと言語はRubyらしい。唯一つ惜しむらくは、irbが15章でようやく登場するところ。確かにirbは初心者には混乱も与えかねないものであるとは思うけ…

Ruby Testing on Kikaineko

http://d.hatena.ne.jp/kikaineko/20060524#p1 より。 what is "Ruby Testing on Kikaineko"?(略してrubytok)Rubyのコメント部分からコードを抜き出し、テストとして実行するツールです。pythonのDocTestをご存知であれば、あれを想像してください。rubyto…

tail

tailを書くのが流行ってるみたいなのでやってみた。 main = do cs <- getContents putStr $ lastNlines 10 cs lastNlines :: Int -> String -> String lastNlines n cs = unlines $ takeLast n $ lines cs takeLast :: Int -> [String] -> [String] takeLast…

mapにも引数あっても良いんじゃないだろうか

String#eachのように引数をとれるeachのときにわざわざenum_for使うのもめんどくさいので、mapが引数取れてもいいんじゃないかと思えるのは自分だけだろうか。*1 module Enumerable def map(*args, &block) arr = [] each(*args) do |i| arr.push(block.call…

第7回Rails勉強会@東京

第7回Rails勉強会@東京へ行ってきました。第2回以来の久々の参加でした。何人か顔を覚えてくださっていた方もいらっしゃって前回よりも緊張せずに済みました。 パフォーマンスに関してのページを読む。 セッションの提案が滞っていたので一応他の人の意見を…

svn (copy|move) で複数のファイルを一度に実行する

svn mvやろうとおもったらなんかワイルドカードを認識してくれないっぽいということでワンライナーを初めて書いた。 $ruby -e "Dir.glob('*').each {|i| system(%|svn mv #{i} ../|) }"

段落ごとに処理を行なう

http://d.hatena.ne.jp/lurker/20060616/1150464251より。String#eachの引数に""を指定すると段落ごとに処理できるようです。知らなかった…。 "aiueo\naiueo\naiueo\naiueo\n\naiueo\naiueo\n\naiueo".each("") {|i| puts "<p>#{i.chomp.chomp}</p>\n" }実行結果: <p>a</p>…

文字列をマルチバイト文字を意識せずに扱えるようなラッパークラス

まだ作業途中のネタなのだけど、Rubyレシピブックを見てみるとマルチバイト文字列の処理にはいろいろとバッドノウハウを覚えないといけないくさいのでStringクラスのインスタンスをMultibyteStringクラスに変換することでマルチバイト文字を意識せず扱えるク…

puts array

arr = [1, 2, 3] #=> [1, 2, 3] puts arr 1 2 3 #=> nil配列って普通にputsするだけで各要素を表示してくれるのですね。こんな初歩的なことなのに知らなかった…orz今までずっと表示するためだけに [1, 2, 3].each {|i| puts i }とかやってた自分がバカらしく…

自動的にEnumerableのメソッドとeach_*をくっつけてみる

1.9からは組み込みとなるenumratorは便利ですが、あんまり見た目はすっきりしないのでこんなの書いてみました。 require 'enumrator' module Enumerable def method_missing(meth_sym, *args, &block) tmp = meth_sym.to_s.split("_") after_meth = tmp.shif…

Rubyで日付・時間を操作

Perlで日付・時間を操作 - DateTime モジュールの使い方 http://iandeth.dyndns.org/mt/ian/archives/000619.html のようなことをRubyでやる方法を調べてみました。 基本 現在日時のインスタンスを作る Time.new #=> Mon Jun 05 20:03:59 JST 2006 Time.now …

irbを一定の間隔でロードしなおす

方法とかないでしょうか。開発しつつその挙動をirbでテストしてると開発元ファイルを更新したいときがあるのですが、requireは一回までなのでもう一回requireしても意味ないし…。

irbからシェルのコマンドを実行

たぶん既出だと思うけど自分のためにもメモ。.irbrcにmethod_missingを定義してコマンドを実行させるとIRBからちょっとした確認が出来て便利。 module Kernel def method_missing(meth_sym, *arg, &block) str = `#{meth_sym.to_s} #{arg.join " "}` if str …

Time#strftimeでタイムゾーンを+0900で表示する

http://rubyist.g.hatena.ne.jp/muscovyduck/20060601/p1 より。ひょっとしたら小文字にすれば出来るかも…ということでやってみたら出来ました。 Time.now.strftime "%a, %d %b %Y %H:%M:%S %z" #=> "Thu, 01 Jun 2006 18:27:44 +0900"ただしマニュアルによ…

?表現

[ruby-list:42301]によると文字コードを調べるリテラルだそうです。こんなのあるとは知らなかった…。マニュアルを引いてみました。 ?a 文字aのコード(97)ruby 1.7 feature: 空白類を指定する場合は、?\s, ?\t などとする必要があります。?\C-a コントロール …

Gemsが遅すぎる

gem upとかすると延々と待たされるのですが、どうしてこんなに遅いのでしょう…。どうもRDocの生成のところで時間がかかってるっぽい。いくらなんでも時間かかりすぎだからバグかなんかじゃないかなと思ったりも。これを機会にRubygemsのソースでも覗いてみよ…

requireできるファイルを調べるメソッド

ライブラリの名前がうろ覚えだったりするときにirbでちょちょっと調べられるように次のようなメソッドを書いてみました。もっと良さそうな名前があれば募集中です。*1 def requirable_files(regex=nil) load_path = $LOAD_PATH.reject {|i| i =~ /^\.$/ } lo…

インスタンスと結果を渡してそれに合うメソッドを探してくれるメソッドMethodFinder

Stick it in Your ~/.irbrc: MethodFinder - RedHandedhttp://redhanded.hobix.com/inspect/stickItInYourIrbrcMethodfinder.htmlのリンク先にあるMethodFinderがすごい。 Andrew Birkett's MethodFinder in Ruby http://www.nobugs.org/developer/ruby/meth…

はてなRubyistグループ

g:rubyistなんてのが出来てる。はてなの技術者だらけだ。プライベートモードが多いので入りづらい雰囲気。まぁRSSを読みたいだけなのだけど。

最初〜1.6まで

授業の合間とか暇な時間に読んではいるのだけど、読んでるだけでは今ひとつなので気が向いたときに写経しつつ問題を解くことにする。 問題1.2 scheme ;; 5 + 4 + (2 - (3 - (6 + 4/5))) ;; ----------------------------- を前置記法に翻訳せよ。 ;; 3(6-2)(…

irbのプロンプトのカスタマイズ

http://sicp.g.hatena.ne.jp/hyuki/20060430/promptを読んでいて、確かに記事を書くときにちょちょっとやってしまったプログラミングはほとんどirbの上で完結してるのでプロンプトない方がコピペしやすくて便利だよなーと思って調べてみました。 unless IRB.…

任意のメソッドを指定した回数分繰り返すメソッド

昨日の(d:id:walf443:20060428:1146230192)を拡張して、"a".succ.succみたいな任意のメソッドを任意の回数繰り返すメソッドを考えてみました。 class Object def repeat(count, method, *args) count = count.to_i if count < 1 return nil elsif count == 1…

指定した回数分String#succ

あぁっ、String#succ が 引数回数分 succ してくれたら! From: http://d.hatena.ne.jp/babie/20060428/p4 ということでやってみました。 class String alias_method :succ_orig, :succ def succ(count=1) count = count.to_i if count < 1 return self.dup …

parseexcel

http://raa.ruby-lang.org/project/parseexcel/CPANのSpreadsheet::ParseExcelのRuby移植版のようです。こっちはgemはないっぽい。

id3lib-ruby

http://id3lib-ruby.rubyforge.org/C++のid3libというやつのラッパーで、ID3のタグを読み書きできるようです。mp3ファイルの整理なんかに使えそうです。gemから入れられてナイス!

%wを使ったときに空白を無視するには

[ruby-talk:189826]より。*1%wを使うと空白を区切りとして配列を受けることができますが、空白の入った文字を一つの要素にしたい場合は空白をバックスラッシュでエスケープすれば良いようです。 %w understands backslash escape irb(main):001:0> %w{this\ …

メソッドの引数を同名のインスタンス変数に自動的に引き渡すメソッド

http://d.hatena.ne.jp/rubyco/20060403/argsより。id:rubycoさんはnameとvalueを別々に取っていたけど、Hashでとった方が個人的には見た目が良いと思う。 make_instance_variables(:name => "walf443", :age => 30)みたいに。ちなみにmake_instance_variabl…

Factory Method パターン(特異クラス編)

http://d.hatena.ne.jp/rubyo/20060405/1144211265より。 ところで、IDCardFactory という名前が Ruby っぽくないかなと思ったので、IDCard::Factory に変更してみたところ factory_method.rb:33:in `initialize': wrong number of arguments (1 for 0) (Arg…