2010年06月



食べログのAPIをいじってみたのですが、簡単に実装できる反面できることがかなり限られてますね。GETでパラメータを渡して検索条件にしたりするんですが、その条件が「都道府県」、「最寄り駅」、「緯度、経度」のみ。和食や洋食のジャンル絞込みやキーワード検索などがまったくできません。

これだとせっかくAPIを公開していてもできることがほとんどありません。しかもリクエストの上限は一日200回。人気サイトであれば余裕で制限回数超えちゃいますね。食べログ自体はとてもいいサイトで人気もあるのにもったいないなーという感じです。

せめて検索条件として渡せるパラメータの数を増やして欲しいなぁ。これではAPIを使ったサイトからはなかなか目的のお店を探すことができません。まぁ、食べログ本体を使ってくれよということなんですかね。

このエントリーをはてなブックマークに追加


最近KVSに興味を持ち始め、色々インストールしまくってます。新しい技術に触れるってのは楽しいっすね!今回はcouchDBをインストールしてみました。CouchDBはErlangという言語で書かれたドキュメント指向の非RDBMSです。特徴としては

RDBMSではないのでSQLがない。
DBとの通信はHTTP。
データは全てJSONというフォーマットで表現されるドキュメント。
問い合わせはMapReduceに基づいて記述される。

という感じらしいです。らしいというのは本人もあんまり把握していないためです。よくわからんけど面白そうだから入れてみようという感じです。使ってりゃそのうちわかりますって。インストールは私の大好きな(楽な)yumで行いました。

インストールする



# yum install couchdb
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
No package couchdb available.
Nothing to do


むむ、パッケージがないとな?どうやらEPELというリポジトリの追加が必要なようです。なのでリポジトリを追加します。警告がでましたがとりあえず無視。


# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm を取得中
警告: /var/tmp/rpm-xfer.LSOq5u: ヘッダ V3 DSA signature: NOKEY, key ID 217521f6
準備中... ########################################### [100%]
1:epel-release ########################################### [100%]


再度挑戦。

# yum install couchdb


インストールログは省略しますが、無事インストールできました。早速起動してみましょう。


# service couchdb start
couchdb を起動中: [ OK ]


おぉ!起動したようです。psしてみましたがちゃんとプロセスあがっていました。動作確認もしてみます。CouchDBはHTTPでデータベースと通信するため、curlを使って動作確認してみます。


# curl http://127.0.0.1:5984/
{"couchdb":"Welcome","version":"0.10.2"}


データベースを作成する

データベースを作成してみます。成功すると最後に{"ok":true}と表示されます。


# curl -v -X PUT http://localhost:5984/testdatabase
* About to connect() to localhost port 5984
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 5984
> PUT /testdatabase HTTP/1.1
> User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: localhost:5984
> Accept: */*
>
< HTTP/1.1 201 Created
< Server: CouchDB/0.10.2 (Erlang OTP/R12B)
< Location: http://localhost:5984/testdatabase
< Date: Sat, 12 Jun 2010 09:08:59 GMT
< Content-Type: text/plain;charset=utf-8
< Content-Length: 12
< Cache-Control: must-revalidate
{"ok":true}
* Connection #0 to host localhost left intact
* Closing connection #0


ちゃんと作成されてることを確認します。

# curl http://localhost:5984/_all_dbs/
["testdatabase"]


おぉ、できてるようですね。

データベースを削除する

今度は今作ったtestdatabaseを削除してみようと思います。


# curl -v -X DELETE http://localhost:5984/testdatabase
* About to connect() to localhost port 5984
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 5984
> DELETE /testdatabase HTTP/1.1
> User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: localhost:5984
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: CouchDB/0.10.2 (Erlang OTP/R12B)
< Date: Sat, 12 Jun 2010 09:16:59 GMT
< Content-Type: text/plain;charset=utf-8
< Content-Length: 12
< Cache-Control: must-revalidate
{"ok":true}
* Connection #0 to host localhost left intact
* Closing connection #0


うまいこといってるようです。コチラに英語ですが、無料のCouchDBガイドがあります。ココには日本語のWikiがあります。参考にしてみてください。

このエントリーをはてなブックマークに追加


前回、CentOS 5.4にmongoDBをインストールしてみた。でmongoDBのインストールをしたのですが、今回はPHPを使ってデータをいじってみようかと思います。なお、サーバーにmongoDBのPHPドライバーがインストールされていることが前提です。まだの人は公式サイト(英語)を参考に入れてみてください。英語が苦手な人はコチラ をどうぞ。内容はほぼ一緒です。

また、この記事を書くのにPHP & MongoDB Sitting in a Tree: Part 1を参考にしました。PHPを使ってMySQLとmongoDBを扱う時のコードが比較されているので、とても参考になります。

データの取得

このコードはコネクションの確立からデータ挿入までを表したコードです。MySQLでDB接続したことある人ならわかると思いますが、コード量が少なく感じられると思います。
[php]
try {
//コネクションの確立
$link = new Mongo();
//DBの作成
$db = $link->mongoDB;
//コレクションの作成
$col = $db->user;
//コレクションへのデータの挿入(2件)
$doc = array('login' => '鈴木一郎', 'password' => 'suzuki', 'email' => 'suzuki@example.com');
$col->insert($doc, true);
$doc = array('login' => '佐藤一郎', 'password' => 'sato', 'email' => 'sato@example.com');
$col->insert($doc, true);
$id = $doc['_id'];
//データの取得と表示
$res = $col->find();
echo '挿入されたデータ:';
foreach($res as $doc) {
echo '
';
print_r($doc);
echo '
';
}

} catch (MongoConnectionException $e) {
die ('コネクションを確立できません。');
}
?>

[/php]実行するとこうなります。print_rで配列をそのまま表示させているだけなので見た目はアレですが、このように表示されます。ちゃんと挿入できてますね!

データの更新

findOne()メソッドで特定のemailのものを取り出してupdate()で更新しています。パスワードが「sato」だったものが「sato_updated」に変更されます。
[php]
try {
//コネクションの確立
$link = new Mongo();
//DBの作成
$db = $link->mongoDB;
//コレクションの作成
$col = $db->user;
//指定したemaiのものを一つだけ取得
$res = $col->findOne(array('email' => 'sato@example.com'));
//オブジェクトIDを取得
$id = $res['_id'];
//取得したオブジェクトIDをキーにして更新処理を行う
$col->update(array('_id' => $id), array('$set' => array('password' => 'sato_updated')));

echo "変更されたデータ:
";
print_r($res);
echo "
";
} catch (MongoConnectionException $e) {
die ('コネクションを確立できません。');
}
?>
[/php]実行するとちゃんとpasswordが更新されてます。

データの削除

データの削除については更新と同じです。更新の場合はupdate()を使いましたが、削除の場合はremove()を使うだけで他は変わりません。

[php]
$col->remove(array('_id' => $id), array('$set' => array('password' => 'sato_updated')));
[/php]挿入、更新、削除の3つの基本パターンを実装してみました。なれればMySQLよりもコード量少ないし直感的でコーディングしやすいような気がします。次回はもうちっと応用っぽいとこもやってみたいと思います。

このエントリーをはてなブックマークに追加


最近話題になっているmongoDBをCentOS5.4にインストールしてみました。CentOS5.4 にyumでMongoDBをインストールインストールを参考にさせていただきました。インストールと言ってもyumを使っているのでほぼオートマチックに終わってしまいましたが(´Д`υ)))ポリポリ

デフォルトのyumのリポジトリではインストールできないので/etc/yum.repos.d/MongoDB.repo/CentOS-Base.repoに以下のリポジトリを追加します。

[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/i386/
gpgcheck=0
enabled=1


リポジトリを追加後、mongoDBを検索してみるとなんかいっぱいでてきた。今回はstable版にします。

[root@user yum.repos.d]# yum search mongo
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
10gen | 951 B 00:00
10gen/primary | 2.1 kB 00:00
10gen 9/9
addons | 951 B 00:00
base | 1.1 kB 00:00
extras | 2.1 kB 00:00
update | 1.9 kB 00:00
================================================ Matched: mongo ================================================
mongo-snapshot.i386 : mongo client shell and tools
mongo-snapshot-debuginfo.i386 : Debug information for package mongo-snapshot
mongo-snapshot-server.i386 : mongo server, sharding server, and support scripts
mongo-stable.i386 : mongo client shell and tools
mongo-stable-debuginfo.i386 : Debug information for package mongo-stable
mongo-stable-server.i386 : mongo server, sharding server, and support scripts
mongo-unstable.i386 : mongo client shell and tools
mongo-unstable-debuginfo.i386 : Debug information for package mongo-unstable
mongo-unstable-server.i386 : mongo server, sharding server, and support scripts


さっそくインストールして起動する。yumは便利だ。

[root@user yum.repos.d]# yum install mongo-stable mongo-stable-debuginfo mongo-stable-server
[root@user yum.repos.d]# /etc/init.d/mongod start
Starting mongod: forked process: 3394
all output going to: /var/log/mongo/mongod.log
[ OK ]


起動した状態でmongoと打つと対話モードになる。試しにいくつかDBに保存してみました。

[root@user yum.repos.d]# mongo
> show dbs ←DB一覧を表示
admin
local
mongoDB
test
testMongoDB
> show collections ←コレクション覧を表示
admin
system.indexes
testMongoDB
> use testMongoDB  ←DBを選択
switched to db testMongoDB
> db.testMongoDB.save( { a:1 } )  ←保存
> db.testMongoDB.save( { b:2 } )  ←保存
> db.testMongoDB.find()  ←保存したのを確認
{ "_id" : ObjectId("4c0ba5c93dffb01c2597c606"), "a" : 1 }
{ "_id" : ObjectId("4c0ba5e33dffb01c2597c607"), "b" : 2 }


ちゃんと二つ格納されてますね。useとかsaveとかfindなどのコマンドは他にもたくさんあって公式サイトで紹介されているので気になる方は見てみてください。コマンドはMySQLに似ている印象を受けました。今回はここまで。続きはPHPとの連携をしてみようかと思います。

このエントリーをはてなブックマークに追加



IDEA*IDEAさんで紹介されていたのでjQueryで実装されているプレゼンテーションツールSlippyを試してみました。

まず、githubからソースを持ってきます。srcフォルダの中にslippyフォルダとREADME.mdownがありますが、slippyフォルダだけをサーバーにアップロードします。Slippyではコードのシンタックスハイライトもできるみたいですが、この機能が必要ない場合はhighlighterフォルダはアップロードは必要ありません。slippy配下のindex.phpにアクセスすると次のような画面が出ます。ここでプレゼンテーションを選びます。slippyフォルダの直下に拡張子が「html」のファイルを置くとそれをプレゼンテーションファイルだと認識しSELECT欄に現れます。ちなみに2010-05-30 Example.htmlは最初から入っているプレゼンテーションのデモになります。



また、slippyフォルダ直下にhtmlファイルを置くだけではダメです。プレゼンテーション形式にするにはちゃんと記法を守らなければいけません。かならず書かなければいけないのは以下の二つ。

<meta name="syntax_highlighter" content="FadeToGrey" />
classがslideのdivタグ

次のコードは必要最小限のコードを書いたものです。一つの<div class="slide"></div>で一つのスライドとなるので、スライドを増やしたければ<div class="slide"></div>をふやせばいいことになります。

[html]


ぷれぜんてーしょん




スライド1


スライド2



[/html]また、<div class="footer"></div>をつけることでフッターをつけることもできます。次の例はspanのclassをleftかrightにすることで表示位置を制御することもできるようです。

[html]

[/html]コードのシンタックスハイライトをしたい時は<div class="footer"></div>の中でさらに<pre class="brush: js"></pre>を定義してその中にコードを書きます。brush:の後には言語の略称を書きます。デフォルトで23の言語に対応していようです。JavaScriptの場合、<pre class="brush: js eval"></pre>のようにevalをつけることでコードの実行もできるようです。

[html]

Syntax Highlighting



function foo($var) {
// this is some php code as an example
$foo = new Class("meh");
$foo->bar();
}

That's it for now, enjoy!



[/html]

機能としてはMicrosoftのパワーポイントに及ばない部分はたくさんありますが、パワーポイントでは難しいシンタックスハイライトをする時など使い分けることで有効に使えるのではないでしょうか。

このエントリーをはてなブックマークに追加

↑このページのトップヘ