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 でみる。
”<セッション結果をみる>”をクリックする。
前に戻って再度クリックする。
1分超待ってからクリックを試して見てください。
(4) セッション情報が何らかの事情によりデータベースに残る場合がある。
これはデータベースに限らずファイルの場合も同じ。
この情報がどのくらい残っているかを調べるのが session_info.cgi である。
この情報の有効期限が切れたのを削除するのが session_del.cgi である。
このスクリプトは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ソースを
生成するものです。
COBL85, COBOL-Gともに同様な表示です。
*** 変換後 ***
<ドキュメントルート>
|
+--<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