2008年5月6日(火)
TurboGearsをインストールし、TurboGearsのプロジェクトを作成するコマンドである
> tg-admin quickstart
を実行したところ、
Cannot find Python executable C:\Program
というエラーメッセージが表示されてしまう。もちろん、tg-admin.exeにパスは通っている。
試行錯誤やネット調査の結果、原因がわかった。それは \Python25\Scripts\tg-admin-script.py の1行目。私の環境ではPython2.5は C:\Program Files\Python25\
ディレクトリ下に存在しているので、インストールされた上記tg-admin-script.pyの1行目は
#!”C:\Program Files\Python25\python.exe”
となっている。これを
#!”C:\progra~1\Python25\python.exe”
と、空白を含まないパスにしたところ、正常に動作した。
詳しく説明すると、この1行目のPythonパス指定に
\Program Files\
のように空白を含んではいけない、ということだ。従って、\Program Files\ を懐かしきDOS時代のショート形式の
\progra~1\
にしなければならないのだ。
同じファイルに対してロング名とショート名の2つのファイル名が存在したこと、そしてその前の時代のMS-DOSやCP/M(懐かしい!!)ではファイル名の最大が8文字、拡張子が最大3文字、という制限があったことは、いまや忘却の彼方だ。(と同時に、私の歳がバレる。。。)
2008年5月5日(月)
今後、Python言語によるWEBアプリケーションフレームワークであるTuroGearsについて私が躓いたところ等をTipsとして書いて行く。ちなみに私は、そもそもC++/Java技術者でありLIGHTWEIGHT言語はPythonが初めてなので、LIGHTWEIGHT言語に慣れたかたとは違うところで引っかかることも多いかもしれない。
私のPython/TurboGears環境は次のとおりである。(最新のものではないが、現在稼動中のプロジェクトがあるためバージョンアップできないでいる。)
OS: Windows XP (SP2)
Python: 2.5.1
TurboGears: 1.0.2.2
テンプレート:Kid(TurboGears標準)
ORM: SQLObject(TurboGears標準)
開発環境: Eclipse3.2.1上のPyDev1.3.2
本当は、テンプレートはGenshi、ORMはSQLAlchemyを使ってみたいが、先ずはTurboGearsに慣れるのが先なので、TurboGears標準のKidとSQLObjectを使用している。
また、C++/Java屋である私は統合開発環境(IDE)が必要であり、機能的にはかなり不満ながらEclipse+PyDevを使用している。このあたりは、純粋なPython技術者とは違うかもしれない。純粋なPython技術者がIDEを何故嫌うのか私は理解できないが、純粋なPython技術者側もIDEの利点が理解不能らしい。このあたりは論理を超えた「宗教」論争かもしれない。
2008年5月4日(日)
オーボエという楽器は習得が難しい楽器、とされている。オーケストラの技量を計るにはオーボエとホルンの腕前を見よ、という格言もある。オーボエとホルンのレベルでそのオーケストラのレベルがだいたいわかる、ということである。ちなみにここで言うオーボエは、モダンオーボエのことである。
私はこの考えには少々異論があり、モダンオーボエの難易度は他の木管楽器とほとんど同一、と思っている。確かにオーボエは良い音を良い音程で出すのは他木管楽器より少し難しいかもしれない。でも最近は音が柔らかく音程の良い楽器が売られている。リードも他楽器よりは大変かもしれないが、市販の良いリードもある。そして、他木管楽器、特にフルート・クラリネットは、オーボエよりは音色・音程を作るのは楽だろうが、オーボエよりは速いパッセージや速いタンギングが要求される楽器なのでその練習時間を考えると、楽器の難易度はどの木管楽器もそれほど変わらないような気がしている。
ちなみに楽器の難易度とは、ある一定のレベルに到達するまでに必要な練習時間、と考えている。
私はモダンオーボエは、ん十年やってきた。そしてバロックオーボエは5年ちょっと。私の経験では、バロックオーボエはモダンオーボエの3倍くらい難しいように思う。
そのバロックオーボエ属楽器の中では、普通のバロックオーボエよりはバロック・オーボエ・ダモーレのほうが少し難しい。これは、バロック・オーボエダモーレは普通のバロックオーボエよりサイズが少し大きいので、指がトーンホールからずれて完全に塞げないことがあることに起因する。低次元の問題と思われるかもしれないが、指が固くなってしまった晩学のオジサンには辛い問題だ。
そして、バロックオーボエ系楽器で最も難しい楽器が他にある。それは、2キーのクラシカル・オーボエだ。バロックオーボエのキーは、C,Esの2キーだ。バロックの時代からハイドン・モーツァルトの古典時代になると、オーボエには音色に輝かしさと強さが要求されるようになった。その要求に応えるため、オーボエの内径は細くなっていった。外側の形状も変化していった。その初期の2キークラシカルオーボエ、この楽器の難しさはハンパではない。真ん中のFisから上のA付近の音がきちんと鳴るポイントがピンポイント。ポイントからちょっとでもずれると音はオクターヴ下に落ちてしまう。特に弱音の難しさ!!一番難しい上のAのppで演奏する成功確率は、替え指を使わないと1割以下だろう。その難しさゆえに、クラシカルオーボエはどんどんキーが増えていった。私のクラシカルオーボエは7キー、S師匠の楽器は9キー。増えたキーのうち、私にとってもっともありがたいキーは、オクターブキーだ。これを押せばppであっても上の音が下に落ちることは無くなる。
ということで、オーボエ属楽器の中で最も難しい楽器は、2キークラシカルオーボエと思う。その楽器でモーツァルトやボクサのオーボエ四重奏曲をCDで出している本間正史氏の腕前には驚嘆する。ちなみに以前、ハイドンのオラトリオの映像を見たが、オーボエのポンセール氏の楽器は一見2キーだったが、左手親指の動きからしてオクターヴキーは付いていたようだ。
不器用なくせに難しい楽器をやりたがる私だが、2キークラシカルオーボエを買う予定はない。
2008年5月3日(土)
数日前にmysql3.23とmysql5.0の共存という記事を書いた。このサーバ、10日ほどmysql3.23とmysql5.0が共存していたが、若干の問題が発生し、mysql3.23のバージョンを上げてmysql4.0とmysql5.0を共存することにした。(いままでのmysql3.23は削除。)メモを兼ねて共存手順を書いておく。
インストールするmysql4.0のポート、ソケットは次のとおり。
ポート: 43306
ソケット: /tmp/mysql.sock4.0
1: /etc/my.cnf を5.0専用にする
/etc/my.cnf 修正
[mysqld] を [mysqld-5.0] に変更しmysql再起動。
2: ソースインストール
ソースmysql-4.0.27.tar.gz は/tmp下にコピーしておく。
実行は新ユーザ mysql4 とする。
# useradd mysql4
# mkdir /usr/local/mysql4.0
# chown mysql4 /usr/local/mysql4.0
# cd /usr/local/src
# mkdir mysql-4.0.27
# chown mysql4 mysql-4.0.27
# su - mysql4
rootはここまで。
$ cd /usr/local/src
$ tar xvzf /tmp/mysql-4.0.27.tar.gz
$ cd mysql-4.0.27
$ ./configure –prefix=/usr/local/mysql4.0 –with-extra-chrasets=all –with-charset=ujis –with-pthread –with-named-thread-libs=-lpthread –disable-dependency-tracking –without-bench –without-debug –enable-assembler
$ make >make.log 2>makeErr.log
次のエラーとなる。
mysqld.cc:(.text+0×3911): undefined reference to `my_fast_mutexattr’
mysqld.o:mysqld.cc:(.text+0×3b35): more undefined references to `my_fast_mutexattr’ follow
collect2: ld returned 1 exit status
ある記事によれば
my_fast_mutexattrはmysys/my_thr_init.cに
以下のように定義されています。
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_t my_fast_mutexattr;
#endif
この定義を次のように変更したら、makeは成功しました。
//#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_t my_fast_mutexattr;
//#endif
とあり確かにmakeは成功するが、ソースを見るとこれでは心配なので mysys/my_thr_init.cに
// ADD
#define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP 1
行を先頭付近に付加した。これでOK。
$ make install >install.log 2>installErr.log
インストールOK。
3: /etc/my.cnfに4.0専用記述を追加
[mysqld-4.0]
port=43306
basedir=/usr/local/mysql4.0
datadir=/usr/local/mysql4.0/var
4: DB初期化
ユーザ mysql4
$ cd /usr/local/src/mysql-4.0.27
$ scripts/mysql_install_db
5: mysqlデーモン開始
rootで実行。
# /usr/local/mysql4.0/bin/mysqld_safe –log-error=/var/log/mysql40.log –socket=/tmp/mysql.sock4.0 –pid-file=/usr/local/mysql4.0/var/mysqld40.pid –user=mysql4 &
6: mysqlコマンド接続
mysqlデータベース接続には次のどちらかで接続する。
$ /usr/local/mysql4.0/bin/mysql –port=43306 –socket=/tmp/mysql.sock4.0 -uroot mysql
または
$ /usr/local/mysql4.0/bin/mysql –port=43306 -h127.0.0.1 -uroot mysql
mysql4.0アクセスには/usr/local/mysql4.0/bin/下のコマンドを使用する。
以上でmysql4.0とmysql5.0は共存し、私のサーバにて正常に動作している。
2008年4月30日(水)
ハルモニア・ムンディというCDのレーベルを御存知だろうか。LP時代から続く古いレーベルで、古楽器演奏の多いレーベルである。古楽器ファンなら必ず知っているレーベルだ。そのハルモニア・ムンディから信じられないCDセットが発売された。
「ハルモニア・ムンディ50周年記念50枚組」というセット物で、価格はなんと5,390円。1枚100円ちょっとだ。内容は次のとおり。
01 ドゥランテとアストルガとペルゴレージ
02 J.S.バッハ:オーボエ協奏曲集
03 J.S.バッハ:ゴルトベルク変奏曲 BWV.988
04 J.S.バッハ:音楽の捧げ物 BWV.1079
05 J.S.バッハ:モテット BWV.225-230
06 J.S.バッハ:ロ短調ミサ BWV.232
07 J.S.バッハ:ロ短調ミサ BWV.232
08 ヴィヴァルディとJ.S.バッハ
09 J.S.バッハ:無伴奏チェロ組曲 BWV.1007~1012
10 J.S.バッハ:無伴奏チェロ組曲 BWV.1007~1012
11 知られざるスペイン・バロック
12 17世紀のチェロのための作品集
13 ビバー:レクイエム イ長調/スッテファーニ:スターバト・マーテル
14 ボッケリーニ:チェロ協奏曲とシンフォニア集
15 ブクステフーデ:室内楽作品集
16 カッチーニ:麗しのアマリッリ~新しい音楽
17 フランソワ・クープラン:室内楽作品集
18 ジャコモ・ファッコとヴィヴァルディ
19 アントニ・フォルクレイ:ヴィオール小品集とクラヴサン小品集
20 フレスコバルディ:音楽の花束 Vol.1 主日のミサ
21 フレスコバルディ:音楽の花束 Vol.2 聖母のミサ
22 グルック:オペラ・セレナード「中国人」
23 オルランド・ラッスス:モテットとミサ曲
24 オルランド・ラッスス:レクィエム、マニフィカト、モテット
25 アントニオ・デ・リテレス:歌劇「四大元素」
26 リュリ:ディヴェルティスマン集
27 マショーとペロティヌスとクラウズラと作者不詳
28 J.S.バッハ以前の聖トーマス教会のカントールの作品集
29 マラン・マレ:三重奏のための幻想的小品組曲集
30 モンテヴェルディと同時代のマドリガーレ集
31 モンテヴェルディ:聖母マリアの夕べの祈り
32 モンテヴェルディ:聖母マリアの夕べの祈り
33 パッヘルベルとJ.S.バッハ以前のバッハのモテット集
34 パレストリーナ:宗教合唱作品集
35 ペルゴレージ:歌劇「奥様になった小間使い」
36 パーセルとヘンデル
37 無秩序の喜び~17世紀英国の2声部のコンソート
38 ラモー:歌劇「イポリートとアリシー」組曲
39 ラモー:歌劇「プラテー」「ダルダニュス」より管弦楽組曲
40 ラモー:バレエ付オペラ「ピグマリオン」
41 ルベル:表題付きトリオ・ソナタ全集
42 サント・コロンブ:「哀しみのトンボー」~ヴィオール作品集
43 アッレサンドロ・スカルラッティ:ソロ・カンタータ集
44 アレッサンドロ・スカルラッティ:ヨハネ受難曲
45 テレマン:木管楽器のための協奏曲集
46 ヴィヴァルディ:協奏曲集「四季」「海の嵐」「喜び」
47 ヴィヴァルディいろいろ
48 ヴィヴァルディ:チェロ・ソナタ集
49 ゼレンカ:神の御子のミサ曲/聖母マリアのためのリタニア
50 ゼレンカ、ピゼンデル:シンフォニアと協奏曲集
バロックの有名な曲から無名な曲まで様々。そしてこの値段では垂涎だ。
このセット物が発売されたことは、友人のリコーダー奏者からのメールで知った。私が住んでいるのは大変な田舎で近所にこのような古楽器物CDを売っている店などないので、CDはいつもネットから購入している。早速複数のサイトを調べた。ところが、HMVもタワーミュージックも、「ネット販売は終了」とのこと。そこで最後の頼みのアマゾンを調べた。あるにはあった。ただしHarmonia Mundi 50: The Fiftieth Anniversary Boxed Setのとおり、日本版ではなく米国からの輸入で、価格も倍近い¥9,016。日本版では5,390円であることを知っているいま、米国版を買うのは少々躊躇していた。
ところがこの件を知らせてくれた友人から、「明日新宿に出かけるのでタワーレコードで買ってきてやるよ」との親切なメールがあった。もちろん即依頼。めでたく買ってきてはもらった。
だが問題はあった。どうやって受け渡してもらえるか。重いCDセットを宅急便で送ってもらうのでは少なからぬ送料がかかる。それでは安い日本版を買った顔が立たない。そこで、少し先になるが私が古楽器オーケストラの練習で東京に出るときに落ち合って飲むことにした。それなら送料の必要は無い。。。と思ったのは甘かった。彼は大変な酒豪。CDを買ってきてもらったお礼に酒を奢ることになるが、そうするとどうみても米国輸入版のほうが安いだろう。でもこのCDセットがきっかけで1年半ぶりに旧交を温めるのも悪くはない、そう思っている。
2008年4月29日(火)
本日ブログ開設。右のプロフィールにあるとおり、このブログではPython, TurboGears,バロックオーボエの話題が中心の予定である。しかし本日は初日なのに全然違う話題である。
先日、仕事で借りている専用サーバの移転作業を行った。サーバ中には10サイト近くサイトがあるためある程度の工数は予想したが、結果としてはそれを遥かに上回る工数を要してしまった。原因は、データベースmysqlのバージョンの違いである。
旧サーバはmysql3.23、新サーバはmysql5.0。文字コードで問題の発生する可能性はMLなどで事前に知ってはいた。確かにブログの移転で若干の問題は発生したが、/etc/my.cnfの設定、データベースの文字コード指定等でクリアできた。
問題はJava(Servlet)アプリケーション。これは医学データ収集用WEBアプリケーションで、5,6年前(だいぶ前)に作ったものだ。
文字コード(文字化け)問題はこのJavaアプリケーションでも発生した。ただこれも、/etc/my.cnfの設定、データベースの文字コード指定のみならず、mysql-connector-javaのバージョンや設定を変えることで、少し時間はかかったがクリアできた。しかしどうしても解決できない問題が発生してしまった。
それは、「TIMESTAMP NULL」問題である。良く知られたことだがMySQLのデータ型のTIMESTAMPは癖があり使わない方が良い。しかしこのJavaアプリではTIMESTAMP型は多用されていた。そして、TIMESTAMP値の0またはNULLを代入する際、TIMESTAMP型の開始日時である 1970-01-01 00:00:00 を設定していた。これはmysql3.23では問題なく動作する。しかしmysql5.0では例外が発生してしまう。
ここからが試行錯誤の始まりだった。mysql5.0ではJSTとUTCの9時間のずれを考慮しているようで、1970-01-01 09:00:01 は設定できる。しかし 1970-01-01 09:00:00 は設定できない。NULLを設定してみると、mysqlのTIMASTAMP型の振るまいでカレント日時が代入されてしまう。
この「設定できない」という意味は、Javaから設定できない、という意味である。コンソールのmysqlコマンドでは設定できる。mysqlコマンドでは 1970-01-01 09:00:00 は設定でき、SELECTでそれを見ると NULL として表示される。この振るまいをJavaから行いたいのだが。いろいろ試行錯誤し、調査の結果、これは不可能であることがわかった。このJavaアプリで必要な、TIMESTAMP型に初期値を設定するという処理がmysql5.0では不可能なのだ。
サーバ移転の期限は迫ってくるし、さあ困った。そこで思いついた案が、mysql5.0が動いているサーバに別途mysql3.23を動かし、共存させる、という方法だ。設定ファイルの/etc/my.cnfが悪さをしないかちょっと心配だったが、結果としては共存できた。そして件のJavaアプリからはmysql3.23側に接続し、問題なく動作している。
ここで、mysql5.0動作環境にmysql3.23を共存インストールする手順について簡単にまとめておく。
1: mysql5.0環境のセーブ
念のため、mysql5.0関連ファイルをセーブしておく。
(1)2ファイルセーブ
/etc/my.cnf
/etc/rc/init.d/mysqld
(2)mysqlデーモンを止めてから /var/lib/mysql セーブ
2: /etc/my.cnf を5.0専用にする
/etc/my.cnf 修正
[mysqld] を [mysqld-5.0] に変更しmysql再起動。問題の無いことを確認する。
3: ソースインストール
実行は新ユーザ mysql3 とする。またmysql3.2の最後のバージョンのソース mysql-3.23.58.tar.gz を入手し、/tmp下に存在するものとする。
$ su -
# useradd mysql3
# mkdir /usr/local/mysql3.23
# chown mysql3 /usr/local/mysql3.23
# cd /usr/local/src
# cp -p /tmp/mysql-3.23.58.tar.gz .
# mkdir mysql-3.23.58
# chown mysql3 mysql-3.23.58
# su - mysql3
rootでの実行はここまで。以降は、新ユーザ mysql3 で実行する。
$ cd /usr/local/src
$ tar xvzf mysql-3.23.58.tar.gz
$ cd mysql-3.23.58
$ ./configure –prefix=/usr/local/mysql3.23 –with-extra-chrasets=all –with-charset=ujis
ところが上記最後の ./configure でエラーが発生した。
checking “LinuxThreads”… “Not found”
configure: error: This is a linux system and Linuxthreads was not
found. On linux Linuxthreads should be used. Please install Linuxthreads
(or a new glibc) and try again. See the Installation chapter in the
Reference Manual for more information.
調査の結果、これはMySQLのバグのようで、configureにオプションを付加すれば良いことがわかった。
$ ./configure –prefix=/usr/local/mysql3.23 –with-extra-chrasets=all –with-charset=ujis –with-pthread –with-named-thread-libs=-lpthread –disable-dependency-tracking –without-bench –without-debug –enable-assembler
次にmakeを行う。
$ make >make.log 2>makeErr.log
今度は次のエラーとなった。
mysqld.o:mysqld.cc:(.text+0×306e): more undefined references to `my_fast_mutexattr’ follow
collect2: ld returned 1 exit status
調査の結果、あるサイトの次の記述を参考にした。
my_fast_mutexattrはmysys/my_thr_init.cに
以下のように定義されています。
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_t my_fast_mutexattr;
#endif
この定義を次のように変更したら、makeは成功しました。
//#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_t my_fast_mutexattr;
//#endif
目出度くmakeは成功した。そしてインストール。
$ make install >install.log 2>installErr.log
4: .my.cnf
/home/mysql3下に次の内容で .my.cnf (ドット’.'ファイルであることに注意)作成
[mysqld]
port=13306
basedir=/usr/local/mysql3.23
datadir=/usr/local/mysql3.23/var
socket=/tmp/mysql.sock3.23
log=/usr/local/mysql3.23/var/mysql.log
5: DB初期化
ユーザ mysql3で次を実行。
$ cd /usr/local/src/mysql-3.23.58
$ scripts/mysql_install_db
6: mysqlデーモン開始
$ /usr/local/mysql3.23/bin/safe_mysqld &
mysqlデーモンのプロセスIDは次のファイルに格納されている。
/usr/local/mysql3.23/var/xxxxx.pid (xxxxxは環境に固有)
そこで、次のコマンドでmysqlデーモンを停止できる。
$ kill `cat /usr/local/mysql3.23/var/xxxxx.pid`
7: mysql3.23 自動実行
/etc/rc.d/init.d/mysqld をコピーして mysql3 とし、上記の内容で修正。
8: mysqlコマンド接続
・mysqlデータベース接続
$ /usr/local/mysql3.23/bin/mysql –port=13306 –socket=/tmp/mysql.sock3.23 -uroot mysql
または
$ /usr/local/mysql3.23/bin/mysql -h127.0.0.1 –port=13306 -uroot mysql
なおこの初期状態ではrootにパスワードが設定されていないので至急設定する。
そして、mysql3.23側データベースアクセスは、/usr/local/mysql3.23/bin/下のコマンドを使用すればよい。
以上でmysql5.0とmysql3.23の共存に成功した。