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>
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? …
open(path) do |f| Zip::Archive.open_buffer(f.read) 上のようなコードをWebで見かけて「なんでFileオブジェクトを受け取れないんだっけ?」としばし考え込む。 それで、Fileオブジェクトから実体(FILE構造体、またはファイルディスクリプタ)を取り出せな…
http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/mongo_ext-win32/?root=svn 細々と修正してVC9でビルド。mongo_extなくても動くみたいな感じだし、必要なかったかも。 defファイルがあるので、そのうちmswin32版が出るのかも。 WinSock2をリンクしてるけ…
githubに2つリポジトリがあったり*1 *2、gemで検索するとバージョン0.1.1が2つあったり*3、RubyForgeにプロジェクトがあったりと、よく分からない状況のMySQLPlusだが、コードを読んだかぎりではgithubにあるoldmoe's mysqlplusが最新のようだ。 *1:http:/…
MySQLPlusのユースケースについて、つらつらと考えてみた。 MySQLPlusはMySQLに非同期でクエリを投げられるドライバで、ちょっと見ただけだと「パフォーマンスが上がるかも」と思いそうだが、使いどころが難しい。 使いどころが難しい理由は ResultSetの取得…
http://activetokyocabi.rubyforge.org/ActiveTokyoCabinet 0.1.1をリリースしました。 これは何? ActiveRecordのTokyo(Cabinet|Tyrant)のテーブルデータベースのアダプタです。 TokyoTyrantをActiveRecordのように使えるMiyazakiResistanceもあるんですが…
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 { …
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のライブラリの、Windowバイナリってあんまり配布されていないような気がする。 野良ビルドしている人は多そうだし、バイナリだけ集めたポータルって作れないもんかなー?
これを見ながら。 たぶんどっかまちがってるはず。 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…
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/339621 たしかに変わったツールだ。
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>…
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…
http://bayon.rubyforge.org/
http://rubyforge.org/forum/forum.php?forum_id=33025 いい発想だwww
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…
http://rubyforge.org/frs/?group_id=6124 SHITAMORI Akiraさんからマクロの誤りのご報告があったので、修正してリリースしました。 Index: libzip/zip_error_to_str.c =================================================================== --- libzip/zip…
忘れがちなのでメモ。 rb_block_proc();
忘れがちなのでメモ。 #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)…
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>…
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…
http://sparsehash.rubyforge.org/ リリースしました。ファイルはCodoReposに置いてます。 http://coderepos.org/share/browser/lang/ruby/ruby-sparsehash
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…
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バインディングを作ってみた。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…
一応、アクセス速度も測ってみる。 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…
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>…
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>…