Ruby

quicksort

今日はコード書いて無かったので何となくクイックソートを。

Boyer–Moore string search algorithm

実装したことが無かったなぁ、とふと思ったので、ちょっと書いてみた

リクルートコミュニケーションズの採用情報のところにあった問題

http://rikunabi-next.yahoo.co.jp/company/cmi0089954001/nx1_rq0008861224/ 「相手の思考を推理する」過程をプログラムで表現する問題です。 開発言語は問いませんので、慣れ親しんだ開発環境をご用意ください。 A, B, C の3人が 1〜5の5枚のカードを使っ…

undefined method `class_inheritable_accessor'

最近、ほとんどRailsに触っていないことに気がつき、なおかつRails3に触ってなかったことにも気がついたので、感触をつかむ第一歩として前に作っていたRails2のコードをRails3に移植している最中、表題のエラーがでたので対応した際のメモを残しておこうかと…

マルコフ連鎖で圧縮新聞っぽいことを

マルコフ連鎖って実際に使ったことが無かったので試してみた。 三階のマルコフ連鎖(でいいのかな?) 四階にしてみたらほとんど原文のままで面白くなかった.

再帰下降パーサーの練習

最近、あまりRuby触って無かったのでリハビリがてら...

WebDAVのfile & directoryの一覧を取得するたった一つの冴えたやりかた

タイトルの後半は尾ひれです。RubyのNet::HTTP#propfind経由でWebDAVのPROPFINDメソッドを呼べば良いのですが、Web上に個別の情報(WebDAVとRuby)があるもののつながった情報が見つからなかったのでメモ.Webサーバーに依存するかもしれないけれど、とりあえず…

ruby_heap_monitorを手直し

ヒープ領域中にあるオブジェクトのダンプ - komamitsu.log で作ったRubyのヒープ領域ダンプ用パッチを手直ししました。何とか使えるようになってきたかも。具体的には以下の対応です。 Railsで動かすとSegfaultる Nodeオブジェクトがウザいのでやっぱり消し…

TCP上でメッセージ送受信、のマルチプロセス版

OOPのメッセージ送信をTCP上で - komamitsu.logのマルチプロセス版をgithubにポコンと。http://github.com/komamitsu/message_passing まぁ、そうするとクラス変数が共有されなくなっちゃうんですけれども…そもそも、マルチスレッド版のコードではクラス変数…

OOPのメッセージ送信をTCP上で

Rubyはオブジェクト指向言語なので、オブジェクトのメソッド呼び出しは「オブジェクトに対してメッセージを送る」と考えることもできるそうな(アラン・ケイが発祥?)。であれば実際にオブジェクトに対してメッセージをTCPとかで送受信したくなるのが人情と…

ヒープ領域中にあるオブジェクトのダンプ

ってできないかねぇ?と先日同僚に聞かれたのですが、業務中は面接したり打ち合わせしたり技術調査をしたりで時間がなさそうなのと「これは何だか趣味の領域だなぁ」と思ったので、自宅で深夜こしょこしょとruby処理系へのpatchを書いていたのでした。で、そ…

gc_monitorを作ってみた

最近、Railsのメモリリーク絡みで困ることがあったので、何か簡単に(拡張ライブラリを書かずに)GCの状況を把握できないものかと思い、それらしいのを作ってgemにしてみました。http://github.com/komamitsu/gc_monitorまぁ、簡単に言うとCGされずに残ってい…

ruby1.8.7-p174にて、ThreadとIO.selectの組み合わせバグ

http://arika.org/diary/2009/07/31/ruby-1-8-7-pxx-vs-capistrano-2-5-x ちょうど同じところで半日悩んでいましたよ…Net::SSH::Transport::PacketStream.available_for_read?の def available_for_read? result = IO.select([self], nil, nil, 0) result &&…

プログラムがどこで止まっているか調べたい場合

1.8.7の話。1.9は変わっているかも。あと、Rubyはソースコードから-gつきでコンパイルしているもの限定(狭いなぁ)。 gdbでattach rubyのglobal変数である ruby_sourcefile, ruby_sourceline をprint わかる detachして何事もなかったのごとくquit $ gdb (g…

いまさらながらgemではまった

これまた列挙 Debian lennyのaptでrubygemsを入れると1.2 Rails2.2のアプリを動かそうとしたら, 「gemは1.3.1以上じゃないといけないよ」エラー 前に使っていた手段であるgem --system updateを試みると、「on Debianでは--systemは駄目よ」エラー gemのruby…

契約っぽいプログラミング

ふとD言語の仕様を眺めていたら、契約プログラミングがサポートされているらしい(http://www.kmonos.net/alang/wnd/whats.ja.html#dbc)ので、かなり心惹かれた。 あと、コンパイルがとても楽そうなのも素晴らしい。良い意味で節操がなさげなのもまぁ良いの…

編集距離

今月号のWeb+DB Pressを読んでいたら文字列間の差異の程度を表す編集距離の求め方が載っていた。ちょっと面白かったので再帰呼び出しでもっと綺麗に書いてみようかなと思ったら、ごちゃごちゃしそうだったので挫折。単なる Perl -> Ruby の移植になってしま…

Test::Unitとdefine_methodのコンボ

Rubyのテストを書く際、RSpecとTest::Unitを行ったり来たりしているのだけど、最近はTest::Unitのターン。で、jijixi's diary - 実は Rails で Test::Unit を使ってテストを書いているのは少数派なのではないか、という想像 , Mac OSX 10.5.2でFirewireのス…

TCPSocketがガベコレされるとTCP接続がcloseされるのかの件

なぜこんなことを調べているのかの発端はhttp://d.hatena.ne.jp/komamitsu/20090422/1240413644.http://www.ruby-lang.org/ja/man/html/trap_IO.htmlとかをみると、IOクラスではGC時にファイルをクローズしてくれているらしい(まぁGCまかせはイクナイと思う…

TCP close()だけに着目してmemcache-clientを覗いてみる

/usr/lib/ruby/gems/1.8/gems/memcache-client-1.7.2/lib/memcache.rbで「:vimgrep /^\s*\(class\|module\)\s/ % | cw」と打ってやると… 1 memcache.rb|31 col 1| class MemCache 2 memcache.rb|920 col 1| class Server 3 memcache.rb|1073 col 1| class Me…

DestructorはないけどFinalizerはあった件

http://d.hatena.ne.jp/komamitsu/20090422/1240413644でコードの違いからするとガベコレのタイミングでTCP close()しているようにも思えるけど、Rubyではデストラクタがないからなぁ… どうやってるんだろう?って書いたのだけど、そこ「ガベコレのタイミン…

memcache-clientライブラリ使用時に気になったこと

こんなコードを書いて接続数を増やそうとすると40接続あたりで一気に全ての接続が切れてしまう。 require 'rubygems' require 'memcache' 1.upto(100) do c = MemCache.new 'localhost:11211' c.stats sleep 0.3 end sleep 200 tcpdumpで眺めていたらmemcach…

今更ながら拡張ライブラリを書いてみる

ふと気がついたら、Rubyのinstance_evalとmodule_evalの違いや、defとdefine_methodの違いとかを忘れていてショックだったので、気合を入れ直そうとRubyの拡張ライブラリを書いてみることに。せっかくCなので、RBasic構造体のflagsにアクセスしてみようと思…

jQueryとWEBrickでJSONP

以下を組み合わせてゴニョゴニョしてJSONPを試してみたメモ。 jQuery で JSONP 2通り - てっく煮ブログ WEBrickをつかってActiveResourceのダミーサーバを作る - moroの日記 Webサーバー側はこんな感じ。 require 'rubygems' require 'activesupport' requi…

のっかりフィボナッチベンチ

恒例のフィボナッチベンチで V8 と Smalltalk、Ruby、Python、Scheme とを戦わせてみる - Smalltalkのtは小文字ですを見て、お手軽なのでなじみの言語で試してみることに。スペックがしょぼしょぼなので軽めで。 Ruby def fib(n) n < 2 ? n : fib(n - 1) + f…

「REXMLのDoS脆弱性」が恐ろしい件

を見ていたら、 「あーそうなんだ、でもうちの Rails のサービスじゃ REXML でパースする処理なんて書いてないから別にいいや」とか思っている方、大変危険です。 おれのことですね。わかります。 ということで、いい機会なのでhttpclientをgem installして…

Enumerableモジュール

先日、帰省からの帰りの新幹線で読む用に、以前から気になっていた以下の二冊を購入。初めてのRuby作者: Yugui出版社/メーカー: オライリージャパン発売日: 2008/06/26メディア: 大型本購入: 27人 クリック: 644回この商品を含むブログ (251件) を見る[24時…

define_methodの練習

ついでに、define_methodも練習してみる。というのも、上の練習の際、メソッド内でdefine_methodを使おうとしたら、ちょっとはまったので。 class Hoge def a def inner; puts "aaaa"; end inner end for_b = "i am b." define_method(:b) { puts "bbbb [#{f…

Integer#timesみたいなメソッド

先日、久しぶりにRubyをいじったら何だか手間取ったので、リハビリ開始。Integer#timesみたいなメソッドを書いてみようかと思ったのですが、驚いたことにループっぽい処理に対する拒否反応が!OCamlの影響だろうか… まぁ、再帰でいいじゃないかと。末尾最適…

googleカレンダーの情報取得

gcalapiを使うと簡単らしいので試してみた。 #!/usr/bin/ruby -Ku require "rubygems" require "googlecalendar/calendar" GCAL_ACCOUNT = "someone" GCAL_PASSWORD = "hogehoge" GCAL_FEED = "http://www.google.com/calendar/feeds/someone@gmail.com/priv…

ClassにあってObjectにないもの

mitsu@garlic$ ruby -e 'p Class.methods - Object.methods' ["nesting"] mitsu@garlic$

特異クラスはインスタンス生成できるの?

mitsu@garlic$ cat hoge.rb class C end c1 = C.new def c1.hoge puts "hello world!\n" end C1 = c1.class c2 = C1.new # c2.hoge <= undefined method `hoge' for #<C:0x8076220> (NoMethodError) puts C.object_id puts C1.object_id mitsu@garlic$ ruby hoge.rb 67350</c:0x8076220>…

モジュールの練習

モジュールのインスタンス変数名がぶつかったときどっちが勝つのか? module Mod1 def initialize @modval = 123 end def print_mval1 puts @modval end end module Mod2 def initialize @modval = 456 end def print_mval2 puts @modval end end class Cls …

the ruby way中

「第5章 RubyにおけるOOPと動的型操作」読み中。これまでのところ、技巧的にはRubyレシピブックとかなり重複している気がしていて、「便利なクラスを覚えたなぁ」ということは無いのだけど、Rubyの根底に流れるポリシーが染み込んでくるようで嬉しい。特に5…

text_fieldのvalue(datetime)のフォーマット

<% @journal.datetime = Time.now unless @journal.datetime %> <%= text_field 'journal', "datetime" %></p> こんなviewを書いて@journal.datetime有り/無しを試してみると。 あり 2007-11-01 00:00:00 なし Sat Dec 08 23:43:40 +0900 2007ちなみに、debugで…

vim-ruby

メモったつもりが忘れてた… % sudo gem install vim-ruby % which ruby /usr/local/bin/ruby % cd /usr/local/bin % sudo vim-ruby-install.rb

Yahooから株価情報を取得 #2

書き直した。正規表現の%記法である%rを使ってみた。 require 'net/http' require 'kconv' class YahooInfo @@regexes = { :name=> '<td nowrap>&nbsp;<b>(.*?)</b>', :exchange=> '</b>&nbsp;<b>【</b>(.*?):<b>', :price=> '取引値<br>.*?<b>(.*?)</b>', :volume=> '<td nowrap>出来高<br>(.*?)</td>', :capital=> '<td nowrap>時価総</td></b>…

yahoo株価情報から情報取得

株価情報を取ってきたかったので適当に頑張ってみる。 試行錯誤しながら進めてたので改めてみるとDRYでないなぁ。後できれいにしよう(regrep_strという名前も…)。 require 'net/http' require 'kconv' class YahooInfo def get(code) Net::HTTP.version_1_…

シンプルなDSL

もう、これでいいや。後は実際に必要になったら使いやすいように検討する方向で。 class Dsl def define(&block) self.instance_eval(&block) end def print_name puts 'my name is hogehoge!\n' end def print_age puts 'i am hogeteen!\n' end end dsl = D…

インストールメモ

新しいOSにcygwin+rubyをインストールしたので、それ以降のインストールについてメモ。 gem ダウンロード(http://rubyforge.org/frs/download.php/17190/rubygems-0.9.2.xxx)&解凍後、 $ ruby setup.rb : : Successfully built RubyGem Name: sources Versi…

まずDSLの勉強を…

青木さんのruby添削などでDSLの実装例が載っているが、限りなくシンプルなものを…、ということで以下のサイトを見つけた。後で読みます。読んでみた()。といっても英語はほとんど読んでない。読むの遅いし眠いので。 # The guts of life force within Dwemth…