Entries in 2008/11/10/

CouchDBに触れてみた

聞くところによると,CouchDB の魅力ってのは,ドキュメント指向であったり,Map/Reduce であったり,その辺りにあるらしいのですが,ボクはまだよく分かっていません.このエントリでは,後述の目的を果たすために,CouchDB をサーバにインストールして動かしてみて,永続化ハッシュとして利用するために,値の格納と取得をやってみた,ってところまで扱います.その先の話はエントリを改めてまた今度.

目的

よく,cron なんかで定期実行させるスクリプトの中で,前回実行時の情報をファイルに保持させたりしている.これだとスクリプトを実行させるマシンが変わったときにそのファイルも忘れずに移動させなきゃいけないし,複数マシンで実行させるスクリプトともなると,協調が大変.そこで,情報を保持する箇所をひとつにし,かつ,どのマシンからでも情報を読み書きできる仕組みを用意し,ファイルに保持させないようにする.

CouchDB のインストール

Debian 機にインストールした.参考にしたのは以下のエントリ.ありがとうございました.

インストールしたサーバに設定したポート(デフォルトは5984)


http://my.server.jp:5984/

でアクセスすると

{"couchdb":"Welcome","version":"0.8.0-incubating"}

が返ってくる.ここがすでに JSON だ.楽しい.

ご丁寧にブラウザから中身を操作できる管理画面がついてくる.ここからデータベースを作成したり,レコードの値を書き換えたりできる.


http://my.server.jp:5984/_utils/

Screenshot of CouchDB Futon

couchdb.rb

今回使いたい get と put だけを実装した.公式のサンプルでは JSON 文字列を受け渡ししているんだけど,Ruby のハッシュをそのまま与えるようにしてみた.

photoshare2twitter.rb

ボクが iPhone で撮った写真をアップしている Big Canvas PhotoShare から,新着があれば Twitter に流すっていうサンプル.

Pit で CouchDB のホストとポートを取ってきて,photoshare ってデータベースの latest_processed_photo っていうドキュメントを get する.最後に処理した id より新しい id を持つ写真があれば put でデータを更新する.まさに Java の Map#get,Map#put と変わらない感じで書ける.ただし _rev ってのはリビジョン番号を表していて,これを正しく渡してやらないと

412: Precondition Failed (前提条件で失敗した)

が返ってくる.複数のトランザクションが同じドキュメントにアクセスするとき,整合性を保つために必要なのだろう.REST について勉強したときも感じたけど,HTTP メソッドとかステータスコードとか,すでにあるものをきちんと理解して,正しく使うってのは大事だなぁ.勉強になります.

今回のサンプルは,データベースもドキュメントもすでに存在することを前提としているから,本当は存在しなかったら作成するとか,そういう処理が必要だ.エラーメッセージも JSON に格納されて返ってくる.

まとめ

ひとまず目的は達成できました.最低限の機能でよければ CouchDB のラッパーは簡単に書けてしまう(中身は HTTP のリクエストを呼んでいるだけ) し,とても手軽に使える.

せっかくインストールしたんだから,もうちょっと凝った使い方もしてみたい.次に触ってみたいのは Map/Reduce です.

DESIGN FESTA VOL.28 で遊んできた

修理に出していたカメラのレンズが戻ってきて,刀を新調した武士の「今宵の虎鉄は血に飢えておるわ」に近いテンションになっていたのが土曜日のこと.カメラを持ってお出かけしたいなーと思って調べてみたら,ステキなイベントを発見したのでした.

DESIGN FESTA

ちょうどこの週末,VOL.28 となるイベントが開催されている!内容も面白そうだし,被写体探しには困らないだろうってことで,遊びに行ってきました.

チケット

チケット

会場の東京国際展示場は今回が初めて(たぶん).目的地が近付くにつれて「あぁ,この人たちも同じ場所に向かっているんだろうなぁ」と思える人が増えてくるのがイベントの常ですが,今回はなんだか様子が違った.スーツをきた20代前半と思しき男女がたくさんいた.あとから分かったのだけど,就職活動関係のイベントも一緒にやっていたみたい.なんだろなーとか不思議に感じながら移動して,とにかく着いた!

入り口前のポスター

最初に

話の最後は楽しいお話で終わりたいから,最初にグダグダを吐き出しておこう.

例によって,普段とは全然違った景色が広がる場所に踏み込んだことにより,最初の1時間ぐらいは流れ込んでくる情報を脳が処理できずにテンパり続けた.人もいっぱいいて,見るものもたくさんあって,色は派手なものが多いし,あたふたしてしまった.当初の目的であるはずの写真撮影も全然できやしなかった.

ようやく会場の雰囲気に慣れてきて,目の前の作品を楽しめるようになったと思ったら,変に色んなことを考え始めてこれまたテンパった!なんでテンパったのかを改めて考えてみると…

  • 「いいなぁ」と思わせてくれるものがあっても,それを上手く表現できない
  • 「いいなぁ」と思わせてくれるものがあっても,会場をひとまわりする頃には忘れてしまうかと思うと怖い
  • 「いいなぁ」と思わせてくれたポストカードが100円だと知ったとき,これを作るのにこの人は何時間掛かったんだろう… とか,もやもや
  • 写真撮影禁止のブースで,そうと知らずにカメラを構えてしまい,注意させてしまった.大変に申し訳ないことをした.ところで写真撮影禁止と無断リンク禁止の違いはなんだろう… とか,もやもや

などの要因があったように思う.なんというか自分から見てもアレだ.

自分が「いいなぁ」と思ったら,それを伝えたい.誰かとシェアしたい.あとから振り返りたい.そう願うこと自体は自然だと思うけど,ここは Web じゃない.だったら写真に撮って,残して,シェアすればいいじゃない.と思ってみたものの,ボクのフィルタを通してしまうと,作者さんの意図が歪んでしまう気がして,気乗りしなかった.

わー 本当にグダグダだ.もうグダグダはやめる.あとからどうでもよくなったんだもの.後半はちゃんと楽しくなった.グダグダおしまい.

見ても見ても見終わらないブース

13時に会場に着いて,ほとんど休まず17時過ぎまで見て回っていた.ひとつひとつ順番に見ていたら,本当にいつまでも終わらないんじゃないかって思うぐらい会場も広くてね,だけど,同じようなものはひとつもなくて,頭のてっぺんからお尻の先まで美味しかった.ここからは写真メインでいくよ.

最初に見たのは villa っていう女の子2人のパフォーマンス.本人が楽しそうってのがいい.映像と音.ステキ女子が顔を見合わせて笑う瞬間ってのはグッとくる.

Performance

たった一度の人生 棒に振ってみないか!

正義の味方

お兄さんが針金をねじねじすると,みるみるうちにキャラクターが生まれるんだ.さいこーキュートだったなぁ.なんで買わなかったのか…

針金キャラクター

うんち!これはうんこじゃなくてうんち!だね!

うんち!

これすごかった… 帰宅してから気になってクリエイタさんについて調べてみたら,TAKORANTIS を見つけた.世界観がすごいなぁ.一気に気になる人です.

TAKORASU

かっちぇー!カミロイドって言うんだね.夢いっぱいだ.

カミロイド

これは書き始めから見ていた作品.一部のブースでは,まさにその場で作品を作っている人もいて,製作途中って本当に面白いなぁと思った.

ぐるぐる

プログラミングでいうライブコーディングもそうだし,今回のはライブペインティングって呼ばれていて,同じ面白さがある.ちょっと前にこくばん.in のタモリさんが話題になったけど,あれも一緒で,完成形を見るだけじゃ分からない「ここから作るんだな」とか「こういう意図があるんだな」とか,もっとエンターテイメントになる可能性を秘めているよね.

次回は…!

てなわけで,思う存分にシャッターを切れました.ここに載せた以外にも Flickr の DESIGN FESTA VOL.28 に写真があります.

さて,公式 Web サイトではすでに次回の申込が始まっていました.2009年5月だそうです.また行きたいな.次は誰かを誘っていこうと思います!

次回予告

楽しかった!ありがとう!