Ruby

るりまを使おう

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 を使えるよ…

文字コードと文字の変換

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…

暗黙の型変換

Ruby は暗黙の型変換をしてくれない気の利かない言語だと言われるが、なかなかどうして結構型変換してくれる。例えばこんな感じ。 "%d" % "0xff" # => "255" # 16進数を 10進数に変換して再文字列化 "%s" % 0 # => "0" # C 言語なら SEGV もの 試しにオレオ…

オブジェクトの等値性

ややこしいのでメモ。 equal? ふたつの式が指すオブジェクトが同一か? == ふたつのオブジェクトの値が等しいか? eql? ハッシュキーが等しいかどうかチェックするために Hash クラスが使う。 === case 文の when で使われる。 =~ 正規表現のマッチ。 equal? a…

ケブンッリジ関数

週末の第 34 回 Ruby/Rails 勉強会でこんな演習問題が出るんじゃないかと予想。Ruby 関西の ML で発言すると、またネタを潰してしまう可能性があるので、誰も見ていないであろう ここで ひっそりとやってみる。 適当にやると、こんな感じ。 class String def…

第33回 Ruby/Rails 勉強会 - 演習 2 - また修正

第33回 Ruby/Rails 勉強会 - 演習 2 - 修正 --- cat.rb 2009-05-11 18:28:58.552712500 +0900 +++ /cygdrive/g/cat.rb 2009-05-11 18:34:02.000000000 +0900 @@ -1,10 +1,7 @@ -#! /usr/local/bin/ruby19 +#! /usr/local/bin/ruby19 -EASCII-8BIT require 'o…

第33回 Ruby/Rails 勉強会 - 演習 2 - 修正

第33回 Ruby/Rails 勉強会 - 演習 2 no6v さんに指摘されたので修正。 --- cat.rb.org 2009-05-06 20:11:03.000000000 +0900 +++ cat.rb 2009-05-06 20:46:31.000000000 +0900 @@ -65,6 +65,7 @@ def squeeze_blank!(buf) buf.gsub!(/(\r?\n)\1+/, '\1\1') +…

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

第33回 Ruby/Rails 勉強会 演習 2 cat コマンドを実装してください。 see also cat(1) Mac は BSD cat なので、オプションはこれだけ。 でも usage の表示だけ GNU cat からパクってきた。#! /usr/local/bin/ruby19 require 'optparse' Encoding.default_int…

るびまのプレゼント当たった

また O'Reilly から T シャツが届いた。るびま 0025 号 の読者プレゼント。うれしい。

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

第33回 Ruby/Rails 勉強会 宿題の添削はしてくれるんだろうか? 演習 1 CSV ファイルを分割します。分割数 n を指定できます。 読み込むファイル名を指定できます。 出力先ディレクトリを指定できます。 出力ファイル名のプレフィクスを指定できます。 なんだ…

第33回 Ruby/Rails 勉強会

久々の Ruby 勉強会。 今回は女子大生の参加も多かった。 今更はじめる Cucumber by Sixeight さん plain text でテストが書ける。 これはすごい。次回以降、実践編にも期待だ。 Ruby ではじめるハードウェア制御のアレコレ by keisuken さん パーツ購入方法…

refe.el を使う。

refe.el とは Emacs から ReFe を使うためのインターフェイス。最新版は …… たぶん公式に配布してるとこはない。*1手元にあった最新版と思しき refe.el を動かしてみると、候補の補完ができない。本来なら複数のクラスに存在するメソッドを引くと、クラスの…

ReFe で at_exit を引くとエラー

ReFe とは、Ruby の日本語リファレンスマニュアルを引くためのツール。昔は refe というコマンドがあったけど、現在はるりまの bitclust に取って代られた。詳しくは るりま Wiki を参照。 ところで refe コマンドは、どうなってるのが普通なんだろうか? コ…

リテラルの % 表記

普段使わないので、すぐ忘れる。リテラルを % 表記すると、任意の文字をリテラルの区切り文字に使える。 % 表記 式展開 例 ふつうのリテラル %q 不可 %q|foo| 'foo' %Q 可 %Q(foo) "foo" % 可 %[foo] "foo" %x 可 %x<echo foo> `echo foo` %w 不可 %w{foo bar} ['foo',</echo>…

やっぱり rct-complete-symbol が動かない

最近 rcodetools に文句ばかり言ってて申し訳ないけど、やっぱり rct-complete-symbol が動いてないっぽい。マルチバイト文字を含む行で rct-complete-symbol すると、 # -*- coding: utf-8; -*- "こんにちは".enc # これは補完できる エンコーディングが ut…

anything-rcodetools 使ってみた

anything とは はてなキーワードの anything を参照。 anything-rcodetools とは anything を使って Ruby スクリプトの入力を補完するもの。例えば [].len を補完して [].length にしてくれる。 必要なもの anything.el anything-rcodetools.el FastRI るり…

rct-complete の Ruby 1.9 用クイックハック

rct-complete とは Ruby コードの編集中にメソッド名などを補完してくれる機能。 rcodetools に含まれる。Emacs で以下のコードを書いて、 "hello".enc M-TAB すると、 "hello".encod メソッド名の途中まで補完される。もう一度 M-TAB すると、メソッドの候…

ひとりで eXtreme Reading

「プログラミング言語 Ruby」を読んでいます。今まで、このての本は html でメモをとりながら読んでいた。そうすれば後で検索できてお得。その代わり、気になるところを確認しながらなので、やたら読むのが遅くなる。この読み方だと疲れるので、メモは止めて…

やっぱりエンコードが utf-8 だと xmp が動かない

elisp のコードも、Ruby のスクリプトも最新版にして、直ったと思ってたけど、直ってなかった。(;_;) cp932 でないと xmp が動かない 以下のコードは xmp できる。 # -*- coding: utf-8; -*- RUBY_VERSION # => "1.9.1" s = "\u20ac" s.encoding # => #<Encoding:UTF-8> 以下</encoding:utf-8>…

発表者募集中 - Ruby/Rails 勉強会 @ 関西

久しぶりに Ruby/Rails 勉強会@関西が開催されます。現在、発表者募集中。第33回 Ruby/Rails勉強会@関西のお題を募集します。日時: 2009 年 4 月 25 日 (土) 13:00〜17:00 場所: 京都女子大学 http://jp.rubyist.net/?KansaiWorkshop33募集締切りは 4 月 11 …

rct-complete-symbol できなくなった

最近 rcodetools の設定で、いつも rubikichi さんに助けて頂いている。 本当にありがとうございます。前回やっとのことで xmpfilter が動いたのだが、今度は rct-complete-symbol による補完ができないことに気がついた。以下のコードで M-TAB すると、補完…