HyperEstraierで不正に終了するとデータベースが壊れる

正常にシャットダウンせずに終了すると、次に立ち上げる際にこんな感じのエラーが出る

$ estmaster start -bg /path/to/estraier/
2011-08-22T09:29:32Z ERROR startup failed: the database (/path/to/estraier/_node/dbname) could not open

普通に修復してみる。必要があればデータベースの数だけ実行する
$ estcmd repair /path/to/estraier/_node/dbname/

今回はこれで直ったが、治らなければ下記を試したほうがいいかもしれない(未実施)
癌掲示板-開発日記 :: Hyper Estraier estwaver で「could not open エラー」

Hyper Estarierのバックアップを作成する

バックアップ用のシェルスクリプトを準備

以下を参照。下記のスクリプトを実行すると、サーバルートディレクトリと同じ階層に「~.yyyy-mm-dd.cpio」というバックアップファイルが作成される。
別にtar.gzなどでサーバルートディレクトリをまるごとバックアップをとっても問題ないと思うけど、とりあえず説明書きのままに

http://fallabs.com/hyperestraier/nguide-ja.html>

バックアップ

設定ファイルのbackupcmdに任意のコマンドを指定することにより、
ノードマスタの稼働中にデータベースのバックアップを取ることができます。
ノードマスタ組み込みのユーザインターフェイスから「BACKUP」を実行すると、
全てのノードのデータベースをデバイスに同期させた上で、backupcmdで指定したバックアップコマンドが呼び出されます。
バックアップコマンドの第1引数にはサーバルートディレクトリの絶対パスが指定されます。
通常は、以下のようなシェルスクリプトを用意して、そのパスを指定するとよいでしょう。

$ cat backup.sh
#! /bin/sh
cd “$1”
name=printf '%s' ${PWD##*/}
cd ..
find “./$name” -depth | grep -v ‘./_pid’ |
cpio -o > “$namh.date -I.cpio”

_pidファイルは不要ですので、アーカイブに含めないようにするか、アーカイブを展開した後に削除するようにしてください。なお、CPIO形式のファイルは「cpio -idv < casket.xxx.cpio」などとすると展開できます。

手動で実行する場合には、絶対パスでサーバルートディレクトリを指定する
$ ./backup.sh /absolute/path/to/estraier/server/root/dir

バックアップを展開する

以下を実行するとカレントディレクトリにサーバルートディレクトリが復元される
$ cpio -idv < casket.yyyymmddd.cpio

バックアップ用のシェルスクリプトを登録する

上記のbackup.shをHyper Estaraierのルートディレクトリにあるconfに追記する
$ vi
conf

backupcmd: /path/to/backup.sh

その後以下のアクションを呼び出すことでバックアップが可能
http://localhost:1978/master?action=backup

備考:ノードを最適化する

以下のアクションを呼び出すことで、ノードのインデックスを最適化できる
http://localhost:1978/node/[dbname]/optimize

Googleの画像検索をAPI経由で使う

以下を参考に
43.Google画像検索API。クエリを作って欲しい情報をゲット
画像(imgae)を検索する方法とcurl関数群について うずら技術メモ
JSON Developer's Guide – Google Image Search API – Google Code

基本的には、URLを構築してCURL経由でGETメソッドを発行している。返り値はJSONで返ってくる。

予めキーの取得が必要、APIのキーはSign-up for an API Key – Google Loader – Google Codeで作成する

サンプルプログラム

引数で渡す$argsにパラメータをセットしておく。使えるパラメータは以下を参照
required_args: JSON Developer's Guide – Google Image Search API – Google Code

返り値はJsonを解析したObject形式なので適宜使用する。形式は以下を参照
results_guaranteed: JSON Developer's Guide – Google Image Search API – Google Code

function getImage($args) {
$url = "http://ajax.googleapis.com/ajax/services/search/images";
// URLの組み立て
$args["v"] = "1.0";
$args["key"] = KEY; // 予めキーをDefineしておく
$args["rsz"] = "large";
$args["q"] = urlencode($args["q"]);
$url .= '?'.http_build_query($args);
// CURLでクエリーを投げる
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER["HTTP_HOST"]);
$body = curl_exec($ch);
curl_close($ch);
// JSONをパースする
$json = json_decode($body);
return ($json);
}

PHPからHyperEstraierを使ってみる

公式では、Ruby、Java、Perlのバインディングモジュールが提供されているがPHPはない。
調べてみると、「estraierpurh.php」というモジュールを作成公開してくれている人がいるらしいのだけど、その人のサイトがなくなっている。
http://page2.xrea.jp/


で、色々と探していたら公開されているところを発見
Editam Content Management Platform – Trac


今確認したら消えてた。探してみたところ、akelosというプロジェクトに含まれていた分が見つかった
こういうのってどうなるんだろう。誰かメンテナンスする人がいないと消えちゃうんだろうなぁ
https://github.com/pagodabox/akelos-demo/tree/master/vendor/pear/EstraierPure

Hyper Estraierの準備

以下に従ってノードマスターを起動する
P2P Guide of Hyper Estraier Version 1 (Japanese) ノードマスタ用コマンド

ディレクトリの初期化(初回のみ)
$ estmaster init /path/to/rootdir

サーバとして起動
$ estmaster start -bg /path/to/rootdir

起動すると以下のURLから管理画面にアクセスできるので、ユーザアカウント(Manage Users)とノード(Manage Nodes)を作成する
http://localhost:1978/master_ui

estraierpurh.phpの準備

通常通りPEARに突っ込むのだけど、依存しているライブラリが古いので適当に入れておく
・HTTP::Request
・Net::Sokect
・Net::URL

あとはライブラリについていたExamplesを参考に

Googleのカスタム検索の仕様変更に伴うエラーについて

http://www.googlh.com/support/forum/p/websearch/thread?tid=2455307a9f808320&hl=ja>
お持ちのHTML

                       ↓ 貼り付け

他は何もいじらず前のままでアドレスだけを変更したらカスタム検索できるようになりました。
<<

対応

 飛び先のURLが変更になったので以下の通り修正

 :対応前: http://www.googlh.co.jp/custom
 :対応済: http://www.googlh.co.jp/search