ruby

unite-outline の近況: Ruby と RSpec の見出し抽出を改善

今秋から Rails やってます。というわけで、unite-outline の Rubyサポートを強化中。まずは、Ruby用 outline info の改善から。 def 以外のメソッド定義も拾う なんと、メソッドの定義は def しか拾ってなかったので、attr_accessor, attr_reader, attr_wri…

Vim の Rubyインターフェースを使ってみた

Rubyインターフェースを使い、ファイルのパスをゴニョゴニョするための一連のユーティリティ関数を書いてみた。それぐらい Vim script で書けよ、というものが大半*1だけど、一度使ってみたかったということもあり、練習も兼ねて。ていうか、色々と楽でいい…

watir-webdriverメモ - なるべく新規ウィンドウを作らないための小技

前置き Webアプリのテストなど、Webブラウザを使ってのルーチンワークの自動化にしばらく FireWatir を使っていましたが、 自分でパッチ*1をあてないと NameError や NoMethodError が出る*2 自分でパッチをあてないと text field に日本語文字列を設定でき…

wxRuby におけるスレッドの扱い

実行に時間のかかる処理を GUI をブロックせずに行いたい場合、通常はタイマかスレッドを使ってバックグラウンドで処理を実行します。wxRuby でも Wx::Timer.every を使って擬似的な並列処理をさせることが可能ですが、この場合プログラマがタイマイベントに…

Rubyノート - Test::Unit は assertion の数をいかにしてカウントするか

Test::Unit を使ったテストを実行すると以下のような結果が出力される。 Loaded suite /home/h1mesuke/wwx/test/unit/ts_all Started ................... Finished in 1.229511 seconds. 19 tests, 1131 assertions, 0 failures, 0 errors test の数は test…

Rubyノート - 定義するだけで実行される Test::Unit::TestCase の仕組み

% ruby tc_hoge.rb とやるとテストが走る。tc_hoge.rb にはクラスの定義しかないのに、なぜテストが実行されるのか? 長らく疑問だったので、Test::Unit のコードを追ってその仕組みを調べてみることにした。まずは require 'test/unit' で最初に読み込まれ…

簡易英和辞書コマンドを作成し、Vim から利用する

最近、Vim で英語のドキュメント(ソースコード中のコメント含む)を読む機会が増えました。カーソルの下にある単語の意味をぱぱっと引けるような英和辞書の機能が欲しいと思い、適当に(読解のヒントがなんか出ればいいや程度のノリで)作ってみました。肝…

end について

でっていう雑文。Ruby の、 def foo while bar if baz end end end なんてのを見て、end end end が見た目的になんだかなー、という人がいる。自分はこれを大変すっきりしている、美しいなあ、と感じるのだが、この手の審美的評価ばかりは、評価者の……そんな…

HyperTalk の repeat文の刷り込み?

loop do end とすべきところを、どういうわけか while end とやってバグを作り込んでいた。しかも、while の次のステートメント(ループの条件式と見なされていた)が真と評価できるものを返していたせいで、これが数週間もテストを通っていた。おいおい(;…

Rubyノート - 変数のスコープとブロック、の落とし穴

『プログラミングRuby 第2版 言語編』の p88 あたりで説明されている、 ブロックの実行時、ブロック内変数と同じ名前のローカル変数が既に存在していた場合は、その既存のローカル変数がブロック内でも使われます。 にまつわる問題に実際に出くわしたので、…

Rubyノート - Test::Unit におけるテストの順番

しょうもない思い込みのせいで陥穽にハマって思い切り時間をロスwああ、無意識に前提していることって恐いな。昨日から謎のエラーでテストがコケるもんで、原因は何だろうかと悪戦苦闘していたわけだが、原因はテストメソッド(def test_xxx)の実行順序を…

% を Ruby のキーワードに対応させる

Cygwin上の vim(setup.exe でインストールしたやつ)だと、なぜか Ruby のキーワードで % が効かないのでヘルプを漁ると、matchit.vim っていうプラグインの名前に行き着く。さらに調べると、このプラグインは同梱されているもののデフォルトでは無効になっ…

Vim における高速移動あれこれ@Ruby

編集中のスクリプトが大きくなってくると、「ただちに急行だぜ!」と思った位置への移動にだんだん時間がかかるようになってくる。これをなんとか短縮すべく、Vim における移動・検索コマンドをあれこれ調べてみた。他の言語でも意味的に大体同じ動きをする…

256倍のスピード(嘘)で Racc を学ぶ (2)

前回第4章まで読了。ふう。とりあえず、ここまでの Intp のコード↓ intp04.tar.gz ここにサンプルコードが置いてあるのは見つけたのですが、コードを眺めてるだけだとなんだか頭がもやっとしてくるので、あえて手打ちでやってます。時間はかかりますが、多分…

JoyToy を Ruby で書き直す (5)

前回「いまどきのプログラム言語の作り方」読了。サンプル言語 JoyToy の Ruby版 RoyToy も一応の完成。第9章でオブジェクトを作成できるようになり、第10章でオブジェクトの複製と継承(加算)が可能になりました。 roytoy09.tar.gz roytoy10.tar.gz オブジ…

JoyToy を Ruby で書き直す (4)

前回第8章まで完了。メッセージ式が使えるように。整数と文字列がいくつかのメッセージに応答できるようになった。 roytoy08.tar.gz RoyToy: puts(-123.abs()); 123 RoyToy: s = "Hello, world."; RoyToy: puts(s.substr(0, 5)); "Hello," RoyToy: puts(s.up…

JoyToy を Ruby で書き直す (3)

前回第7章まで完了。関数の定義が可能に。 roytoy07.tar.gz 再帰呼び出しもできるぜ! func fact(x) { if (x == 1) { 1; } else { x * fact(x - 1); }; }; puts(fact(10)); ↓ $ ruby roytoy.rb sample_codes/fact.rt 3628800 次回

256倍のスピード(嘘)で Racc を学ぶ (1)

「Rubyを256倍使うための本 無道編」を買いました。「いまどきの〜」と並行して、こっちもぼちぼちやっていこうと思います。とりあえず、第2章までの Intp のサンプルコード↓ intp02.tar.gz プログラミング言語を自作することが自分の目標の1つなわけですが…

JoyToy を Ruby で書き直す (2)

前回第6章まで完了。第5章までの内容で、変数と文字列、第6章までの内容で、真偽値、論理式、if文、while文、ブロック文が使えるようになった。 roytoy05.tar.gz roytoy06.tar.gz 次回

JoyToy を Ruby で書き直す (1)

1年程前に「いまどきのプログラム言語の作り方」という本を読みました。JoyToy というシンプルなインタプリタ言語の処理系を Java で作りながら、言語作りの基本を学ぶ、という内容の本でしたが、一昨日ぐらいからまた手にとって読み直してます。前々からプ…

Rubyノート - include すると関数的に呼び出せるモジュールメソッドの仕組み

モジュールにインスタンスメソッドとして定義された機能をモジュールメソッドとして使うには、Module#module_function によってインスタンスメソッドの定義本体を同じ名前のモジュールメソッドとしてコピーする。 # Sample code from Programing Ruby, page …

ARGF の機能

引数にファイルが指定されていればそれらを順次処理 そうでない場合は標準入力から読み込む UNIX のフィルタで一般的なこの動作を実現するのに、ARGF*1 を使う。 ARGF - Rubyリファレンスマニュアル ARGF を使って cat もどきを書くとこうなる。 while line …

ruby-electric-mode

閉じ括弧や end を自動で補ってくれる Ruby スクリプト編集用のマイナーモード、ruby-electric-mode がかなり便利なことを発見。ruby-mode に添付されていたのに、マイナーモードでなおかつ require しないと使えないようになっていたので、今日まで存在自体…

Emacs Lisp と Ruby

Emacs Lisp と Ruby の勉強を並行して行っている。その率直な印象として、Lisp と Ruby は似ている。Ruby はユーザーフレンドリーな Lisp という感じだ。表層部分(字句、構文)は違えど、内部の実装(構文木になる辺りから)はかなり似通ってるんじゃなかろ…

ActiveScriptRuby

「恋するプログラム」では ActiveScriptRuby + VisualuRuby で人工無能の GUI を実現していたので、サンプルを動かすために自分もこれらをインストール。ローカルで使っている tDiary を動かすために、既に Ruby-mswin32 (ja) がインストールしてあったのだ…

人工無能で Ruby入門

Ruby を勉強する必要が生じ、手頃な入門書を探していたところ、図書館で「恋するプログラム」という本を見つけた。恋するプログラム―Rubyでつくる人工無脳作者: 秋山智俊出版社/メーカー: 毎日コミュニケーションズ発売日: 2005/04メディア: 単行本(ソフト…