namazu UTF-8 + apache EUC-JP

さくらインターネットスタンダードプランを利用しているのですが、全文検索をサイトに組み込み時に填ったので、記録しておく。

会社のWEBサイトは、さくらインターネットでスペースを借りているわけですが、apacheでEUC-JPな設定になっておりまして、UTF-8を使ったページを全文検索の対象になるようnamazuをユーザーフォルダにインストールしました。

mknmzを動かしインデックスを作成し、index.cgiを設置、全文検索出来ると確認したわけです。が、mknmzで作成されるテンプレートの文字コードは、EUC+LFになっておりまして、全く問題ないわけです。当たり前ですが・・・

namazuが動く事を確認したあと、既存のページに検索フォームを設置し確認したところ、文字化けで日本語が一切検索対象に出来ない事が判明。

ググった結果、文書の文字コードがUTF-8の場合、NKFのバージョンを2.0.4以上にすればOKとのこと。

NKFは2.0.4からUTF-8に対応

phpで検索語句をラッピングしてnamazu.cgiに渡すようにすればOKとのことで、

post.php

<blockquote><?php
$url = 'http://MySiteDomain/namazu.cgi';
$query = $_POST['query'];
$whence = '0';
$lang = 'ja';
$max = '20';
$query = rawurlencode(mb_convert_encoding($query, 'EUC-JP', 'auto'));
header("Location: $url?query=$query&whence=$whence&max=$max&lang=$lang");
exit;
?>

検索フォーム

<blockquote><form method="post" action="./post.php">
<p><label>サイト内Namazu検索
<input type="text" name="query" accesskey="q" tabindex="1" size="20" value="" /></label>
<input type="submit" name="submit" tabindex="2" accesskey="s" value="検索" />
</p>
</form>

改訂 Namazuシステムの構築と活用

namazu UTF-8 + apache EUC-JP

ちょいと全文検索をサイトに組み込み時に填ったので、記録しておく。

会社のWEBサイトは、さくらインターネットでスペースを借りているわけですが、apacheでEUC-JPな設定になっておりまして、UTF-8を使ったページを全文検索の対象になるようnamazuをユーザーフォルダにインストールしました。

mknmzを動かしインデックスを作成し、index.cgiを設置、全文検索出来ると確認したわけです。が、mknmzで作成されるテンプレートの文字コードは、EUC+LFになっておりまして、全く問題ないわけです。当たり前ですが・・・

namazuが動く事を確認したあと、既存のページに検索フォームを設置し確認したところ、文字化けで日本語が一切検索対象に出来ない事が判明。

ググった結果、文書の文字コードがUTF-8の場合、NKFのバージョンを2.0.4以上にすればOKとのこと。
<blockquote>NKFは2.0.4からUTF-8に対応</blockquote>
phpで検索語句をラッピングしてnamazu.cgiに渡すようにすればOKとのことで、

<strong>post.php</strong>
<blockquote>&lt;?php
$url = ‘http://MySiteDomain/namazu.cgi’;
$query = $_POST[‘query’];
$whence = ‘0’;
$lang = ‘ja’;
$max = ’20’;
$query = rawurlencode(mb_convert_encoding($query, ‘EUC-JP’, ‘auto’));
header(“Location: $url?query=$query&amp;whence=$whence&amp;max=$max&amp;lang=$lang”);
exit;
?&gt;</blockquote>
<strong>検索フォーム</strong>
<blockquote>&lt;form method=”post” action=”./post.php”&gt;
&lt;p&gt;&lt;label&gt;サイト内Namazu検索
&lt;input type=”text” name=”query” accesskey=”q” tabindex=”1″ size=”20″ value=”” /&gt;&lt;/label&gt;
&lt;input type=”submit” name=”submit” tabindex=”2″ accesskey=”s” value=”検索” /&gt;
&lt;/p&gt;
&lt;/form&gt;</blockquote>

emacs

Mewで添付ファイルを作成しました (2000/06/13)

.emacsについて

.emacsはホームディレクトリに置くものとする.

hnf

hnfは、hns(ハイパー日記システム)の日記作成支援lispである.

<blockquote>
<pre>;; hns 各種設定
;;

;; 自動的にEUCにする
;(setq file-coding-system-alist
;	(append ' (
;		("\.hnf$" euc-jp . euc-jp))
;		file-coding-system-alist))

(autoload 'hnf "hnf-mode" nil t)
(autoload 'hnf-mode "hnf-mode" nil t)
(setq auto-mode-alist (cons '("\.hnf$" . hnf-mode) auto-mode-alist))

(setq hnf-variable '(("TENKI") ("BASHO") ("TAIJU") ("TAION")))
(setq hnf-mark '(("(^^)") ("(-_-)") ("(^^;") ("(;_;)") ("(T_T)")))
(setq hnf-rlink '(("h14m") ("ari")))
(setq hnf-cat '(("linux") ("job") ("win")))
(setq hnf-alias '(("Be") ("hns")))

(add-hook 'hnf-mode-load-hook
	  '(lambda () (progn
		       (define-key hnf-mode-map "C-c=" 'hnf:get-link)
		       (define-key hnf-mode-map "C-cf" 'hnf:link-find-file)
		       (define-key hnf-mode-map "C-ct" 'hnf:insert-time))))

;; calenderとの連係
;; hnf-insert-diary-entryをキーバインド
(add-hook 'calendar-load-hook
'(lambda ()
(define-key calendar-mode-map "iD" 'hnf-insert-diary-entry)))
;;日記を入力してある日はマークが付く
(autoload 'hnf-mark-diary-entries "hnf-mode" nil t)
(add-hook 'today-visible-calendar-hook 'hnf-mark-diary-entries)
(add-hook 'today-invisible-calendar-hook 'hnf-mark-diary-entries)

;; hns 予定の編集 M-x yotei
(autoload 'yotei "hnf-yotei" nil t)

namazu.el

emacs上でnamazuを利用した検索が出来ます.

(autoload 'namazu "namazu" nil t)
;; Namazu のインデックスの指定
;; 環境に合わせて変更する
(setq namazu-default-dir
      "~/index/dialy")

honyaku.el

オムロンが開発した翻訳ソフトである翻訳魂をemacsにclientとして利用するためのものです.
xemacsで利用するにはパッチを当てる必要があります.

<blockquote>(setq load-path (append(list"c:/cygwin/usr/local/emacs/site-lisp/")load-path)) (load-library "honyaku") (setq honyaku-server-list'("192.168.0.30"))

html-helper-mode.el

html-helper-modeは、emacs上でhtmlを書くときtagをいちいちキーボードを叩かずに入力するためのもので、
templateにも対応しています.

html-helper-modeを入手します.
必要なファイル

  • html-helper-mode.el
  • tempo.el
  • font-lock supportにあるhtml-font.el
  • emacsにmenuを追加するにはJun Ishikawaさん が作成されたhtml-helper-mode-menu
  • 自分用のtemplateを作成するなら私のmy_html.elを参考にしてください.
  • 少し、他のelファイルを置いてあります.参考にするならどうぞ

これら入手したファイルをpathの通ったディレクトリに置きます.
続いて.emacsに以下のように記述します.

<blockquote>
<pre>-------------------- .emacs --------------------
;; html-helper-modeの設定
;; カラー表示をする
;(if window-system (require 'hilit19))
(setq auto-mode-alist
  (cons
    '("\.html$" . html-helper-mode)
    auto-mode-alist))
(autoload 'html-helper-mode "html-helper-mode" t)

(add-hook 'html-helper-load-hook
	  (load "html-helper-mode-menu"))
(add-hook 'html-helper-load-hook
          '(lambda ()
	     (require 'html-font)
	     (load "c:/cygwin/usr/local/emacs/site-lisp/my_html"))) ;; パスは適時読み替えてください
(add-hook 'html-helper-mode-hook
          '(lambda ()
	     (font-lock-mode 1)))
------------------------------------------------

html-helper-modeのキーバンド一覧

X-Faceをmewでインライン表示する

X-Faceをmewでインライン表示するには、.emacsに追加します.

<blockquote>
<pre>;; X-Face for Mew
(setq mew-use-highlight-x-face t)
(setq mew-use-highlight-x-face-function
      (function
       (lambda (beg end)
	 (x-face-mule-x-face-decode-message-header beg end))))

html-helper-mode キーバンド一覧

比較的良く使う
C-c C-a l <a href=””></a>
C-c C-t 1
.
.
C-c C-t 6
<h1></h1>
.
.
<h6></h6>
ESC-RET <p>
C-c – <hr>
C-c RET <br>
C-c C-b ヘッダ内タグ
C-c C-b t <title></title>
C-c C-b i <isindex>
C-c C-b n <nextid>
C-c C-b l <link href=””>
C-c C-b b <base href=””>
C-c C-l リスト関連のタグ
C-c C-l o <ol>
<li>
</ol>
C-c C-l u <ul>
<li>
</ul>
C-c C-l r <dir>
<li>
</dir>
C-c C-l m <menu>
<li>
</menu>
C-c C-l d <dl>
<dt>
<dd>
</dl>
C-c C-l i 多くのリストの中で
<li>
または<dl></dl>内で
<dt>
<dd>
C-c C-l l <li>
C-c C-l t <dt>
<dd>
C-c C-i イメージ挿入関連のタグ
C-c C-i i <img src=””>
C-c C-i t <img alt=”” src=””>
C-c C-i a <img align=”” src=””>
C-c C-i e <img align=”” src=”” alt=””>
C-c C-s 論理スタイル関連のタグ
C-c C-s p <pre></pre>
C-c C-s b <blockquote></blockquote>
C-c C-s e <em></em>
C-c C-s s <strong></strong>
C-c C-s c <code></code>
C-c C-s x <samp></samp>
C-c C-s r <cite></cite>
C-c C-s k <kbd></kbd>
C-c C-s v <var></var>
C-c C-s d <dfn></dfn>
C-c C-s a <address></address>
C-c C-s q <q></q>
C-c C-s n <person></person>
C-c C-s y <acronym></acronym>
C-c C-s . <abbrev></abbrev>
C-c C-s m <cmd></cmd>
C-c C-s g <arg></arg>
C-c C-s l <lit></lit>
C-c C-p 物理スタイル関連のタグ
C-c C-p b <b></b>
C-c C-p i <i></i>
C-c C-p u <u></u>
C-c C-p f <tt></tt>
C-c C-p x <s></s>
C-c C-p ^ <sup></sup>
C-c C-p _ <sub></sub>
C-c C-p r <render tag=”” style=””>

mew メール振り分け

メーリングリスト等、一括でメールの振り分けが出来ます.

<blockquote>
<pre>;;; メール振り分け
(setq mew-refile-guess-alist
 '(("To:"
    ("meadow-users-jp@meadowy.org" . "+from/meadowML")
    )
   )
)

バックアップファイルを作らない

通常 emacsでファイルを保存するとバックアップファイルが作成されます.
しかし、NotePcなどドライブに余裕がない場合など、このバックアップファイルが作成されることによって
ドライブが圧迫してきます.
このファイルは「hoge~」となっています.

<blockquote>
<pre>;; バックアップファイルを作らない
(setq make-backup-files nil)

Timestampをつける

emacsでtimestampをつけるには、ファイルの先頭から 8 行以内に Time-stamp: <> または
Time-stamp: ” ” と書いてあれば、セーブ時に自動的に日付が挿入されます

<blockquote>
<pre>;;; 最終更新日の自動挿入
(if (not (memq 'time-stamp write-file-hooks))
    (setq write-file-hooks
          (cons 'time-stamp write-file-hooks)))

mewadow用

<blockquote>
<pre>;;;
(set-language-environment "Japanese")

;;; Windows IME
(setq default-input-method "MW32-IME")

;;; IME ONでカーソルの色を変える。
(add-hook 'mw32-ime-on-hook
          (lambda () (set-cursor-color "brown")))
(add-hook 'mw32-ime-off-hook
          (lambda () (set-cursor-color "black")))

;; Windows IME

(setq-default mw32-ime-mode-line-state-indicator "[--]")
(setq mw32-ime-mode-line-state-indicator-list '("[--]" "[あ]""[--]"))
(inactivate-input-method)

(mw32-ime-initialize)
(setq default-input-method "MW32-IME")

;; 常にホームディレクトリから
(cd "~")

いろいろ

<blockquote>
<pre>;; 文字の色づけ
(if window-system (require 'hilit19))
;(global-font-lock-mode t)

;; i-search されたところを反転す
(setq search-highlight t)

Mewでファイル添付の仕方

画面イメージはWindows 2000 pro でmeadow /mew でsnapしていますが、Linuxでも全く同じ作業です

通常のメールを書いてその後、以下のように作業をする

メニューバーのMew/draftを開いて、Prepare Attachmentsを選択する。

Mew/draftのAttachment CommandsのInsert a File by Copyingを選択、添付したいファイルのファイル名を入力。

Mew/draftのAttachment CommandsのChange the Typeを選択、添付したいファイルが、圧縮ファイルなら
Application/Octet-Streamと入力 htmlファイルなら、Text/Htmlと入力

textファイルなら、ファイル名を入れるだけでOKみたいです

Mew/draftのAttachment CommandsのEncode with Base64を選択

続いて、Mew/draftのMake MIME Messageを選択

–Next_Partとかがついて、こんな風な感じになればOK

これで添付できたので、送信します。[C-c C-c]

hns(ハイパー日記システム)のインストール

hns(ハイパー日記システム)のインストール

日記なんて小学生以来書いた覚えはないのですが、PC上で何をしたか等 備忘録のため
Vaioにインストールしてみました.
まず、公式サイトに行って情報を収集しましょう.
インストールの仕方を見るとVine 2.1では問題なさそうなのでdocの通り
インストールしてみました.
インストール自体は、特に難しくありません.
Vaioには、自分の備忘録としてインストールしましたが、www.club535.comには
Linuxの情報やwebの更新情報などを管理できるのでclub535のサーバーにもインストールしました.

club535.comサーバーにhnsをインストール

はじめに、club535.comは自前のサーバーではありません.
ですから、telnet経由で各種設定を行います.
club535はFreeBSDです.現在私が利用しているOSはLinuxなので少々勝手が違います.特にbashが
デフォルトでインストールされていない.

  • bashのinstall
  • kakasiのinstall
  • namazuのインストール
  • hnsのインストール
  • という順番でインストールを行いました.
    bash,kakasi,namazuはドキュメントが豊富にあるので割愛させていただきます.

    sourceの取得

  • hns-2.10-pl0.tar.gz

  • namazu_for_hns-2.0-pl3.tar.gz 2つのsourceを落とします.
    $ mkdir src
    $ cd src
    $ tar zxvf ../hns-2.10-pl0.tar.gz
    $ hns-2.10-pl0
    $ hns-setup.ja
    各項目を入力します.
    インストールが終われば、~/.hnssetupが出来ます.

    ———- .hnssetup ———-
    DEFTITLE=”hoge日記” ; ホームページのタイトル
    DEFMAIL=”hohe@hoge.fuga.com” ; メールアドレス
    DEFDIARY=”/home/hoge/diary” ; 日記の置き場所
    DEFHTML=”/home/hoge/public_html/diary” ;公開する日記の場所
    DEFUNAGI=”ON” ; namazuを使うか否か
    DEFTOMAIL=”hohe@hoge.fuga.com” ; 更新した日記を送るメールアドレス
    DEFFROMMAIL=”hohe@hoge.fuga.com” ; メールで日記を更新する時のメールアドレス
    DEFPASSWD=”hoge” ; パスワード
    DEFURL=”http://xxx.xxx.xxx.xxx/~hoge/diary/” ; 日記のURL
    DEFTHEME=”japanese” ;themes
    DEFANTENNA=”NG” ; アンテナに登録してもいいか
    DEFAUTHOR=””
    DEFMESMAIL=””
    DEFNEWREVERSE=”0″
    DEFSTARTYEAR=”2001″ ; 日記を書き始める年
    ——————————-

    インストールが完了すれば、http://xxx.xxx.xxx.xxx/~hoge/diary/で日記が表示されます

  • hnsのカスタマイズ

    簡単な方法として、~/diary/conf/内にある

    • head.txt
    • foot.txt

    を編集します.

    head.txt

    index.cgiにアクセスしたときに付加するheaderになります.
    例えば、style sheetを追加したり、画像(ロゴ)を表示させたいときに記述します.
    私の場合、このようなhead.txtになっています.

    ————————————————————
    <LINK REL=”stylesheet” TYPE=”text/css”HREF=”/diary.css”>
    <CENTER>
    <IMG SRC=”/cgi-bin/linuxbook/gif/messageb.gif”>
    </CENTER>
    <body background=”/cgi-bin/linuxbook/gif/kabe.gif”
    ————————————————————

    foot.txtについても同じようにhtmlソースを記述すればよい

    Namazu v2 for hns による日記の全文検索

    インストールするにはここに詳しく書かれていますから読んでおきましょう.
    以下はここの抜粋です

    1. Namazu を取得してインストール

    http://www.namazu.org/ より最新版を入手して下さい。
    % wget -nd http://www.namazu.org/stable/namazu-2.0.5.tar.gz
    % wget -nd http://www.h14m.org/dist/namazu_for_hns-2.0-pl3.tar.gz
    % tar zxvf namazu_for_hns-2.0-pl3.tar.gz
    % tar zxvf namazu-2.0.5.tar.gz
    % cd namazu-2.0.5
    % ./configure –prefix=/usr/local
    % make
    % su
    % make install
    % cd ../namazu_for_hns-2.0-pl3

    2. (通常は不要) hnf用フィルタをインストール

    (Namazu に添付の hnf.pl が古い場合のみ必要)
    % ./setup-filter.sh /usr/local
    – prefix –

    3. 起動スクリプト, 設定ファイルをインストール

    % ./setup.sh /usr/local
    – prefix –

    注) Namazu 2.0.x を rpm でインストールされている場合は、
    % ./setup-rpm.sh

    hns-1.x をご利用の場合は、
    % ./setup.sh /usr/local 1
    – prefix –

    ホーム・ディレクトリにインストールする場合

    1. Namazu を取得してインストール

    http://www.namazu.org/ より最新版を入手して下さい。
    % wget -nd http://www.namazu.org/stable/namazu-2.0.5.tar.gz
    % wget -nd http://www.h14m.org/dist/namazu_for_hns-2.0-pl3.tar.gz
    % tar zxvf namazu_for_hns-2.0-pl3.tar.gz
    % tar zxvf namazu-2.0.5.tar.gz
    % cd namazu-2.0.5
    % ./configure –prefix=$HOME/diary/namazu2 –with-pmdir=$HOME/lib
    –with-pmdir で Perl Module のインストール先を指定。
    % make
    % make install
    % cd ../namazu_for_hns-2.0-pl3

    2. (通常は不要) hnf用フィルタをインストール

    (Namazu に添付の hnf.pl が古い場合のみ必要)
    % ./setup-filter.sh $HOME/diary/namazu2
    —— prefix —–

    3. 起動スクリプト, 設定ファイルをインストール

    % ./setup-u.sh $HOME/diary/namazu2
    —— prefix —–
    注) hns-1.x をご利用の場合は、
    % ./setup-u.sh $HOME/diary/namazu2 1
    —— prefix —–

    インデックスの作成

    $ cd ~/diary/bin

    $ ./hns-index2
    でインデックスが作成・追加されます.なお,インデックス作成後に 以前の日記ファイルを更新した場合は,インデックス・ファイルの中に ゴミがたまりますので,そのゴミを 削除したい場合は,

    $ ./hns-index2 -gc
    としてください.
    インデックスがおかしくなってしまったというような場合には,

    $ ./hns-index2 clean
    で完全に作り直すことができます.
    注意:
    Namazu v2 ではインデックスのフォーマットが変更されました。 以前のバージョンと互換性はありません。
    また、rpm等でインストールしている場合は、
    $ ./setup-rpm.sh
    一発でインストールできます.

    日記をメールで更新

    メールを日記で更新するにはhnsをおいているシステムにsendmail等がインストールされていなければ使えません.
    telnetなどで接続してから、sendmailの場所を確認しておきましょう.

    設定

    ドキュメントに必ず目を通しましょう
    私が書かなくても、詳しくドキュメントに記載されていますので、説明は省き設定内容を載せておきます.
    そうそう、はじめにforwardの設定を行ってくださいね.
    これが出来ないとメールで日記の更新は難しいでしょう.

    .forward

    fuga, “|/home/hoge/diary/bin/mail2nikki.pl “

    mail2nikki.pl

    #!/usr/bin/perl

    require ‘/hoge/fuga/www/diary/lib/jcode.pl’;

    # $diaryDir 日記のあるディレクトリ
    $diaryDir = “/hoge/fuga/diary”;

    # 報告を受け取るアドレス.
    $mailAddress = ‘xxx@xxx.xxx.xxx’;
    # 投稿を許すアドレス(From認証) -複数のアドレスが登録可能です-
    @certiy_mailAddress = (‘xxx@xxx.xxx.xxx’);
    # 報告メールの From: アドレス
    $recvMailAddress = ‘xxx@xxx.xxx.xxx’;

    # パスワードです。
    $MASTERPASSWD = “hoge”;

    # 日記ファイルディレクトリの対応
    $hnfDir = 1; # 1 分散管理(ex ~/diary/1998/19981201.hnf), 0 一括管理
    # LOGMODE 全文ログを取得する時 0 エラー時のみ, 1 常に, 2 絶対しない
    $LOGMODE = 0;
    # status reporting mail
    $MAILMODE = 0; # 1 無条件で動作報告メール
    # use nkf?
    $NKF_USE = 1; # 1 -> Use (default), 0 -> No Use
    # auto signature cut
    $SIG_CUT = 0; # 1 Signatureを削除する
    $SIG_PATTERN = ‘^– $’; # Signatureの開始行の正規表現

    # Update Namazu index?
    $NamazuExecFlag = 1; # 0 -> no (default), 1 -> yes
    # where is hns-index?
    $MkNamazuPath = “$ENV{‘HOME’}/diary/bin/hns-index”;

    # sendmail の場所 各サーバによって違うでしょう
    $sendmail = “/usr/sbin/sendmail”;
    # nkf の場所 確かめてね
    $nkf = “/usr/bin/nkf”;私は大体このような設定になっております.
    もし、うまく更新できていなければ はじめにメールがサーバーに届いているか確認しましょう.
    メールが届いているなら、.forwardの設定がうまくできているか確認しましょう.
    ~/diary/mail内にlogが出来ています.