Ruby

練習 3-3

文字列を置換する練習問題。前回、文字コードの変換が面倒だと書いた。 もうちょっとシンプルに変換 File#open で外部と内部の文字コードを指定。読み込んだ文字列は内部コードに変換済み。1行ずつ変換するよりも効率がよい (と信じてる*1 ) # -*- coding: u…

練習 3-2

`cmd` を使って文字列を作る練習問題。 前回の修正 前回のをちょっと修正。 puts `ls -la | awk 'NF==9{printf("%s, %d\\n", $9, $5)}'` # >> ., 3366 # >> .., 204 # >> .bash_history, 507123 # >> .bash_profile, 16 # >> .bashrc, 1188 ... NF==9 がない…

第46回 Ruby/Rails勉強会@関西 練習問題

第46回 Ruby/Rails勉強会@関西に行ってきた。初級者向けレッスンの練習問題に挑戦。 練習 3-1 任意の桁数の数字の文字列があったとき、その数字 0, 1 ... 9 を巡回的に 1, 2 ... 0 に入れ替える方法を考えてください。問題を誤解していた。314159 が与えられ…

メソッドチェーンの p デバッグ? それ tap でできるよ

「リファクタリング Ruby エディション」によると、一時変数は極力排除した方がいいらしい。メソッドチェーンを使えば、結果をいちいち変数に覚えなくても最終結果だけ得られる。 s.split(/\n/).each_slice(2).map(&:join) でも、結果が意図したものと違った…

第45回 Ruby/Rails勉強会@関西に行ってきた

第45回 Ruby/Rails勉強会@関西演習問題をやってみた 正の整数 n の階乗 n! を求める方法を何通りでも考えてください class Integer def ! case self when 0, 1 1 else self * (self-1).! end end end # とか class Integer def ! (1..self).inject(1, &:*) e…

第44回 Ruby/Rails勉強会@関西に行ってきた

第44回 Ruby/Rails勉強会@関西 初級者向けレッスンの演習問題 Arrayクラスの次のメソッドを Stringクラスにも作ってください。 文字列はアスキー文字 (1バイト文字) だけからなるもとのします。 sort については、非破壊的なメソッドと破壊的なメソッドを作…

fibonacci(36) を計算してみた

いつも読んでる SoftwareDesign 誌の 2010年 5月号に Konoha という言語が紹介されていた。Konoha というのは静的型のスクリプト言語らしい。記事の最後にフィボナッチ数列を求めるスクリプトのベンチマークが載っていた。 我らが Ruby は断トツの最下位に挙…

数値からローマ数字への変換

第42回 Ruby/Rails勉強会@関西 の演習問題 一方 Windows では Excel を使った。 require 'win32ole' class Integer EXCEL = WIN32OLE.new 'Excel.Application' def to_roman EXCEL.WorksheetFunction.Roman(self) end end [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, …

第42回 Ruby/Rails勉強会@関西

第42回 Ruby/Rails勉強会@関西 京都女子大学にて開催。 土曜日だというのに女子大生が大勢いて女子大感満載。勉強会にもたくさんの女子大生が参加してくれた。 実践スクレイピング by ふるかわだいすけさん モバイラーズオアシスというサイトを作るためにス…

代入メソッドの罠

Ruby ではメソッド名の末尾に = が付いていると、属性への代入のように使える。 def Foo def name=(name) @name = name end end foo = Foo.new # => #<Foo:0x100c7f98 @name=""> foo.name = 'foo' # => "foo" ←ここに注目 foo # => #<Foo:0x100c7f98 @name="foo"> つまり代入のように書くと Foo#name=(name) を呼び</foo:0x100c7f98></foo:0x100c7f98>…

覚えておくと便利な Array のメソッド

いつも「何かそういうメソッドあったはず」と思ってるりまを調べなおすことになるのでメモ。 Enumerable#each_cons 順番に n 個ずつ取り出す。 marunouchi = ['方南町', '中野富士見台', '中野新橋', '中野坂上'] marunouchi.each_cons(2).to_a # >> [["方南…

告知: 第41回 Ruby/Rails 勉強会@関西

今週の土曜日は第41回 Ruby/Rails 勉強会@関西です。 日時 2010年 3月 20日 (土) 13:00〜 場所 神戸大学 学術情報基盤センター分館 内容 RubyとWebCamであんなこと by にしたかお さん 非同期 by ujihisa さん ActiveScaffold デモ by cuzic さん Ruby初級者…

ブロックの受け渡し

以前マージソートを作ったとき、受け取ったブロックを別のメソッドへどう渡したらいいのか分からずに試行錯誤した。 マージソートにブロックを渡す 「プログラミング言語 Ruby」を読んでいたら、もっとシンプルなブロックの渡し方が書いてあった。 module En…

topcoder sample1

topcorder sample1 - うんたらかんたらRuby 与えられた英語の大文字で構成された文字列の中の文字を、与えられた数字の分だけ左にシフトさせなさい。 たとえば、'C' を 2 つ左にシフトさせると 'A'、'Z' を 2 つ左にシフトさせると 'X'。 与えられる英語の文…

IronRuby を使ってみた

仕事で C# を使うことになったので「Ruby on Windows」を見ながら RubyCLR を試してみた。ところが Ruby 1.9.1 に対応していないらしく、require すると SyntaxError が出る。 case when: ... when の : をひたすら ; に置換するなどした。それでも activesu…

RMagick で色を変更

年賀状に使いたい素材があったのだけど、色が気にくわない。筆文字なので黒なんだろうけど、それを金色っぽくしたい。そんなときは ImageMagick の convert $ convert -fill '#ffdf36' -opaque '#000000' src.png dst.pngとかすると、黒が黄色っぽくなる。 …

each が返すのは self か?

リファレンスマニュアルは通読しよう 結局 Enumerator#each の戻り値は object ではなく self っぽい。 String#each_byte の戻り値は () ではなく self っぽい。self っぽいけど、本当に self なのか?試してみた。 "NO RUBY, NO LIFE".each_byte{|b|} # => "…

リファレンスマニュアルは通読しよう

第39回 Ruby/Rails 勉強会に行ってきた。「KVS と MapReduce の密な関係について」と「それ Mechanize で」もちゃんと聞きたかったけど、遅れて来た人の対応をしたりバタバタしててちゃんと聞けなかった。 「JRuby でなんちゃら」では、Ruby から Java のク…

中の人に聞け

京都女子大学に まつもとゆきひろ さんが来るというので行ってきた。 小波先生の開会挨拶。 京都女子大学と Ruby の浅からぬ関係について。 宮下先生の講演。 「情報化社会を作り上げる人々」 中の人とは? 情報技術の進歩は速い。 チャールズ・シモニーって…

Excel をもっと Ruby らしく使いたい

Excel のワークシート名をまとめて取ろうと思った。 require 'win32ole' excel = WIN32OLE.new 'Excel.Applicatin' at_exit{excel.Quit} book = excel.Workbooks.Open 'sample.xls' book.Sheets.map(&:Name) # ~> -:10:in `method_missing': unknown propert…

第36回 Ruby/Rails 勉強会@関西

第36回 Ruby/Rails 勉強会@関西 2009 年 8 月 22 日に神戸大学で開催。*1第 2 セッションで「定規とコンパスを使って正三角形、正方形、正五角形を描いてみよう」という問題が出た。ruby-processing を定規とコンパスに使う。 任意の 2 点間に線を引く (定規…

eval ってクロージャなのか

evalでローカル変数を定義することはできない - willnetの日記 これを見て、なんとなくそうかなと思って試してみた。 y = 1 f = eval "x = y\nlambda{x += 1}" f.call # => 2 f.call # => 3 y # => 1 x # => # ~> -:6:in `<top (required)>': undefined local variable or me</top>…

多重代入と暗黙の型変換

以前 Ruby には型変換メソッドが沢山用意されているが、あまり暗黙の型変換はしてくれないと書いた。 暗黙の型変換 ところが多重代入をすると Array への型変換をやってくれるらしい。 class Foo def to_a; [:to_a] end def to_ary; [:to, :ary] end end foo…

スクリプトの国際化

ruby-list ML で「変数名、関数名に日本語を」というのがあったので、ネタでやってみた。 # -*- coding: utf-8; -*- class Numeric def +(o) self + o end def −(o) self - o end def ×(o) self * o end def ÷(o) self / o end end 底辺 = 3 高さ = 4 底辺.…

メモリ不足ではまった

WIN32OLE を使ってタイプライブラリからオブジェクトをもらうテストをしていた。オブジェクトをくれる関数には 8 個の引数があり、その組み合わせは全部で 7290 通り。 arg1 = [0, 1, 2] arg2 = [false, true, nil] ... arg1.product(arg2).product ... 引数…

xmp で Ruby 1.8 と 1.9 を切り替える

ある食事会で有名な Rubyist に質問された。 xmp を使うときに、Ruby 1.8 と 1.9 を切り替えられないか?その時は答えられなかったけど、こんな感じでどうだろうか? Ruby 1.8 と 1.9 がインストールされていること。 ruby と ruby19 普段使うのは ruby19 rcod…

Ruby のカプセル化は難しい

id:no6v さんに指摘されて気が付いた。 第 35 回 Ruby/Rails 勉強会@関西の宿題 Cook::Pan クラスはカプセル化できていない。asin:4894714515 にも、こう書いてあったのに。 オブジェクト内部のデータへの「ハンドル」を戻さないようにしようそんなつもりな…

第 35 回 Ruby/Rails 勉強会@関西の宿題

第 35 回 Ruby/Rails 勉強会@関西 の宿題。 クラスを定義してみよう 身のまわりのものをクラスとして定義してください。 まずは今日の例にあがっていたクラスを自分なりに実装して動かしてみてください。例がたい焼きだったので、みんなお好み焼きを作ってい…

protected メソッドって何?

Ruby/Rails 勉強会@関西 の初級者向けレッスンで、public メソッドと private メソッドが紹介されて「protected は使うべきでない」とだけ紹介された。グループワーク中に質問されたけど、時間がなくて答えられなかったのでメモ。 public レシーバを指定して…

タイプライブラリから配列を受け取る方法

WIN32OLE を使ってタイプライブラリから配列を受け取りたい。配列を retval で返してくれる関数なら、Ruby からそのまま Enumerable として扱える。 ole_object.func(arg1, arg2).each do |value| # func が返した配列を順番に処理 end ところが、関数に渡さ…