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…