memcached も試してみた

前回に引き続き memcached で試してみました. 結果は期待通りです.

$ ruby m.rb 100
      user     system      total        real
  0.030000   0.010000   0.040000 (  0.050384)

$ ruby m.rb 1000
      user     system      total        real
  0.290000   0.070000   0.360000 (  0.421055)

$ ruby m.rb 10000
      user     system      total        real
  3.830000   0.480000   4.310000 (  4.862486)

m.rb -- memcached クライアント

require "rubygems"
require "memcache"
require "benchmark"

cache = MemCache.new "localhost:11211"
puts Benchmark::CAPTION
puts Benchmark::measure {
  ARGV[0].to_i.times {|i| cache[i.to_s] = "hello world #{i}" }
}

追記(2009/6/11 0:04)

system_timer を gem install すると以下のようにさらに速くなりました.

$ ruby m.rb 10000
      user     system      total        real
  1.700000   0.480000   2.180000 (  2.577873)

オンメモリキャッシュサーバとして druby を試してみた→失敗

ようわ memcached 的な用途に druby をつかえないかなーと思って試してみたけど現実を見せつけられた格好です, というログです.

実行結果

$ ruby drbclient.rb 100
      user     system      total        real
  0.030000   0.010000   0.040000 (  0.109558)

$ ruby drbclient.rb 1000
      user     system      total        real
  1.020000   0.110000   1.130000 (  3.246166)

$ ruby drbclient.rb 10000
      user     system      total        real
 90.040000   4.640000  94.680000 (239.860364)

drbserver.rb -- druby サーバ

require "drb/drb"
front = []
DRb.start_service("druby://:8888", front)
puts DRb.uri
sleep

drbclient.rb -- druby クライアント

require "drb/drb"
require "benchmark"

DRb.start_service
there = DRbObject.new_with_uri "druby://:8888"

puts Benchmark::CAPTION
puts Benchmark::measure {
  ARGV[0].to_i.times {|i| there << "hello world #{i}" }
}

試した感じ, オブジェクト数の増加とともに指数関数的なパフォーマンス劣化が生じる模様です.

追記 6/12(1:02)

druby 作者である id:m_seki さんご本人にご指摘をいただいたので見直したところ, サーバ側のフロントオブジェクトが Array で, かつ, << メソッドを使っているために遅いんだよ, と教えていただきました. 関さん, ありがとうございます.

理由として, 上記のコードの場合

  • フロントオブジェクトを値渡ししている
  • << メソッドの戻り値が self なので, << メソッドを呼び出すたびにサーバ→クライアントへフロントオブジェクトのコピーを渡してしまう
  • 結果 O(N2) となる*1

という動きになっていたようです. 値渡しがこういう現象につながるとは想像がおよびませんでした.

というわけで, フロントオブジェクトを値渡し→参照渡しへ修正するとリニアな結果になりました. サーバ側は下記に記載している drbserver2.rb, クライアント側は上記の drbclient.rb です.

$ ruby drbclient.rb 100
      user     system      total        real
  0.030000   0.000000   0.030000 (  0.102600)

$ ruby drbclient.rb 1000
      user     system      total        real
  0.340000   0.060000   0.400000 (  1.136783)

$ ruby drbclient.rb 10000
      user     system      total        real
  3.250000   0.570000   3.820000 ( 11.807745)
drbserver2.rb -- druby サーバ参照渡し版
require "drb/drb"
front = []
front.extend DRbUndumped                       # ここ追加
DRb.start_service("druby://:8888", front)
puts DRb.uri
sleep

ほかのやりかたについては, この件に対する関さんの解説ページ参照渡しと値渡しに書いてあります.

*1:サーバ側で Marshal.dump(Array), クライアント側で Marshal.load(Array) で N2 と理解しました

コンセプトライフをよんで

同僚に借りたので読んでみました。
著者の柴田さん自身の半生を、幼少のころから今現在にいたるまでを軽やかなエッセイ風味の文章でまとめられた一冊です。そのような味付けがなされているためか表面的には小難しいことは一切書いてないのですが、その奥にしっかりと柴田さんの仕事や生き方に対する信念やビジョンが刻まれています。

柴田さんはコンセプトを提示して形に落とし込むまでを仕事にされています。コンセプトを考える際にはペルソナを(おそらくはじめは無意識のうちに)手法として使われているようで、ペルソナ活用の具体例としても参考になる一冊ではないかと思います。

この本自体、かなり前向きにさせるパワーがあるので、ちょっと仕事がいやになったなーとか、つまんないなーとか感じたときに読むのがオススメかなと思います。

コンセプトライフ (sanctuary books)

コンセプトライフ (sanctuary books)

Jamming Gear を作ってみよう リベンジ(1)

とりあえず作ってみました. 応用は今後の課題ということで.

Gainer x Processing x Funnel x NEW電動式ブロックパズル 81pcs おりこうブロックパズル 組立式 知育玩具 です. 回路もスケッチも MTM03 のワークショップ時のままです. ワークショップ中は感じませんでしたが NEW電動式ブロックパズル 81pcs おりこうブロックパズル 組立式 知育玩具 のモーター音が結構うるさいですね. もう少し何とかできないものかと思うのですが...

Make: Tokyo Meeting 03 へ行ってきた

23日, 24日の 2 日間 Make: Tokyo Meeting 03 へ行ってきました.

たくさんの刺激を受けたり, いつもチェックしているブログの中の人と話ができたり, いろんな作品にさわれたり, 思った通りの散財をしたりと, とにかく充実した 2 日間でした. 詳細なレポートはプレスの方たちがたくさんいたので近日中に出てくるでしょう.

Jamming Gearを作ってみよう」ワークショップ

24日分に参加してきました. 10 名程度で行われました. 小林さんを中心に IAMAS の学生さんたちに手伝ってもらいつつ動かしつつな感じで進行するワークショップでした.

環境として Pepper + Funnel + Processing だったのですが, 自分も含めて半数くらいの方が Pepper 要因とおもわれる動作不良になやまされつつ進行するという状況で, ちょっと消化不良だったのが残念です.

ちなみに Pepper とは Gainer 互換の I/O ボードみたいです. 下の写真が実物です. とても小さくて使い勝手もよさそう.

ちなみに, 裏にはさりげなく MTM03 と書かれていてレア感たっぷりです!

消化不良だったので, 今週末にでも別の I/O ボードを使って Jamming Gear を作りたいと思います. 今回のワークショップで作る予定だった Jamming Gear は, 下のおもちゃのものを使っていると聞いたのでさっそく発注しておきました.

NEW電動式ブロックパズル 81pcs おりこうブロックパズル 組立式 知育玩具

NEW電動式ブロックパズル 81pcs おりこうブロックパズル 組立式 知育玩具

散財ログ

スイッチサイエンスさんが 5% OFF という大穴をあけて待っていたのでみんな簡単に吸い込まれてましたね. ご本人の印象は「いつものスイッチサイエンス会員向けメールのまんま」でとってもやさしそうな方でしたよ. 自分が購入したのは以下. 前からほしかったけど実際そんなに使わないかなーっていうものを中心に勢いで散財しましたw

  • BlinkM
  • FIO
  • リチウムイオンポリマー電池 860mAh
  • XBee 無線モジュール・チップアンテナ型
  • ADXL330 搭載三軸加速度センサモジュール
  • SparkFun 超小型ブレッドボード(赤)
  • SparkFun Gainer I/O ボード(表面実装型)
  • 赤外線接近センサ GP2Y0A21YKと接続ケーブル

Gainer は 1 台目, FIO は 2 台目, XBee は 3 台目ですね. ついに Gainer 購入です.

その他

なにげに Craft 系な方たちの作品のインパクトがすごかったです. 力石咲さんのとか.
ニコニコ系な方たちは「みんなを楽しませよう」という情熱がすごかった. 100人でマリオとか. すこし未来のテレビがあんな感じだとすごくおもしろいよね, きっと.

まとめ

次回は出展者として参加したいなーと思った 2 日間でした.

Make: Tokyo Meeting 03 へ行ってきます

明日、明後日は Make: Tokyo Meeting 03 ですね。最近フィジカルコンピューティング的なところをはじめた自分は MTM 初参加です。

個人的ハイライトは Gainer/Funnel 作者の小林さんのワークショップ「JammingGearを作ってみよう」への参加です。24日分の抽選にあたったので楽しんできたいと思います。

他にも盛りだくさんで, ショップもたくさんあるみたいなのでかなり散財しそうな予感です...

  • Mitch Altman さん
  • IAMAS ガングプロジェクト
  • ミルコ
  • 橋本商会の中の人
  • 吉本英樹さん
  • ニコニコな人たち
  • なんでも作っちゃう、かも。の中の人
  • MakerSHED
  • スイッチサイエンスの中の人

ネットでものを生み出すということをよんで

「ネット」「ものを生み出す」というキーワードに思うところがあったので購入してみました.
すでに世の中にものを生み出している人たちのインタビューをベースに構成されており, そういった人たちがどのような思考プロセスを経てものを生み出しているのかがわかりやすくまとまった一冊だと思います.

感じたところを簡単にまとめます.

  • 「これがない、こうありたい、こうあるべきだ」からはじまるものづくり
  • プロトタイピングメソッド
  • 技術は手段
  • 限界芸術とオープンソースハードウェアとの共通点
  • スピード、スピード、スピード
  • デザインするひとは哲学、政治を扱えるべき