Googleを支える技術

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

http://www.amazon.co.jp/gp/product/4774134325


現在読書中。

今週中には読み終わるかな?

googleの技術の概要がうまくまとまっています。


特に印象に残ったのは分散コンピューティングの箇所。

おそらくこれからの技術のトレンドは「セキュリティ」「分散/並列コンピューティング」「ラピッドデベロッピング」でしょうか。

ラピッドデベロッピングに関しては「ruby on rails」とか。


で「分散コンピューティング」なのですが、この本で書かれていた技術MapReduceオープンソースHadoop(http://hadoop.apache.org/)に興味をもったので、これから勉強していきたいと思います。

時間の計算をするSQL文をDBI(DBD::Pg)を使って実行しようとしたときにエラーになってハマりました。

my $v_time = "'2008-04-14 16:00:00'";
my $v_interval = "'-2 day'";
my $query = "SELECT TIMESTAMP ? + ?";
my $db_retref = $dbh->selectall_arrayref($query, undef, $v_time, $v_interval);

結果

selectall_arrayref failed: ERROR:  syntax error at or near "$1"
LINE 1: SELECT TIMESTAMP $1 + $2

結論としてはキャストをちゃんとすればOKのようです。(以下動くソース)

my $v_time = "'2008-04-14 16:00:00'";
my $v_interval = "'-2 day'";
my $query = "SELECT CAST(? AS TIMESTAMP) + CAST(? AS INTERVAL)";
my $db_retref = $dbh->selectall_arrayref($query, undef, $v_time, $v_interval);


参考文献

http://www.enterprisedb.com/docs/jp/8.3/server/typeconv-oper.html

msnマネーのクッキー(cookie)削除

Microsoft Moneyを利用していてたまにmsnマネーに入れないときがあります。
原因はクッキーなのですが、個別に消す方法をなんとか見つけたのでメモ。


C:\Users\????\AppData\Roaming\Microsoft\Windows\Cookiesフォルダの????@msaa.money.msn.co[2].txtを消せばおk

※????はログインユーザ名

Windows2000メモ

最近win2kが調子悪いと思っていたら、Userハンドルの上限10,000を振り切っていたようだ。

google talkmsnメッセンジャー等の常駐アプリを削除したら8,000くらいになった。

Windows XPだと65,545までokっぽい。乗り換えるか?

※ちなみにUserハンドルの確認方法はタスクマネージャ>パフォーマンスで確認できます。
※2あと各プロセスごとに使用しているUserページを調べるにはタスクマネージャ>プロセス>[メニューの]表示>列の選択でおk

Apache2+fastcgi動作テスト

site-enabledの修正

# vi /etc/apache2/sites-enabled/default
---
DocumentRoot /var/www/
<Directory /var/www/>
	Options ExecCGI
	AllowOverride None
	Order allow,deny
	allow from all
	RedirectMatch ^/$ /index.fcgi
</Directory>
---

index.fcgiの作成

# vi /var/www/index.fcgi
---
#!/usr/bin/perl -w

use FCGI;
use strict;

my $count = 0;
my $handling_request = 0;
my $exit_requested = 0;

my $request = FCGI::Request();

sub sig_handler {
    $exit_requested = 1;
    exit(0) if !$handling_request;
}

$SIG{USR1} = \&sig_handler;
$SIG{TERM} = \&sig_handler;
$SIG{PIPE} = 'IGNORE';

while ($handling_request = ($request->Accept() >= 0)) {
    &do_request;
    $handling_request = 0;
    last if $exit_requested;
}

$request->Finish();
exit(0);

sub do_request() {
    print("Content-type: text/html\r\n\r\n", ++$count);
    $request->Finish();
}
---

パーミッションの設定

# chmod 755 /var/www/index.fcgi

Apache2再起動

# /etc/init.d/apache2 restart

ブラウザで確認
最初に"1"が表示され、F5でリロードするたびに数字がインクリメントされれば成功


はまりポイント:

最初index.fcgi

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "test";

としてテストしていたが、

[error] [client xxx.xxx.xxx.xxx] Premature end of script headers: index.fcgi
[notice] mod_fcgid: process /var/www/index.fcgi(9515) exit(server exited), terminated by calling exit(), return code: 0

などのエラーログがでてしまって原因調査に半日以上つぶれたorz
fcgidで動かす場合特別な作法で記述しないといけないっぽい


参考文献
http://www.fastcgi.com/docs/faq.html#PerlSignals

Apache2にfastcgiを入れる

# apt-get install libapache2-mod-fcgid libfcgi-perl

/etc/apache2/mods-available/fcgid.conf を編集

# vi /etc/apache2/mods-available/fcgid.conf
---
<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
  IPCCommTimeout 300          # <- この行を追加
  IPCConnectTimeout 60
</IfModule>
---

以下のコマンドでモジュールを有効化:

# a2enmod fcgid
# a2enmod rewrite

参考文献
http://www.gfd-dennou.org/arch/davis/gfdnavi/doc/install/gfdnavi-with-apache2-fastcgi.htm