2009-01-01から1年間の記事一覧

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 のク…

Genius bar の使い方

Mac

Apple 製品の具合が悪くなったら Apple store 内の Genius bar へ持って行くと故障の診断、修理、交換などしてくれる。Genius bar を使うには若干のコツがいる。 とりあえず予約 昔とちがって数日前から予約ができるようになった。 最寄りの Apple store の …

Real World Haskell

O'Reilly のキャンペーンで Haskell T シャツもらった。 Web で注文するときにメールアドレスを ...@gmail.com とするところを ...@gmial.com と間違えてしまった。 幸い注文番号は控えていたので、担当の方と 2 〜 3 度メールのやりとりをして無事購入でき…

中の人に聞け

京都女子大学に まつもとゆきひろ さんが来るというので行ってきた。 小波先生の開会挨拶。 京都女子大学と 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…

コマンドの終了ステータスが取れない

DOS

errorlevel コマンドプロンプトからコマンドを実行すると、成功したか失敗したかが数値で返ってくる。その値は errorlevel で見ることができる。 C:\> dir ... C:\> echo %errorlevel% 0 C:\> dirr 'dirr' は、内部コマンドまたは外部コマンド、 操作可能な…

スクリプトの国際化

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 ところが、関数に渡さ…

るりまを使おう

RubyKaigi2009 で「るりまを gem でインストールできたら便利じゃね?」という意見が出ていたけど、るりまのインストールってそんなに面倒か? スナップショットのダウンロード ここから http://www.ruby-lang.org/ja/man/archive/ こんなファイル名 ruby-refm…

WIN32OLE で使える VARIANT_NAME

常識的なタイプライブラリを使っていると必要ないが、設計のよろしくないタイプライブラリを使うと引数の型をいちいち指定してやらないと関数を呼べないことがある。optional な引数を飛ばして次の引数を指定する場合など。 require 'win32ole' include WIN3…

オブジェクトの順序

自作クラスのオブジェクトを Array に詰めて sort してみる。 class OreOre def initialize(val) @value = val end attr_accessor :value def inspect; "o:#{@value}" end end ary = 5.downto(1).inject([]){|a, i| a << OreOre.new(i)} # => [o:5, o:4, o:3…

anything から refe.el を使う

Emacs から「るりま」を引くときは anything を使うのが普通らしい。 Ruby リファレンスマニュアル (通称るりま) と ReFe2 をインストール・Emacs で参照する・anything.el との連携 - (rubikitch loves (Emacs Ruby CUI)) anything から refe.el を使えるよ…

STL の iterator って静的型のダックタイピングなの?

C++

iterator ってポインタのように使えるだけかと思ったら、ポインタを iterator のように使うこともできるのか。STL の sort とか find って、何であんな まどろっこしい引数なのかと思ったら、そういうことですか。 #include <iostream> #include <vector> #include <set> #include <algorithm> </algorithm></set></vector></iostream>…

文字コードと文字の変換

mixi の Ruby コミュと ruby-list ML で同じような話題があったのでメモ。C 言語脳でプログラミングすると、文字を数値として扱いたくなる場面がある。Ruby 1.8 の頃は、文字列はバイトストリームだったので、C 言語っぽいコードが書けた。 RUBY_VERSION # =…

irb を使ってタイプライブラリを対話的にデバッグ

Microsoft Visual Studio から irb を起動したい。「プロジェクト」-「プロパティ」-「構成プロパティ」-「デバッグ」で設定する。 コマンド d:\Cygwin\usr\local\bin\ruby19.exe コマンド引数 -rwin32ole /usr/local/bin/irb19 Ruby は Cygwin 版 野良ビル…

タイプライブラリのメソッドのシンタックスを調べる

内容は「Win32OLE ことはじめ」から、そのままパクッただけなんだけど。 class WIN32OLE_METHOD def help "#{name}(#{__help_params__.join(', ')}) As #{return_type}" end private def __help_params__ params.map do |p| "#{'[in]' if p.input?}"\ "#{'[o…

irb から WIN32OLE を使うときのおまじない

WIN32OLE を使って Excel のファイルを開いているときに、うっかり irb を終了すると Excel のプロセスが残ってしまう。そこで、このおまじない。 $ irb -rwin32ole irb(main):001:0> excel = WIN32OLE.new 'Excel.Application' => #<WIN32OLE:0x1014ecd0> irb(main):002:0> at_ex</win32ole:0x1014ecd0>…

第34回 Ruby/Rails 勉強会 - 演習 3

演習問題のつづき。 バイナリサーチを再帰で実装してください。 class Array def bsearch(o, n = 0) return nil if empty? i = size/2 if self[i] == o i+n elsif self[i] > o self[0,i].bsearch(o, n) else self[i+1,i].bsearch(o, n+i+1) end end end a = …

第34回 Ruby/Rails 勉強会 - 演習 2

演習問題 のつづき フィボナッチ数を計算するプログラムをループ版と再帰版の両方を書いてください。 再帰版 def fibonacci(n) case n when 0 0 when 1..2 1 else fibonacci(n-2)+fibonacci(n-1) end end (0..8).each do |i| fibonacci i # => 0, 1, 1, 2, 3…

第34回 Ruby/Rails 勉強会 - 演習 1

第34回 Ruby/Rails 勉強会 の宿題。 疎な配列と同じデータを表現するハッシュを比較する。 以下のようにアクセスできるデータを作成して比較する。 a[0] # => 0 a[10] # => 10 a[90] # => 90 each すれば違いが分かる。 def dump(e) print e.class e.each{|i…

オブジェクトの順序

C++

オレオレクラスのオブジェクトを STL のコンテナに詰めたい。vector になら詰められるけど、set に詰めようと思ったら、オブジェクトの順序を決めないといけない。operator class Foo { ... public: bool operator<(const Foo& rhs) const { return id < rhs…