<   2007年 09月 ( 4 )   > この月の画像一覧

Perl 5.8.5 で なんとしても GD モジュールが動かない件。
ずっーと前なんだけど、これだけで数週間ハマった。
他にも悩んでいる人がいかもしれないのと思うんで、メモっとくよ。

環境とか


マシンは RedHat Enterprise Linux ES v 4.0。
以下のライブラリは入れてある。
($ rpm -qa | grep gd-level のように検索する)
  gd-2.0.28-4
  gd-devel-2.0.28-4
  libpng10-1.0.16-1
  libpng-devel-1.2.7-1
  libpng-1.2.7-1
  libjpeg-6b-33
  libjpeg-devel-6b-33

GD モジュールは、libgd や libjpeg のバージョンに制限があるのだが、
これならそれも問題なくクリアしている。

インストールしても動かない


さて、perl モジュール GD のインストール。
Lincoln D. Stein / GD - search.cpan.org
現在のところ、最新版は GD-2.35.tar.gz である。

解凍して make。
$ tar xvzf GD-2.35.tar.gz
$ cd GD-2.35


ライブラリを漏れがないように全て指定するために、
以下のようなファイルを作って実行。
$ more my_make
perl Makefile.PL ¥
    -options "JPEG,PNG,GIF" ¥
    -lib_gd_path /usr/lib ¥
    -lib_png_path /usr/lib ¥
    -lib_jpeg_path /usr/lib


上記ファイルを実行した後、make。
$ bash my_make
Included Features:     JPEG,PNG,GIF
GD library used from:   /usr/lib
PNG library used from:   /usr/lib
JPEG library used from:  /usr/lib

If you experience compile problems, please check the @INC, @LIBPATH and @LIBS
arrays defined in Makefile.PL and manually adjust, if necessary.

Checking if your kit is complete...
Looks good
Writing Makefile for GD

$ make


詳細にログを出しながら、ちゃんとインストールされたかをテストする。
$ make test TEST_VERBOSE=1
(中略)
ok 7
ok 8 # Skip, FreeType changes too frequently to be testable
ok 9 # Skip, no XPM support
ok 10 # Skip, no JPEG support
ok 11
ok 12
ok
    3/12 skipped: various reasons
t/Polyline....1..1
(省略)


no JPEG support って、libjpeg がリンクされてないのか!?
ガーンΣ(゜ロ゜〃)

数日間の試行錯誤


libgd 、libjpeg、libpng は勿論のこと、色々入れ直しましたよ。
ソースから入れてみたり、rpm 使ってみたり。

ソースから入れると、
***-devel-*** なんてのの場合は、/usr/local/bin にファイルができたりする。
普通は、RH は /usr/bin くらいしか使わないので、
ゴミがたまっちゃったかーと思って、削除したら、
  rm /usr/local/bin
のつもりが
  rm /usr/bin
だったりして、アヒャヒャヒャヽ(゜∀゜)ノなことに。
man は見られないは、iconv は消えるは、
less も more も vi もねぇよ、という、
シンプルにもほどがある環境になってしまい、大慌てで復旧。

CD から再インストールってテはあるけどさ、
実は他の部署のマシンで、その部署のマシンルームにあるから、
タダでさえマシンルームは許可がないと入れないのに、
他部署の私は、特に入るのが大変なわけ。
だから、マシンに CD を入れて再インストール、というのは無理。
仕方ないから、自分の端末からしこしこ rpm を ftp して入れましたよ。
sftp と ssh が無事だったのが幸いでした。
もう泣きそうですよ。
自分が悪いんだけど。

こういうのって、何年かに一度くらいやるんだよねー。
数年前も、/usr/local/lib 丸ごと削除、ってやったしなぁ。
そのマシンは Solaris でさ、
Linux は大概のアプリは /usr/lib に入っていると思うけど、
Solaris って、よく使うアプリでも /usr/local/lib にあるのよ。
もうディスクマウントは外れるは、
ログインできないは、ぷち臨死体験でしたよ。
自分が悪いんだけど。

解決


元に戻って、perl の GD モジュールの件。
ふと GD モジュールのバージョンを下げてみよう、と思い立った。
実は以前 RHEL ES v3.0 で GD モジュールを使ったことがあって、
その時にインストールに使った tar-ball が自マシンに残っていた。
GD-2.32である。
perl のモジュールだから、
libc や kernel のバージョンはうるさく言わないだろうと思い、
前述の方法と同様にインストールしてみた。

$ tar xvzf GD-2.32.tar.gz
$ cd GD-2.32
$ more my_make
perl Makefile.PL ¥
    -options "JPEG,PNG,GIF" ¥
    -lib_gd_path /usr/lib ¥
    -lib_png_path /usr/lib ¥
    -lib_jpeg_path /usr/lib
$ bash my_make
$ make


いよいよテスト。
$ make test TEST_VERBOSE=1
(中略)
ok 7
ok 8 # Skip, FreeType changes too frequently to be testable
ok 9 # Skip, no XPM support
ok 10
ok 11
ok 12
ok
(省略)


ぶらぼー!
no JPEG support が出なくなった!

以下のようなテストファイルでも試してみる。
$ more gd-test.pl
#!/usr/bin/perl
use GD ;
print 'GD::VERSION is ', $GD::VERSION, "\n";
print map {
 $_, '=', (GD::Image->can('newFrom'.$_)) ? 'OK' : 'NG' ,"\n" ;
} ('Png', 'Jpeg', 'Gif') ;

$ perl -w gd-test.pl
GD::VERSION is 2.32
png=OK
jpeg=OK
gif=OK
$


こちらもぶらぼー!
これでめでたく使える!

まとめ


というわけで、まとめてみると、
以下のセットで使え!ということだ。

  RedHat Enterprise Linux ES v4.0
  Perl 5.8.5
  gd-2.0.28-4
  gd-devel-2.0.28-4
  libpng-devel-1.2.7-1
  libpng-1.2.7-1
  libjpeg-6b-33
  libjpeg-devel-6b-33

×GD-2.35.tar.gz ... 動かない!
○GD-2.32.tar.gz

Can't locate object method "png" via package "GD::Image"
もしくは
Can't locate object method "jpeg" via package "GD::Image"
という文言で検索して来た方は、
以下の3点を再確認すること。

(1) 各種ライブラリがインストールされているか
→ gd のほかに、gd-devel が必要なのかも。
  libjpeg などについても、
  それぞれ対応する libjpeg-devel などが必要っぽい。

(2) 各種ライブラリ(libxxx)のバージョンが合っているか
→ バージョンが古いとダメ。

(3) GD インストール時にライブラリのパスを明示的にperlに教えてみる
→ Makefile を確認すればわかることだけど、
  Makefile が読めない人は、きちんと引数で指定すべし。

ネットでヒントを探し回ったのだが、
大体上記3つの項目で抜けがある人が多い。
それでもダメなら、私と同じ現象かもしれないので、
GD モジュールのバージョンを下げてみましょう。
どれが stable なのかわからないけど、
とりあえず、GD-2.32 が動いたことは保証できる。

ちなみに、/usr/lib の一部はこんな感じ。
$ /bin/ls -Al libgd.* libjpeg* libpng*
-rw-r--r-- 1 root root 255120 11月 4 2004 libgd.a
lrwxrwxrwx 1 root root   14 1月 9 18:25 libgd.so -> libgd.so.2.0.0
lrwxrwxrwx 1 root root   14 1月 9 18:25 libgd.so.2 -> libgd.so.2.0.0
-rwxr-xr-x 1 root root 228052 11月 4 2004 libgd.so.2.0.0
-rw-r--r-- 1 root root 156828 10月 7 2004 libjpeg.a
-rwxr-xr-x 1 root root  470 10月 7 2004 libjpeg.la
lrwxrwxrwx 1 root root   17 1月 9 18:25 libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx 1 root root   17 1月 9 18:25 libjpeg.so.62 -> libjpeg.so.62.0.0
-rwxr-xr-x 1 root root 117976 10月 7 2004 libjpeg.so.62.0.0
lrwxrwxrwx 1 root root   10 1月 9 18:25 libpng.a -> libpng12.a
lrwxrwxrwx 1 root root   11 1月 9 18:25 libpng.so -> libpng.so.3
lrwxrwxrwx 1 root root   18 12月 5 15:11 libpng.so.2 -> libpng.so.2.1.0.16
-rwxr-xr-x 1 root root 142648 8月 17 2004 libpng.so.2.1.0.16
lrwxrwxrwx 1 root root   17 1月 9 18:25 libpng.so.3 -> libpng.so.3.1.2.7
lrwxrwxrwx 1 root root   19 12月 22 15:37 libpng.so.3.1.2.2 -> libpng12.so.0.1.2.2
lrwxrwxrwx 1 root root   19 1月 9 18:25 libpng.so.3.1.2.7 -> libpng12.so.0.1.2.7
-rw-r--r-- 1 root root 169800 9月 15 2004 libpng12.a
lrwxrwxrwx 1 root root   13 1月 9 18:25 libpng12.so -> libpng12.so.0
lrwxrwxrwx 1 root root   19 1月 9 18:25 libpng12.so.0 -> libpng12.so.0.1.2.7
-rwxr-xr-x 1 root root 226481 12月 22 15:37 libpng12.so.0.1.2.2
-rwxr-xr-x 1 root root 142648 9月 15 2004 libpng12.so.0.1.2.7


だがしかし


RedHat Linux 9( kernel 2.4.20、gcc3.2 ) なら GD-2.35 でも動くらしい。
perl の version が 5.8.0 だから?
でも 5.8.0 はあんまし stable じゃないので、使うのイヤなんだけど。
多言語まわりもまだおかしいし。
[PR]
by xiaoxia | 2007-09-26 22:26 | プログラム言語 | Comments(2)
emacs と xyzzy の設定とかの話を2件。

[emacs] togge-read-only を設定


Linux 上で、バージョン管理に CVS を使っている。

emacs でファイルを開いて
read-only にするつもりで C-x C-q と入力すると、
vc-toggle-read-only が動いてしまう。
これはただの toggle ではなくて、
CVS サーバ上のファイルと差分がある時は、
commit してねってな感じで、
更新の説明を入れろと言われる。

私は commit や update は、
間違えないように、コマンドラインから実行することにしているので、
ただ read-only にしてくれれば良いんだってば!という時は、
こういうのはただ邪魔なだけ。
M-x toggle-read-only とするのも面倒くさい。

なわけで、C-x C-q を普通に read-only にしたいなら、
以下を、.emacs に書いておくと良いよ。
(global-set-key "¥C-x¥C-q" 'toggle-read-only)


xyzzy でプレフィクスコマンドを設定


emacs では、C-x a がプレフィクスコマンドになっていて、
私はこれに色々な関数をバインドしている。
xyzzy では、C-x a は set-variable がバインドされているのだが、
同じキーアサインで動かせるようにしたい。
それには、C-x a をプレフィクスコマンドにしなくては。

意味のわからない方のために書きますと、
emacs では C-x a の次にもう1つキーを押して、
コマンドを実行できるようになっていますが、
xyzzy では、C-x a でコマンドが完結しています。
なので、xyzzy で C-x a に割り振ってあるコマンドをつぶして、
C-x a プラス1でコマンドを実行できるようにしたい、という話。

というわけで、C-x a をプレフィクスコマンドにする方法。
C-x a に新しく作ったキーマップを入れちゃう。
元の C-x a set-variable は C-x a a に入れ直す。

キーマップの作り方はあちこちに出ているんだけど、
新規に major-mode や minor-mode を作成するときの例ばかり。
現在あるプレフィクスの中に、さらにプレフィクスを指定するってのは、
見当たらなかったので、メモってみる。
やり方は以下。
1: (defvar my-xa-map (make-keymap))
2: (setf (symbol-function 'my-xa-prefix) my-xa-map)
3: (define-key ctl-x-map #¥a 'my-xa-prefix)
4: (define-key my-xa-map #¥a 'set-variable)
5: (define-key my-xa-map #¥l 'goto-line)

1: キーマップのベクターをとりあえず新規作成
  my-xa-map という名前にしてみる
2: 1で作ったキーマップを、my-xa-prefix という関数の中身に入れる
  この関数も私が勝手につくったもの
3: C-x a が押されたら、2で作った関数が呼ばれるようにする
  C-x のキーマップであるところの ctl-x-map は既存のもの
  (C-x のキーアサインは、ctl-x-map に入っているので、
   この中の a のアサインを変えると、C-x a が変わる)
4: 元々 C-x a にアサインされていた set-variable を C-x a a に入れる
5: C-x a l が押されたら goto-line 関数が呼ばれるようにする

複数ストロークは
(global-set-key '(#¥C-x #¥r #¥w) 'copy-rectangle)

こんな風にも設定できるんだけど、
上のように指定すると、
キーバインドの入れ子の様子がわかって、おもしろいなーと思って。

define-key のところで、
(define-key ed::my-xa-map #¥a 'set-variable)

こんな感じにパッケージ指定をしておくべきなのかな?
そのあたりがまだよくわからない。

goto-line はよく使うんですよ。
デバッガに「○行目がおかしいよー」と言われたときに、
すぐその行に飛びたいでしょ。
キーバインドしておくと、
いちいち M-x goto-line って打たなくても良いんで、
ラクチンです。

vi は苦手だから普段使わないんだけど、
考えてみると、こういうところは vi は便利にできてるなぁ。
さすが。
[PR]
by xiaoxia | 2007-09-18 18:08 | プログラム言語 | Comments(0)

[java] JNI移植 win→RedHat

久しぶりに、仕事の話。
自分メモ。
やったこととか、注意点とか。

どこか間違ってるような気がする。
いや、絶対間違ってると思う。
修正のご指摘歓迎。

jni_md.hのエラー

__int64 がないので、代わりに long long を使う。
$(JAVA_HOME)/inc/linux/jni_md.h をそのまま使えば良いのかな。

ないなら、jni_md.h を次のように書き換えちゃう。
/include/win32/jni_md.h:
 typedef long jint;
+ #ifdef __GNUC__
+ typedef long long jlong;
+ #else
 typedef __int64 jlong;
+ #endif
 typedef signed char jbyte;


■ NewString の warning
jstring NewString(JNIEnv *env, wchar_t *unicodeChars,jsize len);

jstring NewString(JNIEnv *env, (const jchar*) wchar_t *unicodeChars,jsize len);

キャストしちゃえばとりあえずOK(乱暴)

■ wc** 関連の warning

以下を追加
#include <wchar.h>


■ロケールに SJIS を追加

Win 用のソースなので、ロケールを SJIS にして実行したかったが、
/usr/lib/locale 以下に SJIS に相当するものがない。

以下のページの方法で追加。
Redhat の Shift-JIS 対応

/etc/locale.alias ではなくて、/usr/share/locale/locale.alias なのね。
あれ?この中には既に SJIS のエイリアスが切ってあるぞ?
なんでうまくいかなかったのかな?

とりあえずできてるからいいや<いくない

-jar と -classpath は同時に使用しないこと

> 実行時の -jar -classpathオプションを同時に使う指定の仕方
SDK のツールに関するドキュメントの java コマンドの
-jar オプションのところに、以下のように書いてあります。
SDK 1.3 のドキュメントから引用
| このオプションを使用すると、指定された JAR ファイルは、すべてのユーザク
| ラスのソースになり、ほかのユーザクラスパス設定は無視されます。
ので、この使い方はできないのではないかと思います。


manifest で回避
manifest.mf の例
Manifest-Version: 1.0
Created-By: 1.3.0_01 (Sun Microsystems Inc.)
Main-Class: Test
Class-Path: Other.zip ../lib


DMS - The Kopi Project

KJC なんてのがある。
スゴいコンパイラらしい。ふうん。
今回は使わなかったけど。
いつか使うかもしれないから、
nkjc-***-bin.jar.zip を $(JAVA_HOME) 以下に置いておく。
[PR]
by xiaoxia | 2007-09-16 15:42 | プログラム言語 | Comments(0)

愛読してほしくない作家

[読書・文学] 私家版(超有名作家なのに)好きな女性には愛読してほしくない作家ベスト5(しあわせのかたち)
【18禁】 嫁に読んでほしくない作品ベスト5(わたしが知らないスゴ本は、きっとあなたが読んでいる)
好きな人に教えられて読みたくない作家ベスト1(404 Blog Not Found)

私は澁澤つながりで、サドも読む。
数冊持っている程度で、愛読はしてない。
澁澤とサドといえば、猥褻文書っつーことで起訴されたあの裁判を思い出すのだが、
実際に読んでみたら、全然ワイセツじゃなくて、
かなりがっかりしたのだった(笑)

サドといえば、異常性欲としてのサディズムばかりが取り上げられるが、
私が本当に読んでもらいたいのは、
サディズムが肯定されることを滔々と述べたその演説である。

そこでは、きっぱりとキリスト教の考え方が否定されている。
あのキリスト教全盛の世の中で、
あそこまでキリスト教を否定できるというのは、
実はスゴいことだったりする。
欧米人のキリスト教へのしばられっぷりというのは、
多神教で無宗教な日本にいる私たちには想像できないほど
強いもののようだ。
現代でも、キリスト教を深く信仰するあまり、
地球は回っていない、進化論は嘘である、と信じている人たちがいる。
一見科学を否定する愚かな行為に見えるが、
なぜそこまでできるのかということは、
ほとんどの日本人は理解できないだろう。
当時のキリスト教信仰は、彼ら以上に敬虔なものだったと思われる。
そんな時代に、それを真っ向から否定する。
否定する思想自体、多くの人には想像も付かないことだっただろう。
そんなサドの思想の柔軟さは、非常に驚くべきものだと思う。
逆に言えば、キリスト教を否定するほかに、
「背徳」を表現する方法がないことがわかるのだが、
それは時代性を考えれば仕方のないことだ。

そんなわけで、当時の澁澤も言ったように、
サドをワイセツって言ったら、言った人の頭の中がワイセツ!
と言いたい。
読んでみればわかるけど、サドは全然エロくない。
気持ち悪いかもしれないけど。
いや、実際、気持ち悪いんだけど(笑)
もうちょっと彼の思想とか哲学とか、
そういう方向でも見て欲しいなぁと思うわけ。

マンディアルグやバタイユはまだ読んでない。
眼球譚だけは絶対読まなきゃと思ってる。
この際、いい機会だから読もうかなぁ。

しかしね、これで18禁とか言ってたら、
井原西鶴とか、学校の図書館に置いてる場合じゃないよ。
読んでたけど(笑)
日本の王朝文学も、そういうシーンは結構あるしね。
ミヤビっぽく訳してあるけど、これってアレじゃん、みたいな。

サド(発禁本だった)を数冊所持して、
バタイユも読みたいーなんつってる女子は、
50年前だったら確実にタイーホだな。
サドは堂々とレジに出して買ったのだが、
つくづく、いい時代になったもんだ(違

***

「しあわせのかたち」さんの方で、
「5位/坂東真砂子」とある。
あーそうかなー。
女子としては、岩井志麻子のほうが、
男性に好かれていないと思うんだけど。
むしろ、男性に愛読して欲しくない作家、か。
私はどっちも好きですよ。
露悪的で(^-^)

渡辺淳一とか団鬼六とかは……なんつーかまあ、
普通の女子は手に取りもせんでしょう。

そうかも。
私もそっちは行かないし。
渡辺淳一は、なんつーかエロじゃなくて、
オヤジの妄想過ぎて、可哀想で読んでいられないっつーか。
高校のころ、団鬼六を愛読している友人♀はいたけれど、
私はそっちには行かなかったねぇ。
宇野鴻一郎の方にも行かなかったしー。
でも、中学生の頃は、川上宗薫を読んでた。
何だろ、官能小説でも、やっぱ好みがあるんだろうな。

乱歩やヤプーが何でないんだろうねとのことだが、
乱歩は確かにヘンタイだわ(笑)
人間椅子とかヘンタイ過ぎ。
個人的に一番のオススメは「芋虫」なんだけどね。
でも、一般的には、どういうわけか、それほどヘンタイ扱いされてないね。
日本人の感性には、サドなんかより、乱歩の方がよほどエロだと思うのだが。
ヤプーは、書かれた時代背景を思ってしまうので、
それほどエロではないと思っている。
敗戦直後に金髪碧眼美女崇拝、しかも名前を隠して、でしょ。
純粋にヘンタイ小説とは、ちょっと思えない。
敗戦国の鬱屈した何かを感じてしまうよ。

うっかりメガストアとか桃姫に反応してしまった。
ぬるい。
コアマガジン系なんかは、どれもそれなりに画力の高い人が多いので、
全然気持ち悪くなくて、普通である。
二流三流あたりの雑誌の方が、ニッチで、
ちょっと違う方向に行っていることが多い。
個人的には、ムジンやらアウンやらはもう気持ち悪い。
読者コーナーに掲載されている読者のイラストはがきを見ると、
雑誌の方向やレベルがすぐにわかって良いんだけど、
最近は中が見られないようになっているので、至極残念。

dankogai は筒井康隆をあげている。
確かに彼はエログロナンセンスだなぁ。
エロよりはナンセンス要素が強いので、イパーン人にもオススメできる。
「笑うな」とか、あのあたりの短編がよろしい。
でも筒井なら愛読してても良いと思うんだけど。
だめ?

***

で、「男性に愛読して欲しくない作家」も考えてみたのだが、
サドもバタイユも、普通のオサーンには愛読して欲しくない。
「ナオミ! 俺を馬だと思って乗っかってくれ!」とか
愛読してると言われても、困惑しそうだ(^^;;
女子に愛読して欲しくない本は、
男子にも愛読して欲しくない本なのかもしんない。

逆に「女子に愛読して欲しい作家」ってのはどんなのだろう。
合コンで言うとポイント高い作家とか。
「趣味は読書でぇ、えーっとぉ、エクニカオリが好きでぇす」とか言うのかな。
あー無理だ、20年若かったとしてもぜってー無理だ。
[PR]
by xiaoxia | 2007-09-03 19:41 | 読む | Comments(0)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞