さびれた町にITが何をできるか?

先日、お盆の前に久々に帰省。駅を降りてびっくり。
駅前のJUSCOが閉鎖され、駅前通りはシャッター街と化していました。。
元々活気のある街ではありませんでしたが、あそこまでさびれると悲しくなります。

自分が育った町に対して何かできないか?と思い、数年ぶりに会った友達にも話してみたのですが「何ができんの?」と一蹴。
そりゃそうですね。

いくつか案はあったのですが、パソコン普及率・インターネット開設率の悪さ、高年齢化もあり、ITで何かをしようというのは現実的に無理。
発想を変えなきゃいけませんね。
お盆で帰省し、非常に大きな宿題を持って帰りました。。


MySQL特集その3 全文検索測定

mecab,sennaとインストールが済んだので今度はMySQLをソースからインストールします。

> tar zxf mysql-5.0.24.tar.gz
> cd mysql-5.0.24
> patch -p1 < ../senna/bindings/mysql/mysql-5.0.24.senna.diff
> patch -p1 < ../senna/bindings/mysql/mysql-5.0.24.senna.2ind.diff
> autoconf
> CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti -I/usr/include -L/usr/lib" ./configure --with-senna --prefix=/usr --with-charset=utf8 --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables --without-readline
> make
> make install

※必ずsenna のパッチをあてる
※configure のオプションが重要

> ./scripts/mysql_install_db --user=mysql
> chown -R mysql.mysql /usr/var
> chmod 755 /usr/var
> cp support-files/my-medium.cnf /etc/my.cnf
> /usr/bin/mysqld_safe --user=mysql &

さぁ、いよいよテストデータを入れて違いを見てみましょう。
以下簡単なテスト結果を記載します。ご参考までに。

[100万件の場合]
☆select count(*) from update_ping
where blog_title like '%ジダン%'
or entry_title like '%ジダン%'
or body like '%ジダン%';
→ 2.3秒

☆SELECT count(*) FROM update_ping
WHERE MATCH (blog_title, entry_title, body)
AGAINST ('ジダン');
→ 0.06秒!

[1000万件の場合]
☆select count(*) as count from update_ping
where blog_title like '%ジダン%'
or entry_title like '%ジダン%'
or body like '%ジダン%';
→ 43秒

☆SELECT count(*) FROM update_ping
WHERE MATCH (blog_title, entry_title, body)
AGAINST ('ジダン');
→ 0.6~0.7秒!

恐るべし全文検索の威力。。
1000万件クラスのデータで、検索機能をつけるのならlike検索では実用に耐えないので全文検索がオススメです。

ちなみにマシンはウチのテスト用PCです。
■OS・・Fedora Core5
■メモリ・・512MB
■CPU ・・インテル Celeron Dプロセッサ 326(256KB L2キャッシュ/2.53GHz/533MHz FSB)


MySQL特集その2 sennaを組み込む

Sennaは、MySQLに組み込むことで全文検索機能を強化してくれる全文検索エンジンです。

mecab + senna + mysql で強力な全文検索データベースが可能になる。
データ件数が数百万件で、like検索では遅い!という場合には検討した方が良いと思います。

(1)sennaをダウンロードしてインストール
wget http://dev.razil.jp/archive/senna/senna-latest-svn.tar.gz
tar xvfz senna-latest-svn.tar.gz
cd senna
./configure --prefix=/usr
make
make install
※make に5分くらいはかかる。

(2)sennaの設定とログ
mkdir /var/senna
mkdir /var/senna/log
vi /var/senna/senna.conf
で「DEFAULT_ENCODING utf8」を設定。

mecab、sennaのインストールが終わったので、次がMySQLのインストールです。


MySQL特集その1 mecabで分かち書き

MySQLには全文検索という機能があるが、
日本語では検索できない。

英語の文章は単語間がスペースで区切られているが、日本語文章だとプログラムで区切りを判別できないため。

・I have a dream.
→ スペース区切りなので区切りは明白
・私には夢があります。
→ どこが区切りかプログラムにはわからない・・

そこでそれを補うのが、Mecab
(1)mecabをダウンロードしてインストール。
./configure --prefix=/usr --with-charset=utf8
make
make install

(2)mecab 用の辞書をダウンロードしてインストール
./configure --prefix=/usr --with-charset=utf8
make
make install

(3)mecabを起動して、試す。
# mecab
私には夢があります。
私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
夢 名詞,一般,*,*,*,*,夢,ユメ,ユメ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
あり 動詞,自立,*,*,五段・ラ行,連用形,ある,アリ,アリ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。 記号,句点,*,*,*,*,。,。,。
EOS

おお、すばらしい。
見事に区切ってくれます!


Fedora Core5 を入れてみる

新しく買ったマウスコンピュータのPCにFedora Core5を入れてみました。
CDイメージだと5枚も必要なので、迷わずDVDイメージを作成。3.1GB。

#Redhat社が一般向けの提供を止めちゃったんで、
#Fedora Projectが引き継いだとのこと。

インストールは問題なく終了。
OSも無事に起動できました。
これでテスト環境が整ったので、まずはMySQLの実験を色々してみようと思います。


マウスコンピュータのPC

テスト用にガチャガチャいじれるマシンが1台ほしいと。
調べてみるとマウスコンピュータのPCが安くてスペックも良い。

・メモリ 512MB
・HDD 80GB
で4万円を切っております。
※ディスプレイなし
※OSなし
→ HP

ほぼ即決。送料入れても42,000円くらいでした。
ネット上ではちょっと悪い評判も目にしましたが、ま、あまり気にせずに使ってみましょう。
OSにはFedora Core5 でも入れてみます。


Six Apart社の由来

MovableTypeを販売しているのはSix Apart社。
社名の由来ですが、
開発者と奥さんの誕生日が6日違いだったことから『Six Apart』となったことは有名はお話です。

元々MovableTypeという素晴らしい製品ができたのは、開発者の奥さんの一言がきっかけだったそうです。そこからヒントを得て、旦那ががんばったという経緯です。


Googleのサーバ台数

毎日使っているといっても過言ではないGoogleの検索サービス。
いったい何台のサーバを使えば、あれほどのパフォーマンスが出るのか?

答えは想像を絶する『1万台超』。なお増え続けているそうです。
メンテナンスにあたっているSEの方の苦労をお察しします。
一度でよいのでそのサーバルームを見学してみたいものです。


コールバック関数とは

コールバック関数とは相手に呼び出してもらう関数のこと。
書いててもよくわからないので、具体例で見てみましょう。

以下、prototype.js を作った普通のAjaxのリクエスト。
new Ajax.Request( 'ajax/ping.php',
             {method: 'get', onComplete: show_result });

この場合、onComplete で指定しているものがそれです。
show_result というfunction がコールバック関数にあたります。
リクエスト処理終了後に実行される関数です。

以上、ただの用語の解説でした。


SEO対策ってやってますか?

■ご回答
SEO対策と一口にいっても、対策手段はたくさんございます。
・キーワードの選定
・ページレイアウトの考慮
・サイト構成
・同業他社

などなど考慮が必要で、決して簡単にできるものではございません。
広告予算に含めて予算を考慮していただく必要がございます。


like検索とregexp検索どっちが速い?

MySQLにおいて、like検索とregexp検索どっちが速いのか?
という素朴な疑問を抱き、100万件のテストデータを作って軽く試してみました。

■マシン
OS:WindowsXP Pro
CPU:1.1GHz
メモリ:512MB
MySQL:4.0.18

■テストデータ
100万件

■テストSQLと結果
(1)
select count(*) from update_ping
where blog_title REGEXP '.ジダン|.フランス'
or entry_title REGEXP '.ジダン|.フランス'
or body REGEXP '.ジダン|.フランス';

→ 30秒前後

(2)
select count(*) from update_ping
where blog_title like '%ジダン%' or '%フランス%'
or entry_title like '%ジダン%' or '%フランス%'
or body like '%ジダン%' or '%フランス%';

→ 6秒前後

このケースだとlike検索の方が圧倒的に速い結果が出ました。
感覚的には正規表現を使ったregexp検索の方が速いのかな、と思っていただけに興味深い結果となりました。


Firefoxがメモリ大量消費

私のメインマシンは、WindowsXP Pro + Firefox1.5 です。
最近ブラウザがよく落ち、OSがフリーズすることもしばしば。
先日、メモリ使用状況を見てみると、Firefoxだけで300MBくらい使っていました。。

Firefoxは使えるメモリはがんがん使う仕様のようです。
恐ろしい仕様です。

ということで最近はOpera9を使い始めました。
まだ使い始めて数日ですが、結構気に入っています。


ソーシャルブックマークを作りました。

以前から会社メンバー用にソーシャルブックマークを使っていたのですが、内部で閉じる必要もないので公開してみました。

scuttle というオープンソースを日本語化し、デザインを軽く変えただけです。
タグ機能とか便利ですし、なによりメンバー間で共有できるのが最大のメリット。
設置も簡単ですのでオススメです。


Web専用ソーシャルブックマーク

■IT専用ソーシャルブックマーク
※Scuttle
オープンソース「Scuttle」を日本語化したソーシャルブックマーク。
開発期間:1日。