しょんぼり技術メモ

まいにちがしょんぼり

ruby

yyyymmdd形式の日付を含むファイルのうち、欠落している日を探すスクリプト

hoge.yyyymmdd.logのような形式を持つログファイルが大量に手元にあり、そのうち欠落している日を探すという処理が必要になったので、Rubyでちゃちゃっと書きました。 結構あちこちでありそうなケースだと思うんですが、既存のツールの組み合わせで書く方法…

EmacsからYahoo翻訳を使う

国際会議の論文を書いていて、ある程度固まってきたので英訳する作業を始めたものの、いちいち書いてはYahoo翻訳にかけてチェック、書いてはチェックを繰り返すのは非常にめんどくさいので、なんとかならないかと思ってやってみた。・できること Emacsで範囲…

MessagePack RPC for Rubyのタイムアウト系のエラーについてのメモ

忘れてたので自分用にまとめておく。サーバ側: require 'msgpack/rpc' class MyServer def ping_sync "pong" end def ping_async as = MessagePack::RPC::AsyncResult.new # as.result("pong") as.result("pong at #{Time.now}") return as end end mysvr =…

Rubyで配列に対して空かも知れない配列を追加する時は、事前にempty?でチェックした方が早いが、まとめて追加してから一気にflattenした方が圧倒的に早いが、そんなことするよりconcatした方が早い。

タイトルで完結シリーズ。(ご指摘頂いたArray#concatについて追記しました)ある配列に対して、「空かもしれない配列」を追加していく処理が必要になった。 fruits1 = [:apple, :orange] fruits2 = [] fruits3 = [:grape] fruits_array = [fruits1, fruits2…

Rubyでifやcaseで頻繁に評価されるものに対して小手先の工夫をしてもあまり意味がなかった

タイトルで完結シリーズ。ある比較処理を頻繁に実行するとする。その比較対象が、ほとんどある値を取る場合、その値を優先的に評価してやると高速になるんじゃないか?と思い立って実験してみた。linuxのコードに出てくるif(likely(cond))やif(unlikely(cond…

Rubyのcatch句のコストはそこまで安くない

制御構造を適当にやっつけで作るときに(たまに)便利なcatch句のコストは、あまり安いわけではなさそうだ。 以下のベンチマークが妥当かどうかは別として、catchじゃなくてもできる処理ならば、catchを書かずに実現した方がたぶん早い。 ほとんどthrowする…

SL6.1にRuby 1.9(rpm) + Rails3 環境を作る

Scientific Linux 6.1のslリポジトリにあるRubyは1.8.7なので、自分で1.9のrpmを作ってインストールしてみた。 環境 $ cat /etc/redhat-release Scientific Linux release 6.1 (Carbon) checkinstallのインストール $ git clone http://checkinstall.izto.or…

Ruby1.9ではBignumのインクリメントはFixnumのインクリメントに比べて倍ぐらい遅い

タイトルで完結シリーズ。しかも割と「いまさら」ではありますが。システムの稼働中に延々とインクリメントする変数が必要だったので、実際に実験してみた。 先に結果を。 ***** Hello, this is a test benchmark script for Incrementing Integer number. I…

MessagePack-RPCでバイナリデータを扱うときにUTF-8のままsliceすると死ぬほど遅いのでforce_encodingしよう(Ruby 1.9)

Ruby 1.9から、文字列にそのエンコーディングが含まれるようになった。また、MessagePack-RPCでは、Encoding::ASCII_8BITの文字列を送っても、受け手側ではEncoding::UTF_8になってしまうという仕様がある。 そのため、受け取ったデータをそのままsliceした…

MessagePack-RPC for Rubyででかいデータをやりとりするときの性能についての簡単な調査

をやってみた。環境はLinux 2.6.35.6, Core2 Quad Q6600, 4GB RAM. $ ruby --version ruby 1.8.6 (2010-02-05 patchlevel 399) [x86_64-linux] 結果 結果から先に。 $ ruby mprpc-bench.rb 127.0.0.1 12345 10 ********** Local Call ********* 1MB 0.001449…

RubyでWHOIS情報を参照する

Rubyを使ったスクリプトの中で、WHOIS情報を参照したいことがあったので調べてみたところ、Whoisというgemがあるらしい。すばらしい。 gem install whoisでOK。リファレンス等はhttp://www.ruby-whois.org/api/を参考に。 単純に問い合わせたい Whois.whois…

RubyでDNSを解決したりする

自分用メモ。Net::DNS(net-dns) irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'net/dns/resolver' => true irb(main):003:0> require 'pp' => true # 8.8.8.8(google public dns)を使って名前解決を行うインスタンスを生成 irb(ma…

ファイルを開く際のモード指定の罠

いやぁハマった。RubyでFile.open()する際のモードの話。結論から言うと、"r+"が万能で、"w+"はすでにファイルがあるときは0バイトにされ、"a+"は末尾にしか書けない。リファレンスはこれ。読んだつもりだったけど理解が不十分だったらしい。 やりたいこと 1…

Ruby/PGPlot

ソースから入れたら詰まった。悲しい。 extconf.rbでは共有ライブラリ(.so)を見に行くけど、ソースからのインストールだとスタティックライブラリ(.a)しか作られないのが原因だったっぽい? NArray gemから入れる。 # gem install narray PGPlot 諦めてRPMか…

億とか京とか

Ruby-listのMLで流れていた、[ruby-list:47175] 金額を漢字フォーマット 億, 千, 万を見て、汎用的に「n桁で区切っていく接頭辞系」を作れないかなと思って試しにやってみた。 #!/usr/bin/ruby -Ku # -*- coding: utf-8 -*- Units = [ "" , "万", "億", "兆"…

IPアドレスを扱う

IPアドレス・サブネット関係の処理が必要になったので調べた。 "IPAddr"クラスを使うようだ。そのメモ。参照:プログラミング言語 Ruby リファレンスマニュアル irb(main):001:0> require 'pp' => true irb(main):002:0> require 'ipaddr' => true irb(main)…

dRubyをSSL越しに、クライアント認証付きで使う

http://segment7.net/projects/ruby/drb/DRbSSL/を参考に。SSL/クライアント認証を使わない場合に比べどれくらいのオーバヘッドが生じるのかを簡単にベンチマークしてみた。500回「new_with_uriして there_object.hello("")する」ベンチマークスクリプトを10…

RFuse-ngを使ってみる

Fedora12 x64で試す。ruby1.8, ruby-develを入れておく。解凍してパッチを当てる。次の内容のrfuse-ng.patch を作る diff -Nurdp org.rfuse-ng/ext/rfuse.c rfuse-ng/ext/rfuse.c --- org.rfuse-ng/ext/rfuse.c 2010-05-04 01:57:18.000000000 +0900 +++ rfu…

Rubyの例外について

Rubyのbegin-rescueについて勘違いしていたのでメモ。Rubyでは、Object->Exception->StandardErrorのような継承構造になっており、独自の例外クラスを作って識別する際には、Exceptionを継承するのではなく、StandardErrorを継承した方が(俺の)思っている…

イベントハンドラみたいなのをRubyで書きたい

C#で言うところのEventHandlerみたいな奴がRubyで欲しくなったので勉強してみた。 #!/usr/bin/ruby -Ku # -*- coding: utf-8 -*- # 呼ばれる側 その1 class Class1 def class1_print puts " called:Class1.class1_print()" end def class1_print_with_arg(ar…

DSとしてShule-aroonを使う

@repeatedly謹製のDS(Discovery Service)である、Shule-aroonを使ってみたメモ。 インストール 環境はCentOS5.4。SPとして動作させているサーバ上にDSを構築。 gitをインストーる。 http://brass.to/blog/yum_dag.htmlを参考にしてdagレポジトリを登録してお…

RindaのnotifyでマルチスレッドなTupleSpace

前回に続いてRinda。RindaのTupleSpaceを使ってデータをやりとりできるようになったので、今度はほかのプロセスからデータが更新されるようなケースで、その更新を反映させながら動作するようなデーモンっぽいものを作ってみます。ほかのプロセスなどによる…

Rindaで遊ぶ

LindaのRuby実装、Rindaを使うことになったのでそのメモ。Rindaすげーよ! Rindaについては http://www.druby.org/ilikeruby/d208.htmlをご覧ください。非常に丁寧な解説があります。 TupleSpaceデーモンを作ってみる いきなりかよ、って感じですが、今回作…

TypableMap Timelineコマンドを追加する

TIG(TwitterIRCGateway)のTypableMapについては、TwitterIRCGatewayをより(俺にとって)便利にする - しょんぼり技術メモをご参照ください。あるユーザの発言を表示したいときには、#Consoleで、 timeline [screen_name]としてやれば最近の発言が取得できま…

CentOS 5.3でmechanizeを使う

CentOS 5.3で WWW::Mechanizeを使おうとしたら、どうもうまく行かなくて困った。 libxml2-develやlibxslt-develをインストールしてもダメ。http://groups.google.com/group/nokogiri-talk/browse_thread/thread/56db4580e3670aedを見る限り、どうやらRuby 1.…

TwitterIRCGatewayをより(俺にとって)便利にする

※注意:本記事はすべてTwitterIRCGateway 2.xについての記述です。 また、TIGや付属のスクリプトはMITライセンスで提供されているため、 本記事におけるコードもMITライセンスとします。 TwitterIRCGateway(以下TIG)は、TwitterをIRCクライアントから使うこ…

ActiveRecordをRuby on Rails以外から使う時のメモ

自分用メモ。RoR以外でAR使いたいシーンがあったりなかったりするので。 require 'rubygems' require 'activerecord' としておいて、 ActiveRecord::Base.establish_connection( :adapter => 'postgresql', :host => 'localhost', :username => 'user', :pas…

バイナリファイルをURLエンコードしたものを出力する

curlに投げたりするために必要になったので、適当に書いてみた。 #!/usr/bin/ruby # check argument if (ARGV.length != 1) abort("Usage: bin2URLEnc.rb binaryfile") end infile = ARGV[0] File.open(infile, "rb"){|fp| while (buf=fp.read(1)) do s = sp…