RUBY

多重代入、暗黙の型変換

to_aryメソッドが定義されてれば、Arrayじゃなくても多重代入っぽいことが出来た。 class Foo def to_ary [100, 200] end end foo = Foo.new a, b = foo p a #=> 100 p b #=> 200 下の書き方はアレな感じだ。 c = foo p c #=>#<Foo:0xb7cb95a0> d, = foo p d # => 100</foo:0xb7cb95a0>

Kirisame

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/kirisame/ext/?root=svn とりあえず動くは動いた。 require 'kirisame' client = Kirisame::Client.tcp('127.0.0.1', 3306, 'root', nil, 'mysql') rs = client.query('select * from user') if rs.done? …

Zip/Ruby、File、抽象化

open(path) do |f| Zip::Archive.open_buffer(f.read) 上のようなコードをWebで見かけて「なんでFileオブジェクトを受け取れないんだっけ?」としばし考え込む。 それで、Fileオブジェクトから実体(FILE構造体、またはファイルディスクリプタ)を取り出せな…

mongo_ext-0.19.1-x86-mswin32.gem

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/mongo_ext-win32/?root=svn 細々と修正してVC9でビルド。mongo_extなくても動くみたいな感じだし、必要なかったかも。 defファイルがあるので、そのうちmswin32版が出るのかも。 WinSock2をリンクしてるけ…

最新のMySQLPlus

githubに2つリポジトリがあったり*1 *2、gemで検索するとバージョン0.1.1が2つあったり*3、RubyForgeにプロジェクトがあったりと、よく分からない状況のMySQLPlusだが、コードを読んだかぎりではgithubにあるoldmoe's mysqlplusが最新のようだ。 *1:http:/…

MySQLPlusのユースケース

MySQLPlusのユースケースについて、つらつらと考えてみた。 MySQLPlusはMySQLに非同期でクエリを投げられるドライバで、ちょっと見ただけだと「パフォーマンスが上がるかも」と思いそうだが、使いどころが難しい。 使いどころが難しい理由は ResultSetの取得…

ActiveTokyoCabinet 0.1.1

http://activetokyocabi.rubyforge.org/ActiveTokyoCabinet 0.1.1をリリースしました。 これは何? ActiveRecordのTokyo(Cabinet|Tyrant)のテーブルデータベースのアダプタです。 TokyoTyrantをActiveRecordのように使えるMiyazakiResistanceもあるんですが…

シンプル(=手抜き)なSLQ条件句パーサ

searchconditionparser.y class SearchConditionParser options no_result_var rule search_condition : boolean_primary { [val[0]] } | search_condition AND boolean_primary { (val[0] << val[2]).flatten } comparison_predicate : id COMP_OP value { …

TokyoCabinetのテーブルデータベースをSQL(もどき)で検索・更新できるようにする

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/tcsql/?root=svn 文字列リテラルのエスケープとか、エラー処理は適当。 #!/usr/bin/ruby require 'rubygems' require 'tcsql' require 'pp' include TokyoCabinet def go(sql) puts <

Ruby1.9、Windows、バイナリ

Ruby1.9のライブラリの、Windowバイナリってあんまり配布されていないような気がする。 野良ビルドしている人は多そうだし、バイナリだけ集めたポータルって作れないもんかなー?

POPFileの単純ベイズの実装

これを見ながら。 たぶんどっかまちがってるはず。 class Classifier class Bucket attr_reader :name attr_reader :words def initialize(name, classifier) @name = name @classifier = classifier @words = 0 end def <<(words) words.each do |word| @cl…

Aaron Pattersonさんがthe 2009 ruby chindogu prizeにノミネートされてた

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/339621 たしかに変わったツールだ。

日本Ruby会議2009のチケット買えた

17日に追加販売開始ってすっかり忘れてて、ほとんど諦めてたら何故か買えた。

コードの圧縮を試みる

C++だと似たようなコードを繰り返し書いていたので、コードの圧縮を考えてみる。 #include <string> #include <map> #include "hello.h" using std::string; using std::map; class MyMap : public DataWrapper<MyMap> { std::map<string, string> m; DEF(initialize, (0, ())) { return Qnil; } </string,></mymap></map></string>…

bayon/Ruby

CodeReposに移動。 http://coderepos.org/share/browser/lang/ruby/ruby-bayonRubyのクラスを間に挟むようにした。 require 'bayon' docs = Bayon::Documents.new docs.cluster_size_limit = 3 docs.add_document('Jacob' , 'J-POP' => 10, 'J-R&B' => 6, 'R…

bayon/Ruby 0.1.0

http://bayon.rubyforge.org/

ruby-dice

http://rubyforge.org/forum/forum.php?forum_id=33025 いい発想だwww

bayonのRubyバインディング

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-bayon/?root=svn http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-bayon/ext/bayon.cpp?root=svn&view=markup おおむね出来た。 require 'bayon' include Bayon $users = { 1 => '阿佐田', 2…

Zip/Ruby 0.3.2

http://rubyforge.org/frs/?group_id=6124 SHITAMORI Akiraさんからマクロの誤りのご報告があったので、修正してリリースしました。 Index: libzip/zip_error_to_str.c =================================================================== --- libzip/zip…

渡されたブロックをProcで取得する

忘れがちなのでメモ。 rb_block_proc();

rb_iterate

忘れがちなのでメモ。 #include "ruby.h" static VALUE main_proc(VALUE arg) { VALUE each = arg; return rb_funcall(each, rb_intern("call"), 0); } static VALUE block(VALUE call_arg, VALUE block_arg, VALUE self) { rb_p(call_arg); rb_p(block_arg)…

win32fiber(失敗)

WindowsのFiberでcoroutineを作れないかと思ったものの、案の定、失敗。 動かないソースだけ貼り付けとく。 #include <windows.h> #include "ruby.h" static VALUE Fiber; static VALUE FiberError; struct win32fiber { LPVOID main_fiber; LPVOID fiber; VALUE proc; </windows.h>…

Queueによるcoroutineもどき

require 'thread' class Coroutine def initialize(&block) raise 'block not given' unless block_given? @q = Queue.new @th = Thread.start do @q.pop block.call(self) end end def yield @q.pop end def resume(*args) @q.push(args) end end coroutine…

sparsehash 0.1.0

http://sparsehash.rubyforge.org/ リリースしました。ファイルはCodoReposに置いてます。 http://coderepos.org/share/browser/lang/ruby/ruby-sparsehash

Sparse Hash: Linuxでの測定

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-sparsehash/ext/sparsehash.cpp?root=svn&view=markup Linux上だと実用的な速度に見えなくもない。 [root@andLinux ruby-sparsehash]# ruby test.rb SparseHashMap 1000000 Sparsehash::SparseHashMa…

ついでにSTLのマップのバインディングも作ってみた

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-sparsehash/sparsehash.cpp?revision=2640&root=svn&view=markup テンプレート、強力だなー。 key_compareの実装の仕方があっているのかどうか…。 rnum= 100 10000 1000000 Hash 0.454 sec. / 0.168 …

Sparse HashのRubyバインディング

Sparse Hashに興味があったので、Rubyバインディングを作ってみた。http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-sparsehash/?root=svn #include "google/sparse_hash_map" #include "google/dense_hash_map" #include "sparsehash_internal.h" n…

Sparse HashのRubyバインディング: アクセス速度

一応、アクセス速度も測ってみる。 require 'sparsehash' require 'timeout' include Sparsehash [100, 10000, 1000000].each do |rnum| [Hash, DenseHashMap].each do |clazz| puts("#{clazz}: #{rnum}") hash = clazz.new (0...rnum).each do |i| buf = sp…

Sparse HashのRubyバインディング: charを使う

charを使えば少しは早くなるかもと思って、少し修正。 #include "google/sparse_hash_map" #include "google/dense_hash_map" #include "sparsehash_internal.h" #include <cstring> namespace { template <class T> struct Sparsehash { typename T *m; static void rb_sparse</class></cstring>…

ruby_errinfo -> rb_errinfo()

1.9でruby_errinfoがrb_errinfo()になったらしい。 Tue Jan 2 10:29:54 2007 Eric Hodel <drbrain@segment7.net> * ext/zlib/zlib.c: fix to compile on YARV ruby_errinfo -> rb_errinfo() Mon Jan 1 08:07:06 2007 Koichi Sasada <ko1@atdot.net> * ext/tk/tcltklib.c: fix to compile on YARV r</ko1@atdot.net></drbrain@segment7.net>…