表紙
UBUNTU 9.04で遊ぶ
La foneraで無線LAN ON-OFF
KNOPPIX をUSBメモリにインストールしてCF-R7で使う
UBUNTU 8.10 日本語リミックスにApache2インストール

玄箱/Proをいじる


玄箱/Proとインターフェースと温度

コンソールインターフェース

英語発音記号 変換


                                           2007.6.28  下村
                                           2010.4. 1  修正
                                           ea7k-smmr@asahi-net.or.jp


1.概要
    
    ・シリアルコンソールで玄箱をいじる
    ・Lighttpdのインストール
    ・ファイルのアップロードを試した
    ・子分のマイコンを突っつく
    ・Cronを動かす
    ・温度管理
    ・温度表示
    ・時刻あわせ
    ・HDDの切り離しとマウント
    ・resolv.confの設定
    ・UTF-8 NKF
    ・Jcode,Carp-Clan,Date-Calcモジュールのインストール
    ・FD Clone のインストール
    ・Proftpd
    ・Sqlite3 のインストール
    ・Perlセッション管理
    ・COBOLソースをつくる
    ・英語の発音記号変換


2.最初

    最初はドキュメントのようにインストールして、HDDをつけました。
    開発環境もドキュメントのとおりにインストール。HDDのルートに
  できてしまった。
    (よって、次の日経LINUXのインストールをする場合はディレクトリが変わる。)
    次はシリアル変換ボードを作る。
    回路はいつものやつです。DSUB9ピンはオスなのでPC本体と同じく2,3番ピンを
    接続する。よって、クロスケーブルでPCとつなぐこと。
    コネクタは手元にNH型のピンがあったのでそれにあわせた4ピンコネクタを購入。
    不器用だから、接触不良があったができた。
    コンソールをつなげて初めてわかったが電源を入れてから、ピ音の後しばらくして
    ピピと鳴るのがいつかがわかった。すっきりした。
    なんでこんなときなるのと思っていた。


3.Lighttpdのインストール

    日経LINUX 6月号のようにソースよりインストールに挑戦した。2時間くらいかかった。
    固定IPアドレス、DNSの設定は後でもいいのでしなかった。
    あとは書いてあるように進めると出来上がる。
    SWAPファイルも作る。設定も追加。
    書いてある順に作成してテストの時、WEBよりダウンロードした追加の設定ファイルをそのまま
    見ないでコピーしたのがいけなかった。HTTPDが動作しない。(5/10に修正されている)
    改行コードをLF、「¥」コードをASCIIに修正すると動いた。
    SAMBA経由でコピー、編集は気をつけよう。

    だめだったから、バイナリもインストールしたが書いてあるようにやるとフラッシュメモリに
    入れる。これも動いた。このとき、改行コードをLF、「¥」コードに気が付いた。

    Perlのモジュールについて
     ・Net::FTP, Net::SMTPは動作しない。(?)
     ・utf8プラグマあり
     ・rawプラグマなし
     ・CGI モジュールでは
		print header(-type=>'text/html',-charset=>'EUC_JP');
		の設定だけでは<meta>タグのcontentのcharset種別が指定どおりにならない。
        ...
        use CGI; 
        my $query = CGI->new();
        my $upfile = $query->param('file01');
        ^^^^^^^^^^ パラメータの内容が格納されない。

        use CGI qw(:standard); 
        my $upfile = param('file01');
        ========== こうすると格納。qw(:standard)も記述。他の関数も同様。

    Windowsでもみることができる漢字ファイル名を作るにはutf8コードでPerlプログラムを作る。


4.子分のマイコンを突っつく

    ドキュメントにKUROBOX/PROマイコン通信仕様 というのが付いている。
    これって何?と思って製品仕様書のブロックダイヤグラムをみるとシリアルがコンソール
    と子分の方に線が引いてあった。
    ls /dev でttyS0, ttyS1というのがあるのでttyS1が子分ときめつけ突っついてみる。

	Perlで動くもの。
	コマンド: ./linuxcom.pl 012002 4 <ret>
	ピ音がなる。

    通信仕様より

    1バイト目 : データ転送の方向とデータの長さ
    2バイト目 : コマンド
    3バイト目 : 設定データ、参照データの1バイト目(ないこともある)
    4バイト目 : 設定データ、参照データの1バイト目(ないこともある)
      :
      :
    最後    : チェックサム。1バイト目からチェックサムの前までを
                    1バイトごとにunsigned charで合計して下8ビットを2の補数

    コマンド例  (チェックサムはプログラムでする)
    
    ブザー ピ音   "013002xx"  ->
    ブザー ピピ音 "013001xx"  ->
    ブザー ピー音 "013003xx"  ->
    ブザー 音止め  "013000xx"  ->
        以下省略

    ブザー音周波数

        4000000 / 周波数 = 設定値 (16ビット以下)で計算したのを
        下8ビット 上8ビットの順で設定。
        "0253LLHHxx" ->

    温度読み出し

        "8037xx" ->     <- "8137291F" などと帰ってくる。

    LED点滅

        "02520100xx" ->         POWER LEDが点滅
        "02520000xx" ->         POWER LEDが点灯のまま
    
    LED輝度
    
        "013A05xx" ->           LEDが暗くなる

    後のコマンドは怖いのでやらない。
    Perlで作ったのを置いておきます。
    PerlはLighttpdで一緒にインストールされるのでもいいですし、CDROMでインストール
    されるのでもどちらでも動作。


5.crontab, cronを動かす

   crontab -e とやっても
   /var/spool/cron/crontabs がないエラーが出るので以下のことをする。

    (1) ls -l /var/spool/cron でリンク先をみると /etc/cron
     リンク先がないので
   	mkdir /etc/cron
  (2)さらに。
		mkdir /etc/cron/crontabs
		とディレクトリを作る。
    (3) crontab -e
    	*/1 * * * * /mnt/disk1/test.sh >/dev/ttyS0

       viが起動されるので上の1行を入れる.

    (4) test.sh

	 	#!/bin/sh
		echo '**test**'

       をさっき指定したところに作る。
       chmod 777 test.sh

    (5) これではまだ起動しないので
    	crond -L /dev/null
    	とデーモンを起動する。
	
        すると1分ごとに”**test**”がシリアルコンソールに表示される。
        /etc/init.d/rcS の最後に追加。


6.温度管理

    crontab -e
    	*/15 * * * * /mnt/disk1/temp_drive.pl >>/mnt/disk1/temp.log

    で15分ごとに温度のログが取れる。
     # cat temp.log
    2007年 05月 15日 22:15:01 温度 41℃
    2007年 05月 15日 22:30:01 温度 41℃
    2007年 05月 15日 22:45:02 温度 40℃

	---------------------temp_drive.pl-----------------------------
	#!/opt/bin/perl
	($sec,$mm, $hh, $dd, $month, $year,$wday) = localtime;
	$year=$year + 1900; $month++;
	$data="8037";
	$sum=unpack("%8C*",pack("H*",$data));
	$data=$data . sprintf("%02X",(0-$sum) & 255);
	$port = "/dev/ttyS1";
	system ("stty -F $port 38400 cs8 clocal cread parenb -cstopb -crtscts ⇒
               	-icanon -opost -echonl -isig -iexten -ixon -echo");  #1行で
	open (SERIALPORT, ">$port") or die "can't open $port. ";
	open (STATUS, "<$port") or die "can't open $port. ";
	syswrite(SERIALPORT, pack("H*", $data), length($data)/2);
	while(sysread(STATUS,$rcv,4)==0) {
		;
	}
	close (SERIALPORT);
	close (STATUS);
	if( length($rcv) == 4 ) {
	  $sum=unpack("%8C*",$rcv);
	  if( $sum == 0 ) {
	    print sprintf("%04d年 %02d月 %02d日 %02d:%02d:%02d 温度 %d℃\n",
				 $year,$month,$dd,$hh,$mm,$sec, unpack("c*",substr($rcv,2,1)));
	  }
	}
	exit 0;
	---------------------temp_drive.pl-----------------------------

     ★【注意】crondを動かす前に
     	chmod 666 /dev/ttyS1
     	をすること。CGIで使うときは重要。
     ★ 上のプログラムで15分毎計測でログをとると、ゼロ度を表示する時がある。(?)


7.温度表示

    temp.cgi(temp.lzh) 上の手順でWEB表示するもの。

温度
	
8.時刻あわせ

    時計がずれているのであわせたくてrdateをやってみたがうまくいかなかった。
    ntpクライアントを探してPerlのがあったがちょっとうまくいかなかった。
    もうひとつセイコープレシジョン株式会社さんのCソース付きのがあったのでやってみた。
    Windowsで解凍するようになっている。WindowsのEXEも一緒。

   ・セイコープレシジョン(株)タイムサーバ時刻修正ソフト
     http://www.seiko-p.co.jp/systems/support/download/time.html
   ustdate0204.exe
    (古い情報だったので確認したらWEB上には2009年3月でなくなっていました) 

    コンパイル
    	ustdate.custdate.hを適当なディレクトリにいれて
		
        cc ustdate.c -o ustdate -DLINUX

        とやると出来上がる。
        /usr/local/sbin にコピーする。

    使い方
	
    	ustdate -T xxx.xxx.xxx.xxx

        サーバはアドレスで指定する。と、違いがわかる。

        ustdate -S xxx.xxx.xxx.xxx

        で同期設定する。

    その他はマニュアル参照のこと。
    ドメイン名で接続できない時は、/etc/resolv.conf を設定のこと。

    rebootするとだいぶずれる
     ...............................................
      ustdate  MachineTime:2007/05/23 14:35:48.769
            Offset     : -343.115146 sec. for ntpxxxxxjp
            SetNowTime :2007/05/23 14:30:05.654
     ...............................................

    よって、/etc/init.d/rcS の最後に ustdate -S xxx.xxxx.xx を入れたほうがよい。
    さらにcrontab で24時間1回程度設定するようにすればよい。

    48時間で300msecくらいずれる。(外気温26~28°で玄箱Pro温度38~40で)


9.HDDの切り離しとマウント

    あっちっちになったらどうする!
    ということでHDDを切り離すのとマウントするのをやってみました。
    再マウント時にちょっとおかしくなる場合がある。
    先の”子分のマイコンを突っつく”で使ったものを使います。
    httpd は/mnt/mtdにあります。
    ドキュメントルートは切り離し、マウントで切り替わるようにhttpd.shを修正。
    切り離した時はあっちっち1ページのみ表示。(/mnt/mtd/www : lighttpd2.conf)
    通常時はindex.htmlページのみ表示。(/mnt/disk1/www : lighttpd.conf)

あっちっち

	HDD切り離しの手順 (stop_hdd.sh)
	(1) HTTPD停止
	(2) SWAPFILE切り離し
    (3) SAMBA 停止
	(4) /mnt/disk1 アンマウント
	(5) HDD モータOFF
    (6) SAMBA 開始
	(7) HTTPD再開

	HDDマウントは切り離しの逆の手順 (start_hdd.sh)
	(1) HTTPD停止
    (2) SAMBA 停止
	(3) HDD モータOFF
	(4) /mnt/disk1 マウント
    (5) SAMBA 開始
	(6) SWAPFILE接続
	(7) HTTPD再開

    15分ごとに動かす温度計測Perlプログラムを改造して、
    45度を超えたらHDD停止、42度以下で接続するようにする。


10.resolv.confの設定

    時刻あわせの時にドメイン名でできなかったのがへんだなと思っていたら、まだありました。
    これでもドメイン名ではIPアドレスの解決をしてくれないなので、/etc/nsswitch.conf

	hosts:  files dns

    と dns を追加します。

    ()()()固定IPアドレスが望みだったので()()()
    通常そのままNASにしてDNSでアドレス設定すると /etc/resolv.conf  ファイルに1行追加されます。
    nameserver xxx.xxx.xx.xx

    ところが/etc/netinfo に 玄箱PROを固定IPアドレスしようとして my_ipaddress, my_subnetmask, my_dgw
    を設定しただけでは /etc/resolv.conf には何も書き込まれません。
    my_dns1 にアドレスを追加定義します。
    ___________________________
    my_ipaddress=192.168.1.151
    my_subnetmask=255.255.255.0
    my_dgw=192.168.1.1
    my_dns1=192.168.1.1
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    my_dns1のアドレスが/etc/resolv.confに定義されます。
   ()()()ここまでは固定IPアドレスにするための話でした()()()

    で、以下のPerlプログラムでテストしてください。

   ----------------------------------
    #!/opt/bin/perl
    use Socket;

    $host = inet_aton("ドメイン名");
    print sprintf("Host:%s.%s.%s.%s\n\n" ,unpack("C*",substr($host,0,1)),unpack("C*",substr($host,1,1)),
                       unpack("C*",substr($host,2,1)),unpack("C*",substr($host,3,1)));
    print "\n\n";
   ----------------------------------

    Host:123.456.789.023

    というように表示されればOK.


11.UTF-8 NKF

    WindowsでSAMBA経由で日本語ファイル名を書き込むと ls ではぺけぺけになる。
    (Windowsのファイル管理では日本語、長いファイル名はUTF-8で格納される。
     USB のストレージディバイスもそう。)

    そこでUTF-8 対応NKFを入れよう。コンソールで見えるようになるから。
    nkf204.tar.gz をダウンロードして、解凍、make, make test
    /usr/bin/nkf を入れ替える。
   
   コンソールは普通はSjisコードを指定している。ファイルの中身がSjisだから。
   コンソールでファイル名をUTF-8に漢字変換してファイルを作ってもそれが正しい名前にはなるとは
   限らないので注意。
   Perlではプログラムの文字コードをutf8にするといいようです。
   ShiftJisで書いたものをutf8にプログラムで変換してもだめなようです。
   utf8プラグマあり、rawプラグマなしでした。

    Perl5.8 ではEncodeモジュールの場合
    -----------------------------
    #!/opt/bin/perl
    use strict;
    
    use Encode;    # Encodeモジュール
    my $rtn;
    open DIR,"ls ..|";
    while(<DIR>) {
       $rtn = Encode::from_to($_, 'utf8', 'shiftjis');
       print $_;
    }
    close DIR;
    exit 0;
    -----------------------------

   Perlのモジュールもあるので。
   (Perl5.8 ではEncodeモジュールでできるので特にいらない。)

    作成手順
     # cd nkf204/NKF.mod
     # perl Makefile.PL
     # make
     # make install
     # exit

    Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/NKF.pm
    Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/NKF/NKF.so
    Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/NKF/NKF.bs
    Writing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/NKF/.packlist

    というところに作成されました。この4つのファイルを実際のディレクトリにコピーします。

     # cp /mnt/disk1/???/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/NKF.pm /opt/lib/perl5/site_perl/5.8.8/armv5tejl-lin
     # cp -r /mnt/disk1/???/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/NKF /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto

    でテスト。

    -----------------------------
    #!/opt/bin/perl
    use NKF;
    
    open NKF,"ls ..|";
    while(<NKF>) {
            print nkf("-s",$_);
    }
    close NKF;
    exit 0;
    -----------------------------

    日本語漢字が見えたらOK。


    ○○○付録○○○○○○
    (1)	Jcode-2.06.tar.gzのダウンロード
    (Perl5.8 ではEncodeモジュールでできるので特にいらない。)
    (2) tar zxf Jcode-2.06.tar.gz
    (3) cd Jcode-2.06
    (4) perl Makefile.PL
    (5) make
    (6) make install

    	Installing /opt/lib/perl5/site_perl/5.8.8/Jcode.pm
    	Installing /opt/lib/perl5/site_perl/5.8.8/Jcode/Nihongo.pod
    	Writing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Jcode/.packlist
    	Appending installation info to /opt/lib/perl5/5.8.8/armv5tejl-linux/perllocal.pod

    (7) make test
        動作確認。
    (8) 開発環境を抜ける。
    (9) モジュールを環境に合わせてコピーか、リンクする。
        コピーの方法で。

        cp /mnt/disk1/xxxx/opt/lib/perl5/site_perl/5.8.8/Jcode.pm /opt/lib/perl5/site_perl/5.8.8
        mkdir /opt/lib/perl5/site_perl/5.8.8/Jcode
        cp /mnt/disk1/xxxx/opt/lib/perl5/site_perl/5.8.8/Jcode/Nihongo.pod /opt/lib/perl5/site_perl/5.8.8/Jcode
        mkdir /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Jcode
        cp /mnt/disk1/xxxx/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Jcode/.packlist =>
                          /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Jcode
    -------TEST------------------
    #!/opt/bin/perl
    use Jcode;
    
    open JPN,"ls ..|";
    while(<JPN>) {
            print jcode($_)->sjis;
    }
    close JPN;
    exit 0;
    -----------------------------
    ○○○○○○○○○○○

    Carp-Clanモジュールのインストール
      Date-Calc-5.4をインストールする前にCarp-Clan-5.9をインストールしないと
      テストでエラーがですので。

      t/m005....Can't locate Carp/Clan.pm in @INC


     # tar zxf Carp-Clan-5.9.tar.gz
     # cd Carp-Clan-5.9
     # /opt/bin/perl Makefile.PL
     # make
     # make test
        3 tests and 1 subtest skipped.
        Failed 1/5 test scripts, 80.00% okay. 2/57 subtests failed, 96.49% okay.
        make: *** [test_dynamic] Error 255

     # make install
        Installing /opt/lib/perl5/site_perl/5.8.8/Carp/Clan.pm
        Installing /opt/lib/perl5/site_perl/5.8.8/Carp/Clan.pod
        Writing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Carp/Clan/.packlist
        Appending installation info to /opt/lib/perl5/5.8.8/armv5tejl-linux/perllocal.pod

      なので開発環境を抜けてのインストールは
     # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/Carp /opt/lib/perl5/site_perl/5.8.8
    
    ○○○○○○○○○○○
    
    西暦4000年は平年かを試したかったから、Date-Calc-5.4のインストール

     # tar xf Date-Calc-5.4.tar.tar
     # Date-Calc-5.4
     # /opt/bin/perl Makefile.PL
     # make
     # make test

        All tests successful, 4 tests skipped.
        Files=48, Tests=2436, 22 wallclock secs (15.03 cusr +  2.77 csys = 17.80 CPU)
    
     # make install

        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Date/Calc/Calc.so
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Date/Calc/Calc.bs
        Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calc.pod
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calendar.pod
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calendar.pm
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calc.pm
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calc/Object.pod
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calc/Object.pm
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calendar/Year.pm
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calendar/Profiles.pm
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calendar/Year.pod
        Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date/Calendar/Profiles.pod
        Writing    /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Date/Calc/.packlist
        Appending installation info to /opt/lib/perl5/5.8.8/armv5tejl-linux/perllocal.pod

    なので開発環境を抜けてのインストールは

     # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/Date /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto
     # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Date /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux

    ○○○○○○○○○○○


12.ファイルのアップロードを試す

    WEBが普通に表示されるので、アップロードができるか試したらこれもできた。
    ドキュメントルートのディレクトリに「 work 」というフォルダを作ってそこに
    up.html, uploading.cgi を入れる。

    SAMBAで使うことを考えてファイル名の文字コードをutf8にした。


13.FD Clone のインストール

    (1)FD-2.09d.tar.gz をダウンロードする。

    (2)tar で解凍。

    (3)cd FD-2.09d

    (4)machine.h   の501行目 #define       CODEEUC をコメント。

    (5)make

    (6)コンパイル環境から抜けて、できた
            fd
            fdsh
            fd-dict.tbl
            fd-unicd.tb
    
         を /usr/local/bin にコピー。

    (7)設定ファイル _fdrc を名前を変えて
            /etc/fd2rc    としてコピー。

        fd2rc の 349行目にあるファイル名の漢字コードを
    
        #FNAMECODE=""   =>   FNAMECODE=utf8

        コメント行でなくして修正する。

    これで漢字ファイル名が見えればOK。
    なお、この設定はターミナルはSJISコード表示としています。


14.Proftpd

    (1) 付属CDの"development_kit"ディレクトリから"hddrootfs.tar.gz"を取り出し、 
       玄箱に取り付けたHDDに展開する。

       # tar zxvf ./hddrootfs.tar.gz -C /mnt/disk1 

       ★展開ディレクトリはよく考えて!

    (2) 必要なファイルをフラッシュメモリにコピー。

        それぞれ"/mnt/disk1/usr/local/sbin/proftpd"と 
        "/mnt/disk1/etc/proftpd/proftpd.conf"にある。 
        その他の設定を行う。
        HDDを切り離すことも考えてフラッシュにコピー。

      ・・・・・・・・・・・・・・
        # mkdir /etc/proftpd 
        # cp /mnt/disk1/etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf 
        # cp /mnt/disk1/usr/local/sbin/proftpd /usr/local/sbin/proftpd 

        # vi /etc/inetd.conf 
            (最終行に追加) 
        ftp stream tcp nowait root /usr/local/sbin/proftpd proftpd 

        #vi /etc/init.d/rcS に
            (最終行に追加) 
        mkdir /var/proftpd 

        # vi /etc/proftpd/proftpd.conf 

        ServerType inetd 
        RootLogin off 
        UseReverseDNS off 
        IdentLookups off  
        DefaultRoot ~/homepage  

        Anonymousのコメントアウト
      ・・・・・・・・・・・・・・
        AuthPAM off にするとコンソールに出ていたメッセージがでなくなる。


    (3) ユーザの追加

        テストをする、または使うために。
        HDDを切り離すとシンボリックリンクの先がないのでLOGINできなくなる。
        またつなぎなおすとできるようになる。
        シンボリックリンクの先を変えることでユーザごとの見えるところを換えることができる。

        #addgroup -g 23 www
        #adduser -h /home/netftp -s /bin/sh -G www netftp
          password: xxxxxx
        #ln -s /mnt/disk1/www /home/netftp/homepage


    (4) 起動スクリプトを使ってinetdを再起動する。 
    
        リブートしてもftpdが起動しないなら、
        #mkdir /var/proftpd 
        をやってから、
    
        # /etc/init.d/inetd.sh restart 

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
   他からftpができない場合はどっかが間違っている。
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    (5) ログファイル

        proftpd.confで

            ExtendedLog を指定してもでない
            SystemLog を指定するとftpdが起動しない。
            TransferLogを指定すると転送ログが全部でなくなる。

        /var/log/xferlog をシンボリックリンクしても全部でない。

        /var/log/xferlog    に転送したファイル情報がのる。

        Sat May 19 01:01:18 2007 0 192.xxx.x.xx 1767 /mnt/disk1/www/xxxx a _ o r netftp ftp 0 * c
        Sat May 19 10:24:41 2007 0 192.xxx.x.xx 511 /mnt/disk1/www/index.html a _ o r netftp ftp 0 * c


15.Sqlite3のインストール
	
	perl と ソースから
    DBI-1.37.tar.gz は古い、DBD-SQLite-1.13.tar.gz はワーニングが出るから修正。

    (1) DBI-1.56.tar.gz のインストール

         # tar zxf DBI-1.56.tar.gz
         # cd DBI-1.56
         # /opt/bin/perl Makefile.PL
         # make
         # make install

            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/Driver_xst.h
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/DBIXS.h
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/Driver.xst
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/dbi_sql.h
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/dbivport.h
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/dbd_xsh.h
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/dbipport.h
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/DBI.so
            Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Roadmap.pod
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/goferperf.pl
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/TASKS.pod
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Changes.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Roadmap.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/ProfileSubs.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/FAQ.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/W32ODBC.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Profile.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/ProfileDumper.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/ProxyServer.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/DBD.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/PurePerl.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/ProfileData.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Gofer/Response.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Gofer/Request.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Gofer/Execute.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Gofer/Transport/Base.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Gofer/Transport/stream.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Gofer/Transport/pipeone.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Util/_accessor.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Const/GetInfoType.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Const/GetInfoReturn.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Const/GetInfo/ODBC.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/Const/GetInfo/ANSI.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/DBD/Metadata.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/ProfileDumper/Apache.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI/SQL/Nano.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Proxy.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/DBM.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/File.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/NullP.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Sponge.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/ExampleP.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Transport/pipeone.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Transport/Base.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Transport/stream.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Transport/null.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Policy/rush.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Policy/classic.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Policy/Base.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/Gofer/Policy/pedantic.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Bundle/DBI.pm
            Installing /opt/bin/dbiprof
            Installing /opt/bin/dbiproxy
            Installing /opt/bin/dbilogstrip
            Writing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI/.packlist
            Appending installation info to /opt/lib/perl5/5.8.8/armv5tejl-linux/perllocal.pod

    (2) DBD-SQLite-1.12.tar.gz のインストール

        DBD-SQLite-1.13.tar.gz をインストールしたのだが、
        "closing dbh with active statement handles at xxxxxx.cgi line 99." のワーニングがでるので
        1.12をインストールしなおした。このとき注意することは、
        /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite/SQLite.so
        /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite/SQLite.bs
        /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/SQLite.pm
        を手で削除してから、make install する。


         # tar zxf DBD-SQLite-1.12.tar.gz
         # cd DBD-SQLite-1.12
         # /opt/bin/perl Makefile.PL
         # make
         # make install
        
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite/SQLite.so
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite/SQLite.bs
            Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
            Installing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/SQLite.pm
            Writing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite/.packlist
            Appending installation info to /opt/lib/perl5/5.8.8/armv5tejl-linux/perllocal.pod


    (3) 開発環境を抜けて

      # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBI ===>
                                            /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto
        # cp /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI.pm ===>
                                             /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux
        # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBI ===>
                                            /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux
        # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD ===>
                                            /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux
        # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Bundle ===>
                                            /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux
        # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/Win32 ===>
                                            /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux
        # cp /mnt/disk1/opt/bin/dbiprof /opt/bin/dbiprof
        # cp /mnt/disk1/opt/bin/dbiproxy /opt/bin/dbiproxy
        # cp /mnt/disk1/opt/bin/dbilogstrip /opt/bin/dbilogstrip

        # mkdir /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite
        # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite/* ===>
                                            /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/DBD/SQLite
        # cp /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/SQLite.pm ===>
                                            /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/DBD/SQLite.pm


    (4) Sqlite3 のソースコンパイル

        sqlite-3.3.17.tar.gz をダウンロードする。
        make_sqlite3.tar.gz を後のほうにあるタグをクリックしてダウンロード。

        # tar zxf sqlite-3.3.17.tar.gz
        # tar zxf make_sqlite3.tar.gz
        # cd make_sqlite3
        # make
        # make install

            mv sqlite3 /usr/local/bin
            mv libsqlite3.a /usr/lib
            mv sqlite3.h /usr/include

        # make clean

        sqlite3 は /usr/local/bin
        libsqlite3.a は  /usr/lib
        sqlite3.h は /usr/include
        に各々設定されるので、開発環境を抜けたら sqlite3 を /usr/local/bin とかにコピーすること。
        ただ作るだけ。TEST はなし。

        Sqlite3をコマンドラインから使う時TeraTermだとviのカーソルキーを操作するので使いにくいかも。


16.Perlセッション管理

    Session.pm を入れる前にSQLITE 関係のDBD、DBI が入れてあること。
    このセッション管理はSqliteデータベースを使用しての例題である。

    (1)  CGI-Session-4.10.tar.gz のインストール

         # tar zxf CGI-Session-4.10.tar.gz
         # cd CGI-Session-4.10
         # /opt/bin/perl Makefile.PL
         # make
         # make test

            All tests successful, 22 tests skipped.
            Files=43, Tests=547, 128 wallclock secs (107.41 cusr +  5.16 csys = 112.57 CPU)

            ちょっとスキップするテストが多いがなんとか出来上がる。

         # make install
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Driver.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Tutorial.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/ErrorHandler.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Test/Default.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Driver/postgresql.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Driver/sqlite.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Driver/db_file.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Driver/mysql.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Driver/DBI.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Driver/file.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Serialize/storable.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Serialize/json.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Serialize/freezethaw.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Serialize/yaml.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/Serialize/default.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/ID/static.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/ID/incr.pm
            Installing /opt/lib/perl5/site_perl/5.8.8/CGI/Session/ID/md5.pm
            Writing /opt/lib/perl5/site_perl/5.8.8/armv5tejl-linux/auto/CGI/Session/.packlist
            Appending installation info to /opt/lib/perl5/5.8.8/armv5tejl-linux/perllocal.pod

           となるので。開発環境を抜けて、

         # cp -r /mnt/disk1/opt/lib/perl5/site_perl/5.8.8/CGI /opt/lib/perl5/site_perl/5.8.8

    (2) セッション情報を入れるデータベースの作成

       ------ stbl.sql ファイル -------
       CREATE TABLE sessions (
         id CHAR(32) NOT NULL UNIQUE,
         a_session TEXT NOT NULL
       );
      -----------------------------------

   # sqlite3 test99.db
      sqlite > .read stbl.sql
      sqlite > .quit
 
      でテーブルを作成する。

    (3) セッションの確認

      後にある session.tar.gz をダウンロード、解凍してWEBのディレクトリに入れて、データベースの
      絶対パスを修正する。
      Webブラウザより http://xxx.xxx.xx/xxx/session1.cgi でみる。
session1
      ”<セッション結果をみる>”をクリックする。
session2a
    前に戻って再度クリックする。
    1分超待ってからクリックを試して見てください。
session2b

    (4) セッション情報が何らかの事情によりデータベースに残る場合がある。
        これはデータベースに限らずファイルの場合も同じ。
        この情報がどのくらい残っているかを調べるのが session_info.cgi である。
session_info
        この情報の有効期限が切れたのを削除するのが session_del.cgi である。
session_del
        
        このスクリプトはDBIモジュールを使ってSQLiteデータベースを操作している。


17.COBOLソースをつくる

     cgiの指定は

      COBOL85       http://0xx.x.x.xx/cobol/cnvcbl85.cgi
      COBOL-G       http://0xx.x.x.xx/cobol/cnvcblg.cgi

     です。

           *** 入力 ***
cobol_input

    ずっと前からやっているテキストエディタでフローチャートみたいなのを書いてCOBOLソースを
    生成するものです。
    COBL85, COBOL-Gともに同様な表示です。

           *** 変換後 ***
cobol_out

 <ドキュメントルート>
    |
    +--<cobol>   パーミッションは 777
            |
            |   cnvcblg.cgi  ・・・・変換CGIプログラム本体 FACOM COBOL-G (文字コードEUCのこと)
            |   cnvcbl85.cgi ・・・・変換CGIプログラム本体 NEC COBOL85   (文字コードEUCのこと)
            |   get_cbl.cgi   ・・・・変換CGIプログラム子供(文字コードEUCのこと)
            |
            +---<cpylib-cbl85>   パーミッションは 誰からも読めるように NEC COBOL85  
            +---<cpylib-cblg>    パーミッションは 誰からも読めるように FACOM COBOL-G 
            |
            |   サンプル共通COPYソースファイル。
            |      ファイル名は必ず大文字で。
            |
            +---<tmp>      パーミッションは 777
            |
            |   COBOLソースファイルが一時的に作成されます。
            |
            |
            +---<sample-cbl85>  パーミッションは 誰からも読めるように NEC COBOL85  
            +---<sample-cblg>   パーミッションは 誰からも読めるように FACOM COBOL-G 
            |
            |   サンプル変換前ソースファイル。
            |
            +---<cobol-85-sources>   パーミッションは 誰からも読めるように NEC COBOL85  
            +---<cobol-g-sources>    パーミッションは 誰からも読めるように FACOM COBOL-G 

         サンプル変換後COBOLソースファイル。


動作環境のファイル一覧です。

<cobol>
-r--r--r--    1 root     root         5739 Jun 28 00:33 README-SJIS.TXT
-r-xr-xr-x    1 root     root        38882 Jun 28 00:13 cnvcbl85.cgi
-r-xr-xr-x    1 root     root        37432 Jun 28 00:06 cnvcblg.cgi
dr-xr-xr-x    2 root     root          133 Jun 27 02:38 cobol-85-sources
dr-xr-xr-x    2 root     root          151 Jun 28 00:07 cobol-g-sources
drwxr-xr-x    2 root     root          101 Jun 27 02:15 cpylib-cbl85
drwxr-xr-x    2 root     root          101 Jun 28 00:07 cpylib-cblg
-r-xr-xr-x    1 root     root          504 Jun 27 02:21 get_cbl.cgi
drwxr-xr-x    2 root     root          133 Jun 27 02:15 sample-cbl85
drwxr-xr-x    2 root     root          151 Jun 28 00:07 sample-cblg
drwxrwxrwx    2 root     root            6 Jun 28 00:15 tmp

./cobol-85-sources:
-r--r--r--    1 root     root         3237 Jun 27 02:32 democplb.cbl
-r--r--r--    1 root     root         8670 Jun 27 02:34 demodsp.cbl
-r--r--r--    1 root     root         5778 Jun 27 02:35 demoidxf.cbl
-r--r--r--    1 root     root        12173 Jun 27 02:36 demoif.cbl
-r--r--r--    1 root     root         3084 Jun 27 02:37 demopr1.cbl
-r--r--r--    1 root     root         7929 Jun 27 02:38 demoproc.cbl
-r--r--r--    1 root     root         4845 Jun 27 02:38 demosf.cbl

./cobol-g-sources:
-r--r--r--    1 root     root         3414 Jun 27 23:53 democplb.cbl
-r--r--r--    1 root     root         4592 Jun 27 23:52 demodsp.cbl
-r--r--r--    1 root     root         5766 Jun 27 23:58 demoidxf.cbl
-r--r--r--    1 root     root        12271 Jun 27 23:50 demoif.cbl
-r--r--r--    1 root     root         3156 Jun 27 23:49 demopr1.cbl
-r--r--r--    1 root     root         2939 Jun 27 23:56 demopr2.cbl
-r--r--r--    1 root     root         7985 Jun 27 23:55 demoproc.cbl
-r--r--r--    1 root     root         4919 Jun 27 23:54 demosf.cbl

./cpylib-cbl85:
-r--r--r--    1 root     root           75 Jun 23 10:20 ACPT
-r--r--r--    1 root     root           32 Jun 23 10:20 CPYCMNT
-r--r--r--    1 root     root          166 Jun 23 10:20 CPYLVL01
-r--r--r--    1 root     root          170 Jun 23 10:22 CPYLVL02
-r--r--r--    1 root     root          359 Jun 23 10:22 FACPT
-r--r--r--    1 root     root          526 Jun 23 10:22 SELCT01
-r--r--r--    1 root     root         3076 Jun 23 10:22 SELCT90

./cpylib-cblg:
-r--r--r--    1 root     root           75 Jun 27 23:27 ACPT
-r--r--r--    1 root     root           32 Jun 27 23:27 CPYCMNT
-r--r--r--    1 root     root          166 Jun 27 23:27 CPYLVL01
-r--r--r--    1 root     root          170 Jun 27 23:27 CPYLVL02
-r--r--r--    1 root     root          359 Jun 27 23:26 FACPT
-r--r--r--    1 root     root          526 Jun 27 23:26 SELCT01
-r--r--r--    1 root     root         3076 Jun 27 23:27 SELCT90

./sample-cbl85:
-r--r--r--    1 root     root          577 Jun 23 10:22 DEMOCPLB.CBF
-r--r--r--    1 root     root         2858 Jun 23 10:22 DEMODSP.CBF
-r--r--r--    1 root     root         1726 Jun 23 10:21 DEMOIDXF.CBF
-r--r--r--    1 root     root         4388 Jun 23 10:21 DEMOIF.CBF
-r--r--r--    1 root     root          508 Jun 23 10:21 DEMOPR1.CBF
-r--r--r--    1 root     root         3060 Jun 23 10:21 DEMOPROC.CBF
-r--r--r--    1 root     root         1584 Jun 23 10:21 DEMOSF.CBF

./sample-cblg:
-r--r--r--    1 root     root          577 Jun 27 23:30 DEMOCPLB.CBF
-r--r--r--    1 root     root          331 Jun 27 23:29 DEMODSP.CBF
-r--r--r--    1 root     root         1726 Jun 27 23:29 DEMOIDXF.CBF
-r--r--r--    1 root     root         4388 Jun 27 23:29 DEMOIF.CBF
-r--r--r--    1 root     root          508 Jun 27 23:29 DEMOPR1.CBF
-r--r--r--    1 root     root          340 Jun 27 23:28 DEMOPR2.CBF
-r--r--r--    1 root     root         3027 Jun 27 23:28 DEMOPROC.CBF
-r--r--r--    1 root     root         1584 Jun 27 23:30 DEMOSF.CBF

./tmp:

・・・・・・・・・・・・・・・・・・

変換前の書き方は
    http://asahi-net.or.jp/~ea7k-smmr/c85.htm   COBOL-85用
    http://asahi-net.or.jp/~ea7k-smmr/cfg.htm      COBOL-G用

●PerlでCOBOLソース生成(NEC COBOL85)
●PerlでCOBOLプログラム生成(FACOM COBOLG) を参照してください。

18.英語の発音記号変換

 sony ==> /souni/ になぜなるかをフォニックスでやってみる
 Lighttpd のCGIとして動作するよう設定のこと。
 ドキュメントルートのディレクトリに「 work 」というフォルダを作ってそこに
 phonics.cgi, phonics-script.pl を入れる。
   
   「ライトハウス つづり字と発音の基礎」を参考に手順を考えました。
   CMU辞書の検索をもとにちょっと手順を変更。

   Word[date]______
   Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <d> => |d|
   Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <ate> => |e i|
   Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz])e <te> => |t| (! before vowel)
     ---Phonetic Sign ==> d e i t
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ** Comment **
    Word [ CharcterPosition ] - Pattern=xxxxx RegexPattern xxxx < MatchCharacters > => | Convert Sign |
   
  変換結果は多々できないものがありますが、フォニックスの認識と利用方法がわかるようにしてあります。
  これで間違えたり、ちょっと違っていたと印象づけられる単語が増えればしめたものと考えています。
  また、会話のネタにしてもらえればうれしいです。
  
   "ea" -- /e/ と /i:/ の区別がつづりより判別できない。
   "oo" -- /u/ と /u:/ の区別がつきにくい。
   "th" -- /ɵ/ と /ð/ のの区別がつづりより判別できない。
   判別できないものは {e , i:} , {u , u:}, { s- , s=}, {s , z} のように表示する。
   "four", "you" 等多々正しく出ないものがある。
   prefix-suffix がついた単語は正しくでないので原形を入力すること。
   複数名詞・三人称動詞のs、動詞の過去形のed、動詞の進行形のingは機械的に単語の後ろが
   s,es,ies,ves,ed,ied,ing,yingのときに自動で原形が作成されて読みを作成したあとで各s,ed,ing
   の読みをつける。
   複数の発音記号が出る場合がありますが、単語の辞書がないため原形の判断がつきません。
   よって正しいほうの原形が表示されている読みを見てください。
   アクセントにかかわる発音はいれていません。

   cap  /  k ae p  /
   cape  /  k e i p  /
   cut  /  k ^ t  /
   cute  /  k ju: t  /
   met  /  m e t  /
   mete  /  m i: t  /
   question  /  kw e s t(s iy n  /
   station  /  s t e i (s iy n  /
   section  /  s e k (s iy n  /
   ocean  /  o u (s iy n  /
   oasis  /  ou ei s i s  /
   oasis = oasi + s  /  ou ei {s , z} a i z /
   sonic  /  s o u n i k  /
   sony  /  s o u n i  /
   monkey  /  m o n k i  /
   money  /  m o u n i  /
   village  /  v i l i d3  /
   valley  /  v ae l i  /
   danger  /  d e i n g iy r  /
   hamburger  /  h ae m b a: g iy r  /

   出力される発音記号一覧
   ----------------------------------------------
   xx   --出力文字  記号      --出力文字  記号
   ch   t(s         ʧ             t(s       ʧ
   a    ei          ei          ae        æ
   b    bi:         bi:        b         b
   c    si:         si:        k         k
   d    di:         di:        d         d
   e    i:          i:            e          ɛ
   f    ef          ef          f         f
   g    d3i:         ʤi:        g         g
   h    eit(s       eiʧ         h         h
   i    ai          ai          i         i
   j    d3ei        ʤei         d3         ʤ
   k    kei         kei        k         k
   l    el          el          l         l
   m    em          em          m         m
   n    en          en          n         n
   o    ou          ou          o         o
   p    pi:         pi:        p         p
   q    kju:        kju:      kw        kw
   r    a:r         a:r        r         r
   s    es          es          s         s
   t    ti:         ti:        t         t
   u    ju:         ju:        ^         ʌ
   v    vi:         vi:        v         v
   w    d^blju:     dʌblju: w         w
   x    eks         eks        ks        ks
   y    wai          waI       i         i
   z    zi:         zi:        z         z
   th   s-           ɵ            s-        ɵ
   th   s=           ð            s=        ð
   sh   (s           ʃ            (s        ʃ
   wh   *w           *w         *w       *w
   ng   ng            ɳ           ng        ɳ
   oy   )i           ɔi          )i       ɔi
   air  eyr          eə           eyr      eə
   ---------------------------------------------
   
 ◇◇参考◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
 
 ■ライトハウス つづり字と発音の基礎  竹林 滋 著 --研究社
 
 ■ルミナス英和辞典 第2版 竹林 滋 , 小島 義郎 , 東 信行, 赤須 薫 編集 --研究社
 
 ■ルミナス英和辞典―つづり字と発音解説(CD) 竹林 滋, 斎藤 弘子著 --研究社
 
 ■大人の英語発音講座  英語音声学研究会 著  --NHK出版
 
 ■猿はマンキお金はマニ 日本人のための英語発音ルール  ピーター・バラカン 著 --NHK出版
 
 ■アメリカの子供が「英語を覚える」101の法則  松香洋子 著 --講談社α文庫
 
 ■http://www.speech.cs.cmu.edu/cgi-bin/cmudict
  The CMU Pronouncing Dictionary
  Carnegie Mellon University
 
 ■http://en.wikipedia.org/wiki/Arpabet
  Arpabet From Wikipedia, the free encyclopedia
 
 ■http://code.google.com/p/sqlite-manager/
  FireFox - sqlite-manager

 ■新自修英文典 第5訂版  山崎貞著、 毛利可信増訂 --研究社
 
 ■英語の発音の知識  小栗敬三著 --篠崎書林

 ■英語のフォニックス 第2版  竹林滋著 --ジャパンタイムズ

 ■http://wordlist.sourceforge.net/
    Kevin's Word List Page
    の中のUnofficial Alternate 12 Dicts Package より alt12dicts-4.zip を参照しました。
 
 ◇◇動作環境◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
  Windows XP (XP以降であればいいはず)
  Perl はVer5以降
   ActivePerlか strawberryperl でOK。
   strawberryperl : http://strawberryperl.com/
  
 ◇◇プログラム説明◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
  phonis-script.pl が変換テーブル、変換パターンリストです。
  "$tbl8" 以降の行が発音記号変換ハッシュ。
  "$exec" 以降の行が変換パターンリスト。この順序でパターンマッチを行い変換する。
  phonics.cgi と phonis-script.pl は同じフォルダに置く。
  my $oc = 0;
  my $styl = 0; と設定して、DOS窓実行。
 ---
  my $oc = 1;
  my $styl = 1; と設定して、Perl CGI実行。
 
 ◇◇プログラム起動方法◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
  my $oc = 0;
  my $styl = 0; と設定して、
  WindowsはDOS窓で、
 
  perl phonics.cgi [Enter]
   English Word? (<Enter> to exit.) :xxxxxEnglish Wordxxx[Enter]
 
   "English Word? (<Enter> to exit.) :"でEnterキーでプログラム終了。
 
 ◇◇CGI 起動方法◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
  my $oc = 1;
  my $styl = 1; と設定して、
   perl のCGIとして設定する。


 ■【例】

Word___[money]___
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <m> => |m| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <one> => |o u| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <n> => |n| 
Word[4] - Pattern=(ay|ey) <ey> => |i| 
---Phonetic Sign ==> m o u n i 

Word___[cut]___
Word[1] - Pattern=c[aou] <cu> => |k| 
Word[2] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <ut> => |^| (? accent)
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <t> => |t| 
---Phonetic Sign ==> k ^ t 

Word___[cute]___
Word[1] - Pattern=c[aou] <cu> => |k| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <ute> => |ju:| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz])e <te> => |t| (! before vowel)
---Phonetic Sign ==> k ju: t 

Word___[ocean]___
Word[1] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <oce> => |o u| 
Word[2] - Pattern=cean <cean> => |(s iy n| 
---Phonetic Sign ==> o u (s iy n 

Word___[babies]___
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <b> => |b| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <abi> => |e i| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <b> => |b| 
Word[4] - Pattern=ie <ie> => |i:| 
Word[6] - Pattern=([bcdfghjklmnpqrstvwxyz]) <s> => |s| 
---Phonetic Sign ==> b e i b i: s 

Word  [babies = baby + ies]  // Plural or Rule of Concord 
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <b> => |b| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <aby> => |e i| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <b> => |b| 
Word[4] - Pattern=y <y> => |i|
Word[5] - Rule=|i| <ies> => |z|
---Phonetic Sign ==> b e i b i z

Word___[mouths]___
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <m> => |m| 
Word[2] - Pattern=ou <ou> => |a u| 
Word[4] - Pattern=th <th> => |{s- / s=}| 
Word[6] - Pattern=([bcdfghjklmnpqrstvwxyz]) <s> => |s| 
---Phonetic Sign ==> m a u {s- , s=} s 

Word  [mouths = mouth + s]  // Plural or Rule of Concord 
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <m> => |m| 
Word[2] - Pattern=ou <ou> => |a u| 
Word[4] - Pattern=th <th> => |s-|*|s=|
Word[6] - Rule=|s=| <s> => |z|
---Phonetic Sign ==> m a u s= z

Word___[foxes]___
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <f> => |f| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <oxe> => |o u| 
Word[3] - Pattern=x[^tucohiga] <xe> => |ks| 
Word[4] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <es> => |e| (? accent)
Word[5] - Pattern=([bcdfghjklmnpqrstvwxyz]) <s> => |s| 
---Phonetic Sign ==> f o u ks e s 

Word  [foxes = fox + es]  // Plural or Rule of Concord 
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <f> => |f| 
Word[2] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <ox> => |o| (? accent)
Word[3] - Pattern=x <x> => |g z|
Word[4] - Rule=|g z| <es> => |i z|
---Phonetic Sign ==> f o g z i z

Word  [foxes = foxe + es]  // Plural or Rule of Concord 
Word[1] - Pattern=([bcdfghjklmnpqrstvwxyz]) <f> => |f| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <oxe> => |o u| 
Word[3] - Pattern=x[^tucohiga] <xe> => |ks| 
Word[4] - Pattern=e <e> => ||
Word[5] - Rule=|| <es> => |z|
---Phonetic Sign ==> f o u ks z

Word___[stopped]___
Word[1] - Pattern=^s <s> => |s| 
Word[2] - Pattern=([bcdfghjklmnpqrstvwxyz]) <t> => |t| 
Word[3] - Pattern=([aeiou])([bdfhjklmnprstvxz])\2 <opp> => |o| 
Word[4] - Pattern=([bcdfghjklmnprsrtvxz])\1 <pp> => || 
Word[5] - Pattern=([bcdfghjklmnpqrstvwxyz]) <p> => |p| 
Word[6] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <ed> => |e| (? accent)
Word[7] - Pattern=([bcdfghjklmnpqrstvwxyz]) <d> => |d| 
---Phonetic Sign ==> s t o p e d 

Word  [stopped = stop + ed]  // Regular Verb
Word[1] - Pattern=^s <s> => |s| 
Word[2] - Pattern=([bcdfghjklmnpqrstvwxyz]) <t> => |t| 
Word[3] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <op> => |o| (? accent)
Word[4] - Pattern=([bcdfghjklmnpqrstvwxyz]) <p> => |p|
Word[5] - Rule=|p| => |t|
---Phonetic Sign ==> s t o p t

Word  [stopped = stopp + ed]  // Regular Verb
Word[1] - Pattern=^s <s> => |s| 
Word[2] - Pattern=([bcdfghjklmnpqrstvwxyz]) <t> => |t| 
Word[3] - Pattern=([aeiou])([bdfhjklmnprstvxz])\2 <opp> => |o| 
Word[4] - Pattern=([bcdfghjklmnprsrtvxz])\1 <pp> => || 
Word[5] - Pattern=([bcdfghjklmnpqrstvwxyz]) <p> => |p|
Word[6] - Rule=|p| => |t|
---Phonetic Sign ==> s t o p t

Word___[copied]___
Word[1] - Pattern=c[aou] <co> => |k| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <opi> => |o u| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <p> => |p| 
Word[4] - Pattern=ie <ie> => |i:| 
Word[6] - Pattern=([bcdfghjklmnpqrstvwxyz]) <d> => |d| 
---Phonetic Sign ==> k o u p i: d 

Word  [copied = copy + ied]  // Regular Verb
Word[1] - Pattern=c[aou] <co> => |k| 
Word[2] - Pattern=([aeiou])([bcdfghjklmnpqrstvxz])([aeiouy]) <opy> => |o u| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <p> => |p| 
Word[4] - Pattern=y <y> => |i|
Word[3] - Rule=|i| => |d|
---Phonetic Sign ==> k o u p i d

Word___[asked]___
Word[1] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <as> => |ae| (? accent)
Word[2] - Pattern=([bcdfghjklmnpqrstvwxyz]) <s> => |s| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <k> => |k| 
Word[4] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <ed> => |e| (? accent)
Word[5] - Pattern=([bcdfghjklmnpqrstvwxyz]) <d> => |d| 
---Phonetic Sign ==> ae s k e d 

Word  [asked = ask + ed]  // Regular Verb
Word[1] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <as> => |ae| (? accent)
Word[2] - Pattern=([bcdfghjklmnpqrstvwxyz]) <s> => |s| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <k> => |k|
Word[4] - Rule=|k| => |t|
---Phonetic Sign ==> ae s k t

Word  [asked = aske + ed]  // Regular Verb
Word[1] - Pattern=([aeiou])([bcdfhjklmnpstvxz]) <as> => |ae| (? accent)
Word[2] - Pattern=([bcdfghjklmnpqrstvwxyz]) <s> => |s| 
Word[3] - Pattern=([bcdfghjklmnpqrstvwxyz]) <k> => |k| 
Word[4] - Pattern=e <e> => ||
Word[3] - Rule=|| => |d|
---Phonetic Sign ==> ae s k d

19.開発環境

    HOST:玄箱/Pro 
            CDROMの開発環境
            日経BP 日経Linux 2007 - 6月号データ

  PC:Windows XP 
            Tra Term Professional Ver4.50

    参考資料:
       ・Serial Programing Guide for POSIX Operating Systems
                                5th Edition , 2nd Revision
            Michael R. Sweet    1994-1999

       ・Advanced Programming in the UNIX Environment
                                Assison-Weslet 1992
            W.Richard Stevens

       ・新Perlの国へようこそ Perl5対応版
                                サイエンス社
            斉藤靖・小山裕司・前田薫・布施有人 共著

      ・日経Linux 2007 - 6月号

       ・セイコープレシジョン(株)タイムサーバ時刻修正ソフト
          http://www.seiko-p.co.jp/systems/down/time.html

        ・2ちゃんねる 『苦労と試行 玄箱Pro8』

        ・リンギオ    2007-1-17日記
          http://d.hatena.ne.jp/zankey/archive

        ・Perl逆引きクイックリファレンス Perl5.8対応
                                毎日コミュニケーション
             坂田健二著


20.注意事項

  動作は検証してありますが、万全ではないかもしれません。利用者で十分検証してお使いください。

------- Down Load -----------
回路図ダウンロード
ファイルUPダウンロード
子分を突っつくlinuxcom.tar.gzダウンロード
WEB温度表示ダウンロード
HDDの切り離しとマウントダウンロード
make_sqlite3.tar.gzダウンロード
セッション管理session.tar.gzダウンロード
COBOL変換 cobol.tar.gzダウンロード
phonics.cgiダウンロード:phonics.tar.gz(11KB)


表紙


Last update: 2010.4.1