スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CouchDB - その2 (Core API)

2010年01月18日 22:16

#relaxonメモ(ずいぶん時間があいてしまいましたが、relaxonの初心者用レクチャのメモを追加しました。)

Core APIをいろいろ確かめました。以下はレクチャ中に参照したドキュメントです。
http://books.couchdb.org/relax/intro/core-api

まずはFutonを起動します。今回はMacBookにローカルサービスとしてインストールしたので、

 http://localhost:5984/_utils

にブラウザでアクセスします。これがFutonのトップのアドレスです。
(ちなみに http://localhost:5984/ は以下のJSONが返ってきます。 {"couchdb":"Welcome","version":"0.10.1"})
FireBugを起動しながらの見た目はこんな感じになります。

 Futon

画面上部はCouchDB内にすでに存在するデータベースの名前とサイズ、ドキュメント数、バージョン数が表示されている。右側にはメニューが表示されています。

1.データベースの作成


1.Futonで作成
 
"Create Database"ボタンを押すと、以下のようなダイアログが開くのでデータベース名をつけて"Create"します。
createDatabase


2.curlで作成

ターミナルからcurlコマンドでデータベースをPUTすることもできます。
データベース自体もPUTできちゃうんですね。
curl -v -X PUT http://localhost:5984/database1
すると、{"ok":true}と返ってきます。

作成したデータベースのURLをGETするとデータベースのステータスが
帰ってきます。
curl -v -X GET http://localhost:5984/database1
{"db_name":"database1","doc_count":7,"doc_del_count":0,"update_seq":8,"....

※curl の -v オプションをつけるとレスポンスヘッダを表示します。


2.ドキュメントの追加


1.Futonで作成
 
Overviewからデータベースをどれか選択し、"New Document"をクリックします。するとIDが振られたドキュメントのエントリが表示されます。Save Documentをクリックするまではドキュメントは作成されません。

newDocument

add Fieldをクリックすると、ドキュメントに属性を追加することができます。

addField

注意点としては、valueはJSON記法で書くこと。引用符を忘れると追加JSON parse errorになります。
逆に言えばJSONであれば、配列や階層構造も書けます。

最後にSave Documentをクリックするとドキュメントが作成されます。
ドキュメントを作成すると、rev_というリビジョンを表す属性が追加されます。

 _rev : "1-87a1d37102ddc9a84b351af8e6c57284"

_rev値のハイフンより前は、更新があると数字が増加します。ハイフンより後はドキュメントの内容から作られたハッシュ値になっています。またレスポンスヘッダに含まれるEtagは_revの値とおなじになっています。

2.curlで作成

ターミナルからcurlコマンドでドキュメントをPUTすることもできます。
curl -v -X PUT http://localhost:5984/id12345 -d '{"attr" : "value"}'
201 Createdが返ってきます。

また、ファイルに保存したJSONをPOSTすることもできます。以下はnew_document.json
というファイルに保存したJSONをPOSTする例です。
curl -v -X POST --data @new_document.json http://localhost:5984/database1
こちらも 201 Createdが返ってきます。

3.ドキュメントの変更

1.Futonから変更

Futonでの操作は省略します。ドキュメントの各属性をダブルクリックして編集するだけなので。
変更されたドキュメントは"Previous Version"を見ることができます。

2.curlで変更

まず、変更したいドキュメントをGETしてファイルに入れておきます。
curl -v -X GET http://localhost:5984/database1/id12345 > id12345.json
その後にファイルの内容を変更してPUTします。
curl -v -X PUT --data @id12345.json http://localhost:5984/database1/id12345
ここで、GETした時と同じ_revをつけてPUTするのが重要です。もし、_revの値を
変更して、PUTすると

HTTP/1.1 409 Conflict
{"error":"conflict","reason":"Document update conflict."}

が返ってきます。

4.ドキュメントの削除


1.Futonから削除

Futonでの操作は省略します。Deleteをクリックするだけなので。

2.curlから削除

単にURLに対して、DELETEを実行するだけではダメです。以下のようにrevパラメータをつけてDELETEします。
curl -v -X DELETE http://localhost:5984/database1/id12345?rev=2-7051cbe5c8faecd085a3fa619e6e6337
200 OKが返ってきます。

CouchDBはCompactする前までは、古いリビジョンが残っているので、
以下のようにrevパラメータをつけてGETすれば、DELETEしたドキュメントも
取得可能です。
curl -v -X GET http://localhost:5984/database1/id12345?rev=2-7051cbe5c8faecd085a3fa619e6e6337

また、"deleted" : "true"を含んだドキュメントをPUTしても同じように削除することができます。

(つづく)
スポンサーサイト

CouchDB - その1 (Mac OS X Leopard用セットアップ)

2010年01月12日 01:39

#relaxon でせっかくいろいろ教えていただいたので、ここにメモ。
(といいつつまだこのエントリではrelaxonの内容にたどり着かない・・・)

まずはrelaxonの前日に家でやっておいた、
CouchDBのMacOS用セットアップから。参考にするのはここ

Installing_on_OSX - Couchdb Wiki
http://wiki.apache.org/couchdb/Installing_on_OSX
(このwikiのフロントページのURLもいつも辿れなくなるのでメモ:
http://wiki.apache.org/couchdb/FrontPage)

自分で試したのは1.Unofficial Binary Package(CouchDBX) と 2.MacPorts
だけ。1.の方は、「Download -> Double Click -> Relax」と
書いてある通りすぐに動いたが、TestSuiteがoauthのところで
failし(テストの内容はわかっていないが。。。)てその後他のテスト
もすべてerrorになってしまいrelaxできなかったので、結局Macportsを利用。

自宅のMacbook(10.5.8)で、

sudo port install icu erlang

sudo port install couchdb


を実行したが、途中で寝てしまい何分かかったかよく覚えていない。起きてから
http://localhost:5984/_utils/にアクセスしたところFuton(CouchDBの管理コンソール)
を立ち上げることができた。

これはrelaxonで教わったことだが、Futonを操作するときはFirebugを
立ち上げておくと、どんなAPIを使っているか分かって嬉しい。

全然relaxonの内容に入れなかったが、今日はここまで。

Pajekを活用した社会ネットワーク分析

2010年01月08日 01:35

まだ読んでる途中。ソーシャルネットワーク分析の基礎っぽいことが書いてあるので勉強中。Pajekというネットワーク分析ツールを使ってネットワークから特徴的な量を取り出す方法を説明している。以下メモ

・社会的なネットワーク例えば「クラスの中で隣の席になって欲しい子」という
 関係をアンケートで調べるときは、名前を上げてもらうのとリストから選んで
 もらうのと二つの方法がある。前者をフリーコール、後者をラスターという。

・ネットワークを縮約するときは、縮約した点に縮約された点につながっていた
 線をすべて繋ぎかえる。

・ネットワークの「密度」とは線の数/最大の線の数であるが、密度は点の数に強く
 依存するので、普通は「次数」を指標に使う。次数はある点に繋がる紐帯の数。

・ネットワーク上のある点からある点まで到達する通り道を「ウォーク」という。
 ウォークのうち同じ点と線を通らないのが「パス」。
 有向グラフで向きを考えないウォークを「セミウォーク」、向きを考えない
 パスを「セミパス」という。
 すべての点がセミパスで繋がっている有向ネットワークを弱連結という。

・コンポーネントとは最大の連結したサブネットワークである。
 サブネットワークとは、ネットワークの中の点のサブセットと
 それらの点同士の紐帯。「最大の」というのは、それ以上他の点を
 付け足すと連結でなくなってしまうことを言う。

・k-連結コンポーネントとはすべての点のペアがk個のセミパスを
 持つようなコンポーネント。

・k-コアとはあるサブネットワークの中で最小の次数がkである
 最大のサブネットワーク。2コアは内部に3コアを内部に含むことができる。

・クリークは3つ以上の点で作られる最大完全サブネットワーク。
 一般にネットワークの中からクリークを探すのは時間がかかる。

・3つの点で構成されるクリークをトライアドという。

・サブネットワークをヒエラルキーを持ったトライアドに分解することができる。

・線が+か-を持っているグラフを符号付きグラフと言う。

・「PはXが好き(+)でOも好き(+)だが、OはXが好きではない(-)」というように
 負の線が奇数個あるとバランスしていない、と言う。
 (Pは、OがXを好きでないことにストレスを感じる)

・バランスしている符号付き有向グラフは、すべて正の弧をもった
 クラスタとその間の負の弧の組み合わせで表現できる。
 (カートライト、ハラリー)
 正の線を短く書いて、負の線を長く書くとこの構造がわかりやすい。

・2モードネットワーク。「社外取締役」「企業」のように点に二つの
 モードを持ったネットワーク。「社外取締役」同士や「企業」同士は
 線で直接結ぶことができない。

・2モードネットワークを、両方の企業に所属している社外取締役がいれば
 それらの企業同士に線を引いて、「企業」だけの1モードネットワークに
 変換することができる。

・2モードネットワークを変換した1モードネットワークにはk-コアの
 代わりに、同じようなm-スライスというサブネットワークを定義する。

続く。
→Pajekを活用した社会ネットワーク分析(続き)




人は原子、世界は物理法則で動く―社会物理学で読み解く人間行動

2010年01月03日 01:44

タイトルでかなり期待させられたが、人を原子として扱える実例が期待ほどには多くなく個人的には残念だった。全体的に「書誌学になってしまった社会学(と、机上の空論になってしまっていた経済学と)に統計物理学の考えを取り入れたことによりパラダイムシフトが起こりました」ということが話題の中心であると思う。以下、面白いと思ったエピソードをメモしておく。

・ハンガリーのブダペストのある乗客数の多いバス路線
 に3台のバスを配備したが、遅れも混雑も解消されなかった。
 ここで思い切って、1台のバスが停留所で乗り降りしている最中には
 どんなことがあっても(たとえ、一台に乗れない数の乗客が待っていても)
 他のバスはこれを追い越すこと、とルールを変えたら全体的な
 遅れや混雑が解消された。

・ロンドンのミレニアムブリッジで起こった振動は、全員が揺れにあわせて
 バランスを保とうとした結果増幅された。

・0-100のいずれかの整数を投票するゲームで、全員の投票した
 数の平均値の2/3に一番近い人が優秀、とすると合理的な投票は
 何になるか?(シカゴ大学 リチャード・セイラー)
  - まず全員が0-100までまんべんなく投票した場合は
   平均値は50になるので、33に投票すれば優勝
  - 33に皆が投票すると仮定すると平均値は
   33になるので、22に投票すれば優勝
  - …と続けていくと、全員が合理的であれば
   みな0に投票するので、2/3は0になる。
  →だが実際の平均値は、18.9だった。多くの人は
   33か22を投票していた。

・「お気に入りのバーが空いている日に飲みに行く」ゲームは
 「株式を安く買って高く売る」ゲームと基本的な構造が同じ。
 それぞれのプレイヤーがどのような個別の戦略で
 プレイしていても、「常に少数派のほうにいる人が勝ち。
 みな少数派に入りたがるので、少数派の戦略はすぐに模倣されて
 多数派になってしまう」という全体的な構造は同じ。 

・ひとは裏切りを見ぬくのが得意、同じ問題でも
 「不公平」や「裏切りを」探す問題に変換すると
 正解率がぐんと上がる。

・コンピュータシミュレーションで(1)誰とでも協力(2)誰でも裏切り
 (3)同じ色のプレイヤーだけ協力(4)違う色のプレイヤーとだけ協力
 という4つの戦略を持ったプレイヤーを用意しどの戦略が残るのか
 シミュレーションした。色にはなんの意味もない。
 結果、(3)の戦略が優勢だった。
 (アクセルロッド、ハモンド)

以上。





上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。