コンピュータ

Microsoft Word 等で書かれた図を EPS に変換する

Word の図を変換云々で検索すると,スクリーンショットを使う方法をはじめ bitmap にしてしまう方法ばかりが出てくる。

書籍に使う場合でも,600dpi くらいになるように拡大して取り込めれば使えないことはないのだが…。

いろいろ試行錯誤した結果,比較的楽でどんな場合でもそれなりにうまくいくのは,図そのものや図のあるページをAdobe AcrobatでPDFに変換して,PDFをAdobe Illustratorで取り込む(必要に応じて切り出す)方法。トリッキーというかアドホックなつくりの図(テキストボックスを駆使したものなど)でもいける。

まあ,Illustratorは安くはないけど。フリーのツール等もいろいろ試したが,微妙にそれぞれ不具合があるので,Illustrator CS4のデモ版で試した後,結局購入した。

OpenJDK7 on NetBSD

普通に pkgsrc/lang/openjdk7 動くようになってた。素晴らしい。

$ uname -srm
NetBSD 5.99.24 amd64
$ /usr/pkg/java/openjdk7/bin/java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-pkgsrc_2010_01_23_23_14-b00)
OpenJDK 64-Bit Server VM (build 17.0-b05, mixed mode)

手持ちの Java プログラムをいくつか動かしてみたが特に不具合はなし。GUI のあるプログラムは試してないが。

AA

OpenJDK7
openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp より

#ifndef PRODUCT
  if (sig == SIGSEGV) {
    fatal("n#"
          "n#    /--------------------\"
          "n#    | segmentation fault |"
          "n#    \---\ /--------------/"
          "n#        /"
          "n#    [-]        |\_/|    "
          "n#    (+)=C      |o o|__  "
          "n#    | |        =-*-=__\ "
          "n#    OOO        c_c_(___)");
  }
#endif // !PRODUCT

 

はじめてのBibTeX

書籍(同人誌ではなく)の編集を手伝う…というよりほとんど一人でする羽目になっている。何十人もの著者から既に多数原稿を預かっているのに,編集体制が崩壊していて大変。

私が編集に参加する以前に,著者には「参考文献はBibTeX形式で」という依頼が行っていたらしいのだが,一部しかそのようになっていないので,半分手作業で変換することに。

学会の予稿集みたいなのは@proceedingsで,その中の1本の予稿は@inproceedings。
じゃあ,本は@bookだから,複数の著者の居る本の中の一部は@inbookで,

と思ったら,本全体の編集者editorと該当部分の著者authorが併記できない。

ググったら両方併記できるようにする*.bstの改造方法が載っていたりしたので真似してみたが,今度は出力される書式が思ったようにいかない。

あれこれ試行錯誤した挙句,実は@incollectionを使えばいいことが判明。

やっぱり勘で使うんじゃダメですなあ。

pkgsrc/www/ap2-fcgid

mod_fcgid の socket / shm のファイル作成場所について。
fcgid_conf.c:

#define DEFAULT_SOCKET_PREFIX "logs/fcgidsock"
#define DEFAULT_SHM_PATH "logs/fcgid_shm"

で,

        config->sockname_prefix =
                ap_server_root_relative(p, DEFAULT_SOCKET_PREFIX);
        config->shmname_path = ap_server_root_relative(p, DEFAULT_SHM_PATH);

なので,apacheもpkgsrcデフォルトのままだとすると,おそらく/usr/pkg/logs/以下になる。

で,標準でそんなディレクトリはないので,

[emerg] (2)No such file or directory: mod_fcgid: Can't create share memory for size %zu byte

といったエラーになる。

仕方がないのでhttpd.confなどで明示する。

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/run/fcgidsock
  SharememPath /var/run/fcgid_shm
</IfModule>

SocketPathで指定するのはディレクトリで,その下にwww権限(apacheの実行権限)でソケットが作られる。
SharememPathの方はファイル名そのもの。root権限で作ってくれるようだ。

検索すると/tmp以下に置いている例もあるが,別にした方が良いと思う。

pthreadの後方非互換とpkgsrc/lang/perl5

いろいろ新しくなったついでにOSのバージョンも上げたら apache が動かなくなった(笑)。

どうも,pthread が非互換らしい。再コンパイルで解決。

…なんだけれど,perl だけ何度再コンパイルしても libpthread.so.0 をリンクした状態になる。(libpthread.so.1 だけリンクしてほしい)

ちゃんと調べていないけれど,どうも既にインストールされている /usr/pkg/lib/perl5/5.10.0/x86_64-netbsd-thread-multi/CORE/libperl.so の参照先に引っ張られている模様。インストールしてある状態で再コンパイルせずに,pkg_deleteした後に再コンパイルしたらうまくいった。

このへんの関係なのかな?

cc  -Wl,-R/usr/pkg/lib --whole-archive -shared  -L/usr/pkg/lib なんたら.o 
-o ../../../lib/auto/なんたら/なんたら.so -L../../..
 -Wl,-R/usr/pkg/lib/perl5/5.10.0/x86_64-netbsd-thread-multi/CORE
 -Wl,-R../../../lib/CORE -lperl

bge その後

NetBSDのメーリングリストで,同じBCM5722のDELLのサーバで,bgeにtso4オプションをつけているとその症状になる(tso4を外せば問題ない)と教えていただきました。やってみたら確かに正常動作。
tso4 Enable hardware-assisted TCP/IPv4 segmentation on interfaces that support it.
BCM5721なら問題ないので,BCM5722の「hardware-assist」の部分に不具合があるんですかね。

BCM5722

テキトーにBCM5755なbrgphyと同じように認識するようにmiidevsとbrgphy.cを直してみた。それらしく起動したが症状は改善せず。
テキトーすぎたのでFreeBSD, OpenBSD, Linux のソースをあたってみる。
FreeBSDとOpenBSDは,BCM5722の識別だけして,特に処理はなし。
Linux (net/tg3.c) は,BCM5722 (とBCM5756) を識別した条件分岐があるが,他の ASIC BCM5755 その他系の TG3_FLG2_PHY_JITTER_BUG フラグを立てる部分を回避してるだけ。
TG3_FLG2_PHY_JITTER_BUG がある場合の処理は,NetBSD の brgphy.c でいうところの bcm5755_load_dspcode そのもので,これを回避しているということは,結局特別な処理は何もいらないっぽい。
うーん,調子が悪いのは別の原因か。

HP ProLiant ML110 G5 で NetBSD (その2)

ネットワークまわりがどうもひっかかる感じ。

$ dmesg | grep bge
bge0 at pci4 dev 0 function 0: Broadcom BCM5722 Gigabit Ethernet
bge0: interrupting at ioapic0 pin 17
bge0: ASIC BCM5755 C0 (0xa200), Ethernet address (略)
bge0: setting short Tx thresholds
ukphy0 at bge0 phy 1: Generic IEEE 802.3u media interface

こんなNIC。
適当なPCのターミナルからsshして cat で長いファイルを流すと,最初は順調だがフロー制御が入ったあたり(?)からガタガタに(間欠的に)なる。そしてたまに,

bge0: watchdog timeout -- resetting
bge0: block failed to stop: reg 0x1400, bit 0x00000002

こんなエラーを吐く。
よくみたらukphyじゃん…。これが悪い?
ちなみに,問題の起きていないML110G4 (NetBSD 4.0_STABLE) は,こんなかんじ。

$ dmesg | grep bge
bge0 at pci3 dev 0 function 0: Broadcom BCM5721 Gigabit Ethernet
bge0: interrupting at ioapic0 pin 17 (irq 12)
bge0: ASIC unknown BCM575x family (0x4201), Ethernet address (略)
bge0: setting short Tx thresholds
brgphy0 at bge0 phy 1: BCM5750 1000BASE-T media interface, rev. 0

vst作成メモ

サンプルのAGainを参考にして,

void EstMS::processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames)
{
  float* in1  =  inputs[0];
  float* in2  =  inputs[1];
  float* out1 = outputs[0];
  float* out2 = outputs[1];

てな感じで,バッファのアドレスを取り出して,

  *out1 = (*in1 + *in2) * fGain;
  *out2 = (*in1 - *in2) * fGain;

という処理を,(各ポインタを加算しながらsampleFrames回)繰り返せばいいかと思ったが,うまくいかなかった。何故か2回通すとモノラルっぽくなる。けど,完全にモノラルでもない。

いろいろ試行錯誤した結果,どうやら入力と出力のバッファのアドレスが同じだったらしい。上の行で*out1に書き込んだ時点で*in1が上書きされていると。

わかってしまえば,「なあんだ」って話なんですがね…。