Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Ruby

profiler.rb でエラー

WEBrick で作った proxy が遅いかな?という気がしたのでプロファイラにかけたのですが、 [2007-03-10 21:49:30] ERROR SystemStackError: stack level too deep /usr/lib/ruby/1.8/profiler.rb:9:in `==='とか。まぁ特に分析に支障はありません。 WEBrick …

WEBrick で作った proxy を daemon にする

WWW 上にぜんっぜんドキュメントがないので、 WEBrick のコードからたぶんこうだろうと勝手に推測。 s = WEBrick::HTTPProxyServer.new( :BindAddress => 127.0.0.1, :Port => 8080, # 中略 ) # 中略 WEBrick::Daemon.start { s.start }と、 WEBrick::Daemon…

WEBrick で広告ブロッカー

http://rucila.s43.xrea.com/memo/?date=20041020#p02 WEBrick で広告ブロック proxy を作って Firefox + adblock から Opera と proxy のタンデムシステムへ、という目論見ですが、この記事がだいぶ役に立ちました。 はてなの広告がブロックされずに悩んで…

RubyGem で入れたライブラリを require

Vine Linux 3.2 の上に無理矢理 ruby-1.8.4 をインストール さらに RubyGems もインストール RubyGems から sqlite3-ruby をインストール ……とやっても、 ruby スクリプトから sqlite3 を require すると…… ./dbtest.rb:3:in `require': no such file to loa…

続 ・ Vine 3.2 に Ruby on Rails をインストール

Ruby on Rails を Vine Linux 3.2 にインストールして、さてプログラムを作ろうとすると次のようなメッセージが。 $ rails cookbook Rails requires Ruby version 1.8.2 (2004-12-25) or later. You're running 1.8.2 (2004-11-03); please upgrade to conti…

Vine 3.2 に Ruby on Rails をインストール

http://webrec.jp/blog/log/eid14.htm を参考に行った。 $ wget http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz $ tar xvzf rubygems-0.8.11.tgz $ cd rubygems-0.8.11 $ sudo ruby setup.rbここまではよし。 $ sudo gem install rubygems…

Debian で net/https を使ってはてなにアクセス

(2/26 追記: 解決! id:satob:20060226:p2) 上のトピックの続き。 Debian の場合、そもそもシステムで共用の認証局証明書リストというものがないらしい。見つかったものとしては…… $ locate ca-bundle | xargs dpkg -S acroread: /usr/lib/Adobe/Acrobat7.…

Vine Linux 3.2 で net/https を使ってはてなにアクセス

Vine Linux 3.2 で、 Ruby で net/https を使ってはてなにアクセスしようとしてもエラーになる。例えば、 Ruby リファレンスマニュアル の net/https のページにある次のコードは、実際に実行するとエラーが出る: $ cat ssl.rb #!/usr/bin/env ruby require …

net/https の在処

Ruby の net/https は Ruby のパッケージにデフォルトでは入っていない *1 。各ディストリビューションにおいてこのファイルが入っているパッケージは…… Vine Linux では ruby-openssl パッケージ Debian GNU/Linux では libopenssl-ruby パッケージ (from h…

「Rubyレシピブック 268の技」正誤情報?

「017 alias と undef (p.31)」に alias 元の名前 別名とあるけれど alias 別名 元の名前の間違いでは? irb(main):001:0> def hoge irb(main):002:1> print "hoge\n" irb(main):003:1> end => nil irb(main):004:0> alias hoge piyo NameError: undefined m…

1 と 2, 3 と 4, ... を対象に実行

「Rubyレシピブック 268の技」を読んでいるところ。 6.times { |i, j| print "[#{i}/#{j}]" } => [0/][1/][2/][3/][4/][5/][0/1][2/3][4/5] という出力を得たいなら…… 0.step(5,2) {|i| print "[#{i}/#{i+1}]" } => [0/1][2/3][4/5]よく見たら、リファレンス…

Vine Linux 3.2 (Ruby 1.8.2) で net/https

リファレンスマニュアルの 添付ライブラリ のページには net/https SSL/TLS 拡張 HTTP クライアントライブラリ ruby 1.8 feature とあるけれど、 "ruby 1.8 feature" のページには net/https についての記述がない。 Vine Linux 3.2 (Ruby 1.8.2) でテストを…

Ruby を 256 倍使うための本 極道編のまとめ (6)

private method のテストをしたい場合、ToPublic モジュールを使う。 ToPublic モジュールを include して、テスト対象を instantiate するときに to_public メソッドを利用する。次のような感じ。 ... require "runit/topublic" class TestHoge < RUNIT::Te…

Ruby を 256 倍使うための本 極道編のまとめ (5)

RUnit には、 c2t.rb という便利なツールがあって、テストコードの雛形を作ってくれる。具体的には、第一引数をクラス名と見做して、そのクラスのテストクラス(中身は空)が出力される。 $ c2t.rb Hoge require 'runit/testcase' require 'runit/cui/testru…

Ruby を 256 倍使うための本 極道編のまとめ (4)

テストの出力を TestFoo#test_method1 . TestFoo#test_method2 . TestFoo#test_method3 .じゃなくて、 ....F..みたくしたい場合は次。 RUNIT::CUI::TestRunner.quiet_mode = true

Ruby を 256 倍使うための本 極道編のまとめ (3)

1 つのメソッドにつき 1 つのテストメソッド 1 つのクラスにつき 1 つのテストクラス このようにできない場合、テストではなくてメソッドの方を分割できないか考えてみること(RubyUnit ってよりは UnitTest 全般の作法だなぁ)。 あと、モジュールのテスト…

Ruby を 256 倍使うための本 極道編のまとめ (2)

id:satob:20050613:p5 の問題は、例えば次のようにして解決する。require されたときには実行されず、コマンドラインから実行したときには実行される。 if $0 == __FILE__ 処理内容 end

Ruby を 256 倍使うための本 極道編のまとめ (1)

Rubyのライブラリを配置するディレクトリの別。 site_ruby Ruby に同梱されていないライブラリ用ディレクトリ site_ruby/1.6 Ruby version 1.6 でしか動作しないライブラリ用ディレクトリ site_ruby/1.6/i586-linux OS は Linux, i586 上でしか動作しないラ…

One-Click Ruby Installer と RubyGem

One-Click Ruby Installer で Ruby をインストールすると付いてくる RubyGem が素晴らしい。 Windows でも、"gem install hogehoge" とすると apt-get よろしく勝手に hogehoge を持ってきてインストールしてくれる。

Ruby スクリプトからはてなにログインしたいんだけど……

http-access2 のドキュメントは http://dev.ctor.org/doc/http-access2/ http-access2 requires Ruby/OpenSSL. Ruby/OpenSSL は Ruby 1.8 だと標準添付なので、そっちを使った方がよさそう っていうか http-access2 はデカい上にドキュメント全然無いし、イ…

いっつもこういうところでハマる(未解決)

./Dict.rb:68:in `initialize': wrong # of arguments(1 for 3) (ArgumentError)Dicr.rb の 68 行目は次。 centerphrase = Entry.new(getCurrentLine(center)).getPhraseEntry クラスの initialize メソッドは次。 def initialize(lines)lines という名前の…

RUnit でテストを走らせようとしたら反応がない場合

hoge.rb に書いてある class Hoge をテストしたいとする。テスト用ファイルとクラスはそれぞれ test-hoge.rb, HogeTest 。 $ tail -1 test-hoge.rb RUNIT::CUI::TestRunner.run(HogeTest.suite) $ ruby -w test-hoge.rb (反応がない……)このような場合、 ho…

wxRuby がインストールできない

Vine Linux 2.6r4 にて。 $ cd src/ $ ruby extconf.rb creating Makefile $ make g++ -fPIC -O2 -m486 -fno-strength-reduce -fPIC `wx-config --cxxflags` (snip) -c -o wx.o wx.cpp g++ -fPIC -O2 -m486 -fno-strength-reduce -fPIC `wx-config --cxxflag…

多値リターンを別のメソッドの引数とする (Ruby 1.6)

#!/usr/bin/ruby class A def foo(a, b) print a.to_s + "/" + b.to_s + "\n" end def A::bar return 100, 200 end end m = A.new.method(:foo).to_proc m.call(A::bar())instance.method(:methodname).to_proc で Proc オブジェクトを得て、Proc#call を使…

今日の正規表現

/(?: \/ )?(?:(?:◆)|(?:【(.+?)】))(.+?)(?: \/ )?(?:(?:◆)|(?:【(.+?)】)|$)/……英辞郎のバカヤロー! 私としては、後方参照を伴わないグループ化がもう少しラクに書けるといいなぁと。(?:(?:foo)|(?:bar))? みたいなのが……。

non-interactive rdic

英辞郎を非インタラクティブに引く方法が無かったので自前で作る。プログラミングは久しぶりだ。 if-elsif の順序を変えたらバグが直った。元に戻してみようと思った時には既に直っていたようだ。 最長一致でハマる。 例外の使い方がよく分かってない人 orz …

String to Array

# 一文字ずつ Array に納める array = str.split(//) # char[] みたいにする array = str.unpack("C*") "a b c".unpack("C*") => [97, 32, 98, 32, 99] "a b c".split(//) => ["a", " ", "b", " ", "c"] "a b c".split() => ["a", "b", "c"]

File.rename

移動先のファイルが存在した場合は上書きするのか……ファイルロックができないじゃないか。 http://www.din.or.jp/~ohzaki/perl.htm#File_Lockついでに、Ruby の File.flock はスレッドセーフでない、らしい。

eval でコンパイルエラーを検出

Perl だと、次のようにして $code が Perl プログラムとして妥当かどうか検査できる。 $code = "'hoge' =~ /piyo/"; eval($code); print "ERROR!" if $@ ne ""; さて、Ruby で同様に「ある文字列が Ruby プログラムとして妥当かどうか検査する」にはどうした…

Why?

irb で実行。 irb(main):009:0> if '| hogehoge' =~ /^| (.*)/ then print "ok\n" end ok nil irb(main):010:0> print $1 nilnil irb(main):011:0> if '| hogehoge' =~ /^\| (.*)/ then print "ok\n" end ok nil irb(main):012:0> print $1 hogehogenil 最初…