しょんぼり技術メモ

まいにちがしょんぼり

2010-01-01から1年間の記事一覧

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

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

MessagePack-RPCのFutureについての簡単な実験

MessagePack-RPC for Rubyの非同期RPCで使われるFutureについての簡単な実験。実験環境はRuby 1.9.2。 結論を先に: Future.getを複数回呼ぶとどうなるの? → 別に問題ない Future.getはスレッドセーフ? → いいえ。ロックしないと死ぬ。 Future.getを複数回…

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…

そうだ、DNSを調べよう。

なんかYahooにつながらないネタがHOTなので。 基本 DNSの調査を行うときは、digコマンドが便利です。詳しくはぐぐれ。 $ dig A 調べたいホスト名 @使用するDNSサーバが(Aレコードに対する)基本形です。担当するネームサーバなども知りたいときは、AではなくA…

kvm/RBD(RADOS Block Device) に成功した

長かった…基本的には、wikiを参照。こいつの不正確な情報のせいで苦労したけど コンフィグ テスト用のコンフィグはこんな感じ。ceph1-3全てでMon, MDS, OSDを起動する。RBDだとMDSはいらないかも。 [global] debug ms = 0 [mon] mon data = /data/mon$id deb…

Gmail(に限らず)受信トレイはキレイにしよう

他人のGmailの画面を見ると、案外散らかってたり無造作にされてたりという印象があるので書いてみる。うちのGmailは、3分割されている。画像参照。Gmailには、"Multiple Inboxes"という機能がある(Labs)ので、これを使っている。 (1)受信トレイ 1つ目は、受…

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か…

続・ディスクイメージのスループット

ディスクイメージのスループット - しょんぼり技術メモの続き。ext3パーティションを作ってからマウントして計測していたが、思ったよりもvirtioがふるわずという結果に。twitterで相談したら、デバイスファイルに直接読み書きしてみたら?とアドバイスを受…

ディスクイメージのスループット

コミケ原稿の関係でKVMをいじっていたので、ついでにide modeとvirtioで比較してみようと思いついたので、早速測定。環境:C2Q 6600 / 4GB RAM / HGST 500GB SATA2.0 / Fedora 12 x64 / KVM(yumから)ゲストOS:2CPUs / 2GB RAM / Fedora 13 x64 準備 ホスト…

SuicaとかPiTaPaは何の略?

と言う疑問が、予想外のところで解決した。発端は情報処理学会のデジタルプラクティス。いつものようにトイレで用を足しながら流し読みしていたのだが、今月は「特集:ICカードが社会を変える」というもの。研究室物販システム用に、FeliCaのIDmを使った簡易…

億とか京とか

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

あるディレクトリにある全てのファイルの内容を置換する

d:id:d-kami:20100613を見て、それ別にRuby使わなくてもシェルで、しかも一行でできるよ、と思ったので書いておく。原理はカンタン、対象となるファイルをfindでリストアップして、xargsで他のコマンドに渡すだけ。sedコマンドは、"-i"オプションでファイル…

IPアドレスを扱う

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

V-Fieldを使ってみた

りべんじ。 前回のエントリについて 前回(d:id:syonbori_tech:20100530)はコンパイルに成功したところまで。そこでいくつか修正を行ったが、それがあってるかどうか不安だったので、[twitter:@frsyuki]に聞いてみた。 どうやら、"-static"はgccへの指定で、…

V-Fieldを使ってみたい

読み取り専用の分散多重化共有ブロックデバイス、V-FIELD(http://viver.sourceforge.jp/index.php?Scrapbook/V-FIELD)を使ってみたようとした。 環境 Fedora12, x86_64, V-FIELD changeset 69 下準備 レポジトリへのアクセスにmercurial、コンパイルにimake,…

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

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

FUSEをつかってみる

http://sourceforge.net/apps/mediawiki/fuse/index.php?title=Hello_Worldを丸パクリ。Linuxで、FUSE(Filesystem in userspace)を使ってHello worldなプログラムを書いてみる。 書かなきゃいけないもの ファイル情報を取得する getattr() ディレクトリ内の…

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…

http://to./が開けるしくみ

※2010/04/14 11:55追記 ブコメでのご指摘の通り、「なぜ開けるか」に対する答えは、「"to"のトップレベルドメイン(TLD)にAレコードが設定されているから」というシンプルなものです。"to"はトンガのTLDで、古くからTLDを売って外貨を稼いでいます。恐らく、…

Firefoxのブックマークで「キーワード」を指定すると便利だね、というエントリ

まあそれだけなんですが、備忘録もかねて。Firefoxでは、ブックマークの項目に「キーワード」というものがあります。これを使うと、ある特定のURLを簡単に入力できるようになります。たとえば、この図のように 名前 ふぁぼったー URL http://favotter.matope…

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デーモンを作ってみる いきなりかよ、って感じですが、今回作…