2009年11月12日木曜日

rubyによるincludeを用いたクラス拡張のイディオム

rubyでよく使うincludeを用いたクラス拡張のイディオムについてのメモというかサンプル。


サンプルはTextMateのbundleを参考にしました。



module IncExt
module ClassMethods
def foo
puts "foo"
end
end

module InstanceMethods
def bar
puts "bar"
end
end

def self.included(receiver)
receiver.extend ClassMethods
receiver.send :include, InstanceMethods
end
end

class Buz
include IncExt
end

Buz.foo # => "foo"
Buz.new.bar # => "bar"

2009年9月20日日曜日

NotePad++の設定

NotePad++を導入した際のメモ。

1.本体の入手


いずれかを入手する。
NotePad++UTF8版(本家)
NotePad++ UTF8+EUC-JP/ShiftJIS対応版
ダウンロードしたらインストーラを起動してインストールする。


2.Explorerプラグインのセットアップをダウンロード


ExplorerプラグインはNotePad++にエクスプローラ風のウィンドウを表示するためのプラグイン。
以下のURLからダウンロードできる。
http://sourceforge.net/projects/npp-plugins/files/Explorer/


3.Explorerプラグインのインストール


Explorer.dllをNotePad++フォルダ(デフォルトインストールの場合、C:\Program Files\Notepad++\plugins)内のpluginsフォルダに入れる。


4.プラグイン設定


メニュー>プラグイン>Explorer>Explorer...を選択してエクスプローラが起動

メニュー>プラグイン>NppExecの中から、Show Console DialogConsole Commands HistoryFollow $(CURRENT_DIRECTORY)を選択する

メニュー>プラグイン>NppExecExecute ...に良く使うコマンドを設定してSaveする。起動はF6で行う。


5.よく使うコマンドの登録(C++)


ちょとした確認のためのプログラムを書いてコンパイルして実行するバッチを登録しておく。cppを書き溜めるフォルダに以下の内容でbuild.batを作成すると便利。
call "%VS90COMNTOOLS%vsvars32"
cl.exe /EHsc "%1"
%2.exe


F6で開いたダイアログ下部のコンボボックスが<temporally script>の状態で
cd $(CURRENT_DIRECTORY)
build.bat $(FULL_CURRENT_PATH) $(NAME_PART)
をcommand(s)に入力する。
Save ...ボタンを押しC++ Build and Runと名前を付ける。

この状態でC++ファイルを開いてコマンドを実行するとコンパイルから実行まで行ってくれる。

追記


あくまでも簡易的にコンパイル実行するために利用するものなので、以下のように一行で書き下したほうが便利。フルパスを書かなければいけないがバッチファイル不要。
"C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat" && cl.exe /EHsc $(FULL_CURRENT_PATH) && $(NAME_PART).exe


Win7(64bit)で、VisualStudio2010の場合。
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat" && cd "$(CURRENT_DIRECTORY)" && cl.exe /EHsc "$(FULL_CURRENT_PATH)" && "$(NAME_PART).exe"




6.よく使うコマンドの登録(Ruby)


先ほどと同じようにF6でダイアログを開きcommand(s)に
cd $(CURRENT_DIRECTORY)
ruby.exe $(FULL_CURRENT_PATH)
を入力する。
次にSave ...ボタンを押しRun as Rubyと入力しておく。

実行したRubyスクリプトを開いている状態で実行すればRubyスクリプトが起動する。


7.その他の設定


メニュー>表示>右端で折り返すをしておくと便利。

Rubyの補完候補はデフォルトでは用意されていない。以下のURLから入手。
http://pastebin.com/f4fedbb27
ダウンロードしたらruby.xmlにリネームしてNotePad++フォルダのplugins\APIsに入れる。

2009年7月26日日曜日

rubyのCOM(win32ole)を使うためのTIPS

rubyからCOMを使えるようになると便利。
使う場合に役に立ちそうなTIPSをまとめる。



どんなCOMが使えるのか調べる




require "win32ole"
WIN32OLE_TYPE.progids.each do |id|
puts id
end

これでCOMのprogidがリストアップされる。



使いたいCOMのメソッドとヘルプの表示


各COMのメソッドからヘルプ情報を取得できる(場合がある)
たとえば、IEを使うための簡単なヘルプを表示するには以下のコードを実行すればよい。



require "win32ole"
ole_name = 'InternetExplorer.Application'
obj = WIN32OLE.new(ole_name)

list = []
obj.ole_methods.each do |m|
list << [m.to_s, obj.ole_method(m.to_s).helpstring]
end

list.uniq.each do |item|
puts "== obj.#{item[0]}"
puts "#{item[1]}\n\n"
end

2009年6月27日土曜日

rdocでriを後から生成するための3ステップ

Windows版のrubyをソースからコンパイルして利用することにしたのですが、riドキュメントを生成し忘れてしまいました。

ri用のドキュメント生成を忘れたまま放置するのは非常にもったいない。簡単に生成できるのでメモを残します。



前提

  • rubyのソースコードがあること

  • rubyのインストールが終了していること

  • ruby\binにパスが通っていること(ここではC:\ruby\binとします)

ステップ1:riドキュメントの出力先を知る

まずriドキュメントを、どこに出力すればよいか知る必要あります。
コマンドラインコンソールから次のコマンドを実行してください。
ri -h

僕の環境では、次のような出力となりました。
--system Include documentation from Ruby's standard library:
C:/ruby/share/ri/1.8/system

--site Include documentation from libraries installed in site_lib:
C:/ruby/share/ri/1.8/site

--home Include documentation stored in ~/.rdoc:
C:/Documents and Settings/USERNAME/.rdoc

--gems Include documentation from RubyGems:
C:/Documents and Settings/USERNAME/.gem/ruby/1.8/doc/*/ri

C:/ruby/lib/ruby/gems/1.8/doc/*/ri

とりあえず欲しいのはsystemのドキュメントなので、以下のパスが出力先です。
C:/ruby/share/ri/1.8/system


ステップ2:rdocでriドキュメントを出力する

ri用のドキュメントは、以下のようにソースコードの位置へ移動してからrdocコマンドを使って生成します。

ここでいうソースコードとは、rubyのコアの.cファイル(string.cとかarray.cとか)を含むruby自身のソースコードを指します。

ここの例ではC:\src\ruby-1.8.7-p174にソースコードが置いていある想定です。
ポイントはステップ1で調べた出力先を--opオプションで指定している部分になります。

cd C:\src\ruby-1.8.7-p174
rdoc --ri -op C:/ruby/share/ri/1.8/system

ここまでの作業で、rubyのソースコード(.cおよび.rbファイル)からriドキュメントが生成されます。


ステップ3:riでマニュアルを読む

あとは、riの使い方です。最初は、ここで説明している基礎的なコマンドだけで十分だと思います。

書式説明
ri クラス名ri Arrayクラスのドキュメントを参照する
ri クラス名.メソッド名ri File.basenameクラスメソッドのドキュメントを参照
ri クラス名#メソッド名ri Hash#rehashインスタンスメソッドのドキュメントを参照
ri searchキーワードri searchto_yamlキーワードで検索
ri -l参照可能な項目をリスト表示

ほかにも便利な使い方がありますが、最低これだけ知っていれば困らないかと。