« 2006年12月 | メイン | 2007年02月 »

2007年01月 アーカイブ

2007年01月06日

ネット検索業者育成 著作権の許諾不要に


http://www.asahi.com/business/update/0106/024.html

改正では、著作権法で許諾を得ずに複製や編集が認められる例外項目に「検索のための複製や編集」を盛り込む方針。

2007年01月12日

ソート時に指定 fieldが同じならデフォルトの score でソートした順に出す

Lucene で検索を行うには、 org.apache.lucene.search.Searcher クラスの

Hits search(Query query)

メソッドを使う。 このメソッドはデフォルトのスコア付けに基づいて結果を表示する。 フィールドに対してソートした結果を出したい場合は、 次のメソッドを使う。

Hits search(Query query, Sort sort)

2番目の引数には org.apache.lucene.search.Sort クラスのオブジェクトを渡す。 ソート対象が1つのフィールドの場合は、 コンストラクタ

Sort(String field)

を使って生成したオブジェクトを渡せばよさそうだが、 実際やってみたら、 確かに指定したフィールドの値でソートされるのだが、 フィールドの値が同じときの順番がバラバラで、 スコアが反映されていないような気がする?

ソートしたいフィールドが同点のときにデフォルトのスコアでソートするには、 複数フィールドを指定してオブジェクトを生成してやればいい。 SortField クラスは基本的にフィールドを指定するのだが、 デフォルトのスコア付けというのが特別な書き方があって、 フィールド名を null に指定し、 タイプを SortField.SCORE として、 次のコンストラクタを呼び出す。

SortField(String field, int type)

具体的には、 次のような処理になる。

SortField[] fields = new SortField[2];
fields[0] = new SortField(null, SortField.SCORE);
fields[1] = new SortField(DocumentFactory.FIELD_RANK); // JiroSearch 定義の文字列

Hits hits = searcher.search(query, new Sort(fields));

2007年01月16日

mysqld を停止する方法

jiro で使っている mysqld を停止するには、 /usr/local/jiro にある downmysql.bash を実行すればいい。 このコマンドは root で実行する必要がある。 スクリプトの内容は、こうなっている。

JAVA_HOME=/usr/local/jirotask/jdk1.5.0_09
ANT_HOME=/usr/local/jirotask/apache-ant-1.6.5
CATALINA_HOME=/usr/local/jirotask/apache-tomcat-5.5.17
MYSQL_HOME=/usr/local/jirotask/mysql
CLASSPATH=.
cd $MYSQL_HOME/bin
./mysqladmin --defaults-file=/usr/local/jirotask/mysql/my.cnf --socket=/usr/local/jirotask/mysql/data/mysql.sock --port=3308 -u crm -p shutdown

-u crm というのは、この環境は crm というユーザーで mysql をアクセスするように設定してあるため。 設定した環境によって異なる(applicationContext.xml の内容とあわせる必要がある)。 port も含め、JIRO をインストールした環境によって異なる。 この場合は、標準の 3306 を他の処理に使っているために、 別途 mysqld を起動した状況になっている。

2007年01月17日

Wikipediaの前身プロジェクトでNupediaが失敗した理由

http://blog.goo.ne.jp/ikedanobuo/e/16d34ed43d9cd8a5a20743d93e1f8ca9

http://blogs.itmedia.co.jp/kurikiyo/2007/01/nupedia_ee67.html

http://ja.wikipedia.org/wiki/Nupedia

自由と統制のバランスをどう取るか? 日本の企業が情報産業で失敗するのは、この点を理解していないからだ。

社内コミュニケーション系Enterprise2.0でも同じこと。

Apacheでバーチャルホストを設定

Apacheで、1つのIPアドレスに複数のホスト名を割り当てる、いわゆるバーチャルホスト・バーチャルドメインの設定ですが、NameVirtualHostの引数とVirtualHostの引数を完全に同じにしないと、うまく表示されなくなります。例えば下記の例で、片方を*にしてしまうと、期待したように動作しなくなります。

NameVirtualHost *:80
<VirtualHost *:80>

以下のページを参考にしました。

http://httpd.apache.org/docs/2.0/ja/vhosts/name-based.html

2007年01月18日

「CO.JP」ドメイン名の累計登録数が30万件を突破

「CO.JP」ドメイン名の累計登録数が30万件を突破
http://jprs.co.jp/press/070117.html

2007年01月17日発表
報道関係者各位
株式会社日本レジストリサービス(JPRS)
「CO.JP」ドメイン名の累計登録数が30万件を突破
- 日本の一部上場企業の97%が「CO.JP」ドメイン名を登録 -

日本の企業数は、200万とも言われており30万は少ないような~
ちなみに、帝国データバンクが管理している企業数は、120万だったような。

2007年01月19日

Wikipedia専用検索エンジン「Wikiseek」が登場


http://jp.techcrunch.com/?p=1308

http://www.itmedia.co.jp/news/articles/0701/19/news017.html


流れは、ノイズの排除ですね。

2007年01月21日

NHKスペシャル「グーグル革命の衝撃」


番組自体には、別に目新しいものはなかったが、
折角だから、少し考えて見た。
考えたことは、人間が生きることと情報の関係。

検索の先にあるものは「情報」なわけで、
検索するということは、その情報が欲しいから行うわけで、
では、どんな情報を欲しがっているのか?
少し分類してみることに。

情報の分類
(1)教養としての情報:ニュース(広く浅く)
(2)商売としての情報:キーワード(キーワード→ニーズ→商売)
(3)仕事ととしての情報:HOW TO(ノウハウや解決策をヒントを得る)
(4)用事を片付けるための情報:ご飯食べる、買い物、株価、地図
(5)費消するための情報:オタク(すべての情報を知っていることに価値が置かれる)
(6)世論操作のための情報:天安門事件

まだ他の分類もあるかもしれないが、
Googleは、ある意味、これらの情報をすべて網羅しているわけで、
それは、イコール、インターネットに他ならない。
というわけで、
インターネットは、ますます生活に密接に関わるようになると思われる。

2007年01月24日

selinux: named の起動に失敗して、dac_read_search denied というログが残っている

新しいサーバーで named が起動しない。

/sbin/service named start

を実行すると、[失敗]となる。 /var/log/messages には、次のようなログが残っている。

 avc:  denied  { dac_read_search } for  pid=2686 comm="named" capability=2
 scontext=user_u:system_r:named_t:s0
 tcontext=user_u:system_r:named_t:s0
 tclass=capability

dac_read_search で denied だから、 read の権限がないということが分かる。 /var/named の permission はこうなっている。

# ls -ld /var/named
drwx------ 5 root root 4096  1月 19 23:03 /var/named

これでは named がこの下をアクセスできないので、 次のように修正する。

# cd /var
# chgrp named named
# chmod g+rx named
# ls -ld /var/named
drwxr-x---  5 root    named   4096  1月 19 23:03 /var/named

これで解決したのだが、 ジタバタしているときに、 もう一つ変更しているので、 こちらも影響しているかもしれない(多分していないと思うが)。 /var/named/chroot が最初このようになっていた。

# ls -lZ
drwxr-xr-x  named named system_u:object_r:named_conf_t   dev
drwxr-xr-x  named named system_u:object_r:named_conf_t   etc
drwxr-xr-x  root  root  user_u:object_r:named_conf_t     proc
drwxr-xr-x  named named system_u:object_r:named_conf_t   var

named が動いている他のサーバーを見ると、 proc の設定が違っていたので、 次のようにしてコンテキストを変更した。

chcon system_u:object_r:proc_t proc

現在はこの状態。

[root@crm1 chroot]# ls -lZ
drwxr-xr-x  named named system_u:object_r:named_conf_t   dev
drwxr-xr-x  named named system_u:object_r:named_conf_t   etc
dr-xr-xr-x  root  root  system_u:object_r:proc_t         proc
drwxr-xr-x  named named system_u:object_r:named_conf_t   var

linux サーバー起動時に smb (samba デーモン)を実行

新サーバーで smb が自動的に起動するようになっていなかった。 状態は、次のコマンドで確認できる。

# /sbin/chkconfig --list | grep smb
smb             0:off   1:off   2:off   3:off   4:off   5:off   6:off

自動起動する設定ではない。 設定を変更する。

# /sbin/chkconfig smb on
# /sbin/chkconfig --list | grep smb
smb             0:off   1:off   2:on    3:on    4:on    5:on    6:off
# /sbin/service smb start
SMB サービスを起動中:                                      [  OK  ]
NMB サービスを起動中:                                      [  OK  ]

IBM、医療記録用検索エンジンを発表--医療機関での情報共有に活用へ


http://japan.cnet.com/news/ent/story/0,2000056022,20341413,00.htm

時間および費用効率の良い共有化された医療データを提供する一方で、患者のプライバシーも守るという、相反する2つの条件に悩まされてきた。

2007年01月26日

あなたのブログは、どのアルファブロガーに近い???

とうわけで、サービスを作って公開してみました。
解析には、ペイズ理論を使っておりますが、
占い程度の信憑性でご覧頂ければ幸いです。

http://blog.bttb.jp/alpha/alpha.cgi


----------------------------------
■結果の見方について
----------------------------------

●100%は、
全く同じだったという結果を表すものではありません。他のブログとの乖離率も計算されますので、他のブログとの乖離率が高く、消去法で、上位のブログが選ばれている可能性もあります。あくまでも、40個のブログの中で選ぶとしたら、どれが近いかの結果を表示しています。

●マイナス数字は、
ブログとの乖離率を表示しています。

●チャンクはなのためにあるの、
キーワード等の重み付け、表記ゆれの修正など、一切データを加工せずに、純粋にベイズ理論だけのロジックを走らせています。そのためノイズ等が表示されることがありますので、文章を細切れにして(チャンクに分けて)表示しております。記事に関係ないところの評価は、無視して見ていただくことでより近いブログがわかるかと思います。

●0%は多いのは、
いろいろ原因が考えられますが、40個のブログに類似性がない。40の分野のそれぞれの代表ブログが選定されている結果と捉えることも出来ます。

●アルファーブログ自身を解析しても100%にならないときがあるが、
このサービスは、2007/01/26 15分現在の各ブログのトップページからベイズ解析のための辞書を作成していますので、それ以降のブログの更新内容は反映されておりません。そのため、ブログが更新されると、随時解析結果も変わってきます。

●マニアックな結果の見方としては、
・結果の見方によっては、同じブログサービスもしくは同じブログプログラムを使っているブログがわかります
・また、同じアフィリエイトサービスを利用しているブログの可能性がわかります
・記事の内容ではなく、使用する言葉や言葉遣いが近いなどもわかります

■何も表示されない
クロールが上手く動作していない可能性があります。URLをご確認の上、再度お願いいます。


----------------------------------
■サービス提供の背景(おまけ)
----------------------------------

日ごろお世話になっているアルファブロガーをリスペクトして、
自分達のブログは、どのアルファブログさんに近いんだろうという、
単なる思い付きで作りましたが、

ブログも目新しいものが減り、定着フェーズに入った中で、
なんかもう一度面白いものが出来ないか?
新たなブログの可能性を見出せないかと、
そんな気持ちを1つのカタチにしてみました。
期間限定サービスですが、遊んでいただければ幸いです。


2007年01月31日

nagiosの設定

複数のサーバを使用している環境では、ネットワーク上のサーバの状態が一覧表示できると、トラブルの解決に役立ちます。そこで、「エンジニアのための時間管理術」(オライリー・ジャパン)で紹介されていたnagiosを評価してみました。

nagiosは登録されたサーバに定期的に接続をおこない、状態を取得します。Webで状態を一覧表示できるほか、ネットワークトポロジーに基づいたグラフィカルな表示もおこなえます。なお、問題が検出されたときにメールを送ったり、サービスの再起動をおこなったりする機能もありますが、今回は使用していません。nagiosの配布元と、日本語訳ドキュメントは、以下にあります。
- http://www.nagios.org/
- http://nagios.x-trans.jp/Nagios-doc/JAPANESE/

また、以下のサイトを参考にしました。
- http://blog.goo.ne.jp/minimal_room/e/5f0c2c3dbd1bf546165af51c27d529b7

評価に使用した環境はFedora Core 4だったので、yumでインストールすることができます。「yum install nagios nagios-plugins-all」でインストールします。インストール先は、/usr/lib/nagios/と/etc/nagios/と/usr/sbin/nagiosになります。

まず、/etc/nagios/に設定ファイルを作ります。いくつかファイルがありますが、それぞれ「nagios.cfg-sample」などを「nagios.cfg」のようにコピーします(/etc/nagios/private/にもファイルがあります)。その上で、必要な設定をおこないます。今回の場合、Webからの設定変更などはおこなわず、社内LANでの表示のみとしましたので、HTTP認証はおこなわないようにしました。これにはcgi.cfgで以下のように設定します。また、/usr/lib/nagios/cgi-bin/cmd.cgiを実行不可にします(削除したり、アクセス権を剥奪したり、同名のディレクトリを作ったりします)。

use_authentication=0

設定ファイルを確認するには、「/usr/sbin/nagios -v /etc/nagios/nagios.cfg」を実行します(rootでなくても実行できます)。これでエラーがなければ、サービスを起動します。今回はWebminの「起動及びシャットダウン」を使いました(「起動時に開始する」を有効にしておきましょう)。

次に、Apacheのhttpd.confに以下の設定を追加します。「/nagios」の部分は、cgi.cfgの「url_html_path=/nagios」に合わせる必要があるでしょう。

ScriptAlias /nagios/cgi-bin "/usr/lib/nagios/cgi-bin/"
Alias /nagios "/usr/share/nagios/html"

Apacheを再起動して、「http://localhost/nagios/」のようにアクセスすると、画面が表示されます。左フレームの「Tactical Overview」「Service Detail」などを選択すると、状態が表示されます(状態取得に5分くらいかかるかも知れません)。表示は定期的に更新されます(Operaではたまにレイアウトが崩れるようです)。このとき、もしnagiosサービスを起動していないとエラーが表示されます。

----

nagiosで監視対象を追加する場合、ホストとコマンドとサービスの3つを管理する必要があります。それぞれ1つずつ取り出すと、以下のようになります(設定ファイルは分けて書いてもよいのですが、今回はlocalhost.cfgにまとめてしまいました)。$USER1$は、/etc/nagios/private/resource.cfgで定義されている変数で、CGIからは見えないようにパーミションが設定されています。

define host{
use linux-server
host_name server1
address 192.168.0.101
}
define command{
command_name check_webmin
command_line $USER1$/check_http -H $HOSTADDRESS$ -p 10000
}
define service{
use local-service
host_name server1
service_description webmin
check_command check_webmin
}

ここで、実際に監視がおこなわれるのはserviceで、対象のホストはserver1、使用するコマンドはcheck_webminとなります。host_nameやaddressは、コマンド側で変数として利用できます(後述するSMBでは、host_nameを使用しますので、注意してください)。$USER1$/check_httpは、実体は/usr/lib/nagios/plugins/check_httpで、「/usr/lib/nagios/plugins/check_http --help」(rootでなくても実行できます)のようにするとヘルプが表示できます。また、コマンドラインから「/usr/lib/nagios/plugins/check_http -H 192.168.0.101 -p 10000」のように実行して、以下のように正常に実行できるのを確認することもできます(これもrootでなくても実行できます)。

OK - HTTP/1.0 302 Moved Temporarily - 0.011 second response time |time=0.011428s;;;0.000000 size=161B;;;0

例えばJiroSearchの場合、以下のような設定をすれば、動作を確認することができます。-uでpathを指定しています。ちなみに、-pを指定しなければポート80になります。

define command{
command_name check_js
command_line $USER1$/check_http -H $HOSTADDRESS$ -p 8080 -u /search/faces/jirosearch.jsf
}
define service{
use local-service
host_name server1
service_description jirosearch
check_command check_js
}

もちろん、1つのホストに対して複数のサービスを登録できます。これらを必要なだけ登録すればよいのですが、設定に注意が必要なコマンドもあります。

define command {
command_name check_smb
command_line $USER1$/check_disk_smb -H $HOSTNAME$ -s disk1 -W WORKGROUP -u nagiosuser -p PASSWORD -w 85 -c 95
}
define service{
use local-service
host_name server1
service_description smb
check_command check_smb
}

SMB(samba)は、IPアドレスではなくドメイン名の指定が必要です。例えば、「\\intra\disk1」を監視するには「-H intra -s disk1」としなければなりません。そこでホスト側では「host_name intra」のようにし、それを$HOSTNAME$で参照してcheck_disk_smbに渡しています。また、ワークグループ、ユーザー名、パスワードの設定も必要です。今回は社内での運用であり、共有対象がwebのディレクトリでworld-readableだったので、読み込み専用のnagiosuserというユーザーをsambaに登録しました。「/usr/lib/nagios/plugins/check_disk_smb -H server1 -s disk1 -W WORKGROUP -u nagiosuser -p PASSWORD
」を実行すると、以下のようになりました。

WARNING: The "printer admin" option is deprecated
Domain=[SERVER1] OS=[Unix] Server=[Samba 3.0.23a-1.fc4.1]
Disk ok - 40.39G (28%) free on \\server1\disk1

パスワードをきちんと管理したい場合は、$USER2$のような変数に設定するよう/etc/nagios/private/resource.cfgに書いておけば、nagios以外のグループからは読めなくなるでしょう。また、共有名を変えたい場合は、別のコマンドを用意する必要があるでしょう。

MySQLは、ログインするユーザーをあらかじめ登録しておく必要があります。また、通常はlocalhost.localdomainからのログインしか許可していないので、ホスト名からのログインを許可しておく必要があります。nagiosを実行するサーバ上のMySQLで、「*@localhost」からのログインを許可していれば、「/usr/lib/nagios/plugins/check_mysql -H localhost」を実行する方法もあります。

----

nagiosでは、親ホスト、ホストグループ及びサービスグループという分類ができます。分類すると、どのサービスが停止しているかが簡単にわかるので、便利です。

親ホストは、ホストの定義でparentsを指定することでおこないます。

define host{
use linux-server
host_name router1
address 192.168.0.1
parents server1
}
define host{
use linux-server
host_name server2
address 192.168.1.102
parents router1
}
define host{
use linux-server
host_name server3
address 192.168.1.103
parents router1
}

この例では、server1の下にrouter1があり、router1の下にはserver2とserver3があることになります。Webの「Status Map」を選択すると、親子関係がグラフィカルに表示されますので、ルータが止まってそこから先が見えなくなっているような場合もすぐにわかります。

ホストグループは、例えばホストの管理チームごとにホストを分ける機能で、Webの「Hostgroup Overview」などではホストグループごとの表示をおこなうことができます。なお、どのホストも、いずれかのホストグループに属している必要があります。

define hostgroup{
hostgroup_name intranet
alias intranet host
members server1, router1
}
define hostgroup{
hostgroup_name dmz
alias dmz host
members server2, server3
}

サービスグループは、ホストとサービスの組み合わせでグループを作るもので、例えば複数の公開サーバがある場合に、顧客が利用するhttpサービスで1つのグループ、社内から利用するsshサービスで1つのグループといった分類ができます。membersには「ホスト名1,サービス名1,ホスト名2,サービス名2」のように記述します。サービス名は「service_description」で指定した名前を記述します。

define servicegroup {
servicegroup_name public
alias public service
members server2,http,server3,http
}
define servicegroup {
servicegroup_name intra
alias intranet service
members server1,webmin,server1,jirosearch,server1,smb,server2,ssh,server3,ssh
}

----

サービスの監視をどれだけ広範囲におこなうかについては、例えば「エンジニアのための時間管理術」には「ユーザーがnagiosの画面を見てくれるよう、nagiosで把握していなかった障害がユーザーから報告された場合には追加する」というやり方が紹介されていますし、以下のように「障害発生時には多数のアラートがでるので、最低限にする」というやり方もあります。
- http://www.atmarkit.co.jp/fnetwork/tokusyuu/22tool/01.html

開発製品

jirologos.gif

About 2007年01月

2007年01月にブログ「三田ブログ」に投稿されたすべてのエントリです。新しい順に並んでいます。

前のアーカイブは2006年12月です。

次のアーカイブは2007年02月です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type