最近の(でもないけれど)出来事/落書帳/仲間内のネタ/覚え書き/whatsnew

基本的に落書き帳/メモ帳/備忘録なので、 わりと間違っていたり、 数分後とか後日とかに見たら、 いきなり消えていたり書き換わっていたりとかあります。


Tue,01 Apr,2008

今年は工画堂はネタが無かった。
NetHack(原作の総本山)は、ネタがあったらしい。

Wed,02 Apr,2008

FreeBSD 6.3-RELEASE on Let'snote CF-Y5 で、 カーネルフリーズが頻発する件、 Thu,10 Jan,2008Sun,17 Feb,2008Sat,01 Mar,2008の続き。 1ヶ月間、SpeedStep を無効にしてみたが、 SpeedStep を有効にしていた時よりも頻度はずっと少ないものの、 やっぱり週1〜2くらいのペースで発症する。 どうやら SpeedStep は症状を悪化させる要因ではあるものの、 症状を発生させる原因では無いらしい。 と言うわけで、今度は SMP を切ってみるテスト。 Sun,11 May,2008Tue,30 Sep,2008に続く。

Fri,04 Apr,2008

線路に人が転落したとかで6分遅れ。
AMD な携帯向けノートパソコン、 Sun,04 Nov,2007の続き。 2.0kg未満まで緩和して10万円以下だと DOS-PARAショップブランド Prime A Note Cressida NB しか無かったが、 ツクモ扱いの hp tx2005/CT も10万円をギリギリ切る所に来ているらしい。 OS込みの値段は同じで、 スペックは tx2005/CT の方が二回り上くらい、 但し tx2005/CT(光学ドライブ取り外し時 1.97kg)の方が CressidaNB(光学ドライブ取り外し不可 1.85kg)より 100g 重い。 スペックが上といっても Turion 1.6GHz と 2.0GHz って、 個人の携帯ユースでそこまで必要か、しかもデュアルコアだし、 と言う話が……、常用だとそのくらい欲しいよなぁ。
国民年金。 「※ 経済的に余裕がある場合は、保険料を納付するほうがおトクです 保険料の後払い(追納)は、保険料が高くなることはあっても、安くなることはありません。」 って宣伝しているけれど、 保険料は全額、社会保険料控除で認められる筈だから、 所得税の還付まで含めて損得勘定すると、 収入が少ない人の場合は、場合に応じて計算しない限り、 どちらが得かははっきりしない筈なんだよね。 ……、「経済的に余裕がある場合は」って言っているのだから、 控除を全て使い切る場合(控除を繰り越す方法を考えない方が得な場合)は 経済的に余裕があるのだろうから、嘘では無いわけか。

Sun,06 Apr,2008

GUNDAM X SIDE.1 〜 3 各2枚ずつあって¥1,950-。
EeePC とか対抗機種とか並んでいたけれど、売れるのだろうか?。
EeePC、E-Mobile2年契約同時加入で ¥19,800-。
4GB の USBメモリとか SDメモリとかが¥1,980-。
GreenHouse SD-HC リーダー(アダプタにカードを内蔵するタイプ)¥500-、 SD リーダー(アダプタは小さくてカードは横側の外にはみ出すタイプ)¥480-。
PD1 無し、PD2CV 無し、APD2 無し、 PD3 無し、PD4 無し、 PD5 無し、PD5X ¥3,980-、 PD5plusX ¥5,980-、 PD6 ¥3,980-。 ブルーフロウ 無し、ブルフロ ファンディスク 無し、 ブルーブラスター ¥2,180-、ブルブラ ファンディスク 無し。 ガジェットトライアル 無し。 火星計画2 無し、火星計画3 無し。 PD5plusX が5割増に値上がりしている……新発売直後の値段だし。
新品の場合。 ブルフロファン: ヨドバシ¥2,480&13%還元、ビック¥2,480&13%還元、マップ¥2,900&10%還元。 ブルブラファン: ヨドバシ¥2,780&13%還元、ビック¥2,780&13%還元、マップ¥2,980&10%還元。
FreeBSD 6.x-RELEASE で libftdi と libusb。 幾つかのデバイスを ftdi_usb_open() している状態で、 さらに ftdi_usb_open() してエラーが返ってくると、 既に ftdi_usb_open() していた分のデスクリプタが破壊されている事に気付いた。 libftdi のソース探索中……。 ftdi_usb_open() の中で usb_find_devices() しているのだが、 そこで壊れているらしい。 libusb のソース探索中……。 既にオープン済みのデバイスがある状態で usb_find_devices() すると、 usb_find_devices() の中で既にオープン済みのデスクリプタを故意に壊していた。 これはバグか仕様か?。 仕様だとすると、libusb はプログラム動作中の活線挿抜に非対応と言う事になる。 さらに libusb のソース探索中……。 usb_find_devices() でデバイスをスキャンする時に、 usb_os_find_devices() にて USBデバイスが存在するか否かを調べているのだが、 usb_os_find_devices() ではいきなり open(,O_RDONLY) して 失敗したら「デバイスが存在しない」とフラグを立てて、 前回の探索時にそのデバイスが存在していた場合は 「デバイスが活線で外された」として破壊していた (ソースのコメントにそう書いてある)。 で、そのデバイスが既に ftdi_usb_open() している場合、 open(,O_RDONLY) は失敗するから……。
↑ そんなんでは困るので、パッチを作った。 libusb-0.1.12 の活線挿抜のバグ修正パッチ、FreeBSD用

Mon,07 Apr,2008

線路に人が落ちたとかで、5〜7分の遅れ。
GNU/Linux で gcc。
undefined reference to `__gxx_personality_v0'
とかエラーが出る。 何かと思ったら、C++ な物を gcc でリンクしようとしていたオチ。 リンク時に -lstdc++ 付けるか、g++ でリンクすれば問題無し。
昨日の続き。 libusb-0.1.12 の活線挿抜のバグ修正パッチ、GNU/Linux用。 USBデバイスをopen()する時に、エラーチェックをせずに常に成功を返す、 と言う恐ろしいバグの修正も同梱。
↑ GNU/Linux方面だと、 この手の質の低さが BSD系よりも目についちゃって、 *BSDからGNU/Linuxへの移行を踏み切れないでいるのだよね。 まぁ、GNU/Linux の裾野の広さの裏返しなんだろうけれど。 その点、MS-Windows だと、GNU/Linux よりも更に更に更に質が低いわけで。 これまた MS-Windows の普及率の高さの裏返しなのか。
libftdi が、FreeBSD と GNU/Linux で挙動が違う事に気付いた。 FTDI な USBデバイスを複数台接続している時に ftdi_usb_open() を複数回実行した場合に、 どのデバイスにつながるのか、 FreeBSD と GNU/Linux で違っている。 それは困るので、FreeBSD の挙動に近くなる様に統一してみた。 libftdi の仕様修正パッチ
活線挿抜なデバイスのデバイスノードのパーミッション。
↑ FreeBSD で devfs 使っているならば、 /etc/rc.conf で devfs_system_ruleset 書いて、 /etc/devfs.rules で詳細指定すれば、 適当に変更できる。 編集し終わったら、 /etc/rc.d/devfs restart が必要かな?。 そう言えば、devfs になってから、/etc/fstab の nodev は無くなったのかな?。
↑*2 GNU/Linux の場合はどうするのだろう?。 USBデバイスを活線で挿すと /proc/bus/usb に生えてくるのだけれども。 カーネルソース探索中……「we don't tell them about.」だと。 更にその先のカーネルソース探索中……usbfsがそれらしい。 usbfs のマウントオプションで、 devuid, devgid, devmode, busuid, busgid, busmode, listuid, listgid, listmode 指定すると変更できる。 ここまでわかった時点で man 8 mount したら、ずばり書いてあるし。 ……。 kernel 2.4系は usbdevfs、 kernel 2.6系は個別の場合は usbfs で総括した場合は virtfs、 と呼ぶらしい。 /etc/fstab に
none            /proc/bus/usb   usbfs   listgid=37,busgid=37,devgid=37,devmode=0664  0 0
と書けば、root:operator で -rw-rw-r-- になるらしい……、 がしかし、root:operator は FreeBSD な uid:gid なので、 GNU/Linux だとうまくない。
↑ FreeBSD だと man procfs でマニュアルが読めるけれど、 GNU/Linux で man procfs しても出てこない……、man proc らしい。
open()。 BSD系で
	const int fd1 = open( "/dev/ugen0", O_RDWR );
	const int fd2 = open( "/dev/ugen0", O_RDWR );
とかやると (/dev/ugen0 は、USBデバイスの活線挿入で生えてくるデバイス)、 2回目の open() は EBUSY のエラーになる。 でも GNU/Linux で
	const int fd1 = open( "/proc/bus/usb/001/002", O_RDWR );
	const int fd2 = open( "/proc/bus/usb/001/002", O_RDWR );
とかやると (/proc/bus/usb/001/002 は、USBデバイスの活線挿入で生えてくるデバイス)、 2回目の open() もエラーにならずに成功してしまう。 うーん、どうなんだろう。
↑ FreeBSD のカーネルソースを探してみたら、 ugen* が同時に1つしかオープンできない様に排他制御しているだけだった。 USB回りをざっと見た感じ、 ufm, ugen, uhid, ukbd, ulpt, umass, ums, urio, usb, uscanner が EBUSY で、 それ以外は EBUSY しないらしい。 ucom 辺りは、複数回 open() できるっぽい。

Tue,08 Apr,2008

Debian GNU/kFreeBSD とか言う物があるらしい。 何の役に立つのか判らないし、誰が使うんだろう?と思ったが、 どうやら 「Debian は、Linux カーネルだけでなく FreeBSD のカーネルでも動きます」 と言う事を証明する為に作られている 「面白そうだからやってみた」だけ らしい。 存在している事自体が、存在している目的なのか。 ……、 Debian GNU/NetBSD とかいうのも作られたが、 完成する前に、事実上放棄されたらしい。
バーストの反対語って何だろう?。 バーストノイズなら、スパイクノイズとかショットノイズだろうか?。 バースト転送だと、ランダム転送か?。 バーストエラーだと、ランダムエラーか?。

Wed,09 Apr,2008

GNU make で OS の判定をする場合。
ifeq ($(OSTYPE),linux)
EXTRA_LIBS = -lrt
else
EXTRA_LIBS = 
endif
こんな感じ。
RSコンポーネンツで買った USB full-A full-B ケーブル。 ケーブルやコネクタにちょっとふれるだけで、 コネクタが接触不良起こして USBデバイスが detached される。 むっきー。
FreeBSD や Debian GNU/Linux で、 libusb と libftdi を使って FT245BM、 Mon,07 Apr,2008からずっと続き。
latency timer の設定は libftdi でできる。
event character の設定は libftdi ではできず、 Linux-2.6.x のカーネルソース drivers/usb/serial/ftdi_sio.[hc] を 読んで、自分で作った。
error character の設定は libftdi でも Linux-kernel でもできず、 結局、 FTDI謹製の純正 libftd2xx を逆アセンブルして、自分で作った。 でも使わなかった。
↑ latency timer と event character の挙動がよく判らない。
接続は「PC ←→ USB ←→ FT245BM ←→ EP1K10」。 EP1K10 は、受信したら即返答する様になっている出来合い品 (DACS-2500 USB-DIO とか言うやつ)。 PC の送信データと EP1K10 の送信データの最後には \x26 が付いている。
latency に 16ms を設定し event character に \x26 を設定、 で、データを送受信してみると、 PC → USB → FT245BM → EP1K10 → FT245BM → USB → PC の1巡に 17〜18 [ms] かかる。 event character が付いているのに、latency が効いている。
試しに、 latency を 16 [ms] のまま event character を無効に設定してみると、 1巡に 32 [ms] かかる。 latency の2倍かかっている勘定になる。
じゃぁ、 latency を 36 [ms] に設定して event character を無効にしてみると、 1巡に 72 [ms] かかる。
さらに、 latency を 36 [ms] に設定して event character を \x26 に設定してみると、 1巡に 37 〜 38 [ms] かかる。
さらにさらに、 HZ を 1000 に設定した Debian GNU/Linux-adeos(1kHz-Linux ではない)で、 latency を 1 [ms] に設定して event character を \x26 に設定すると 1巡に 6〜7 [ms] かかるのに、 latency を 2 [ms] に設定して event character を \x26 に設定すると 1巡に 3 [ms] だったりする。 FreeBSD だと HZ が 100 なので、 latency を 10 [ms] 以下にしても1巡は 10〜11 [ms] かかる。
USB のサイクル待ち以外に、 何で、 event character が付いていると latency の1倍の待ちが入って、 event character が無いと latency の2倍の待ちが入るのだろう?。
で、FTDI の英語のマニュアルを片っ端から読む……。
「USB → PC においては、 に送信される。 event character が来た場合でも、それがバッファの先頭ならば無視される。 バッファが一杯になった時は、 PC側は次の 1ms の時に大容量を転送するモードに切り替わる。」
と言う様な内容の事が書いてあった。 PC → USB 側の説明は見つからない。
してみると、 PC → USB では latency timer だけが働き、 USB → PC では latency timer と event character の両方が働く、 と想定してみると、丁度つじつまが合う……。
PC → USB でも event character が機能して欲しいんだよ……。
↑ 試しに、 event character を無効にして、 バッファが一杯になる様にデータを送ってみた所、 latency 16[ms] → 1巡所要時間 34[ms]、 latency 36[ms] → 1巡所要時間 74[ms]、 latency 2[ms] → 1巡所要時間 6[ms]、 だった。 event character を有効にすると、 latency 16[ms] → 1巡所要時間 19[ms]、 latency 36[ms] → 1巡所要時間 39[ms]、 latency 2[ms] → 1巡所要時間 5[ms]、 ぐらい。 パケットを2つ送る分、片側 1[ms] で両方向合わせて 2[ms] 余計にかかり、 2つ目のパケットはバッファフルを起こさないので、 やっぱり latency timer のタイムアウトまで待ってしまうらしい。 しかも libusb と libftdi が、 継続パケットを送信/受信するまで律儀にブロックしていて、 全部済むまで ftdi_write_data() や ftdi_read_data() が帰ってこない。
↑ バッファが一杯になる様にした場合、 libftdi の ftdi_read_data() を修正してブロックしない様にするか、 libftdi の ftdi_read_data() を size = 62 で呼び出すか、 直接 libusb の usb_bulk_read() を size = 64 で呼び出すか、 どれかに変更すれば、 1つ目のパケットに関しては、 latency のタイムアウト待ち時間が無くなり、 USB のサイクル待ち(両方向で合計 2 [ms])だけになった。
↑ *3,*2,*1 結局。 直接 libusb の usb_bulk_read() を size = 64 で呼び出せば、 バッファが一杯になろうがならなかろうが、 latency のタイムアウト待ち時間が無くなった。 usb_bulk_read() を 64 < size で呼び出すと、 latency タイムアウトで継続データ無しが確定するまで、 ブロックしてしまうらしい。 event character が付いていると、 1つ目のパケットは 2[ms]目に来るが、 2つ目の継続データ無し確定のパケットは latency タイムアウト後に来るので、 latency の1倍+α の時間が必要になり、 event character が無いと、 1つ目のパケットは latency タイムアウト後、 2つ目の継続データ無し確定のパケットも latency タイムアウト後、 合わせて latency の2倍+α の時間が必要になる、 と言う勘定らしい。 libftdi の ftdi_read_data() は内部に別バッファを持っていて usb_bulk_read() を 64 < size で呼び出しているので、 この現症が発動してしまう。
トランジスタ技術 2005年1月号は、 通信の説明に関しては FTDI社謹製のドライバの使い方に終始しているので、 上記の事に関しては全く役に立たなかった。
Fri,11 Apr,2008に続く。

Thu,10 Apr,2008

c.LINKモデム なる物があるらしい。 PLC は電灯線だったが、c.LINK はTVのアンテナ線らしい。 2万円か……、ダイブするには高いかなぁ……、 でもケーブル引き回しが楽になりそうなのは良さそうだなぁ。 職場みたいに、 アンテナ線は各部屋に張ってあるけれど 追加で新規に CAT-5e 張ろうとすると コンクリート壁に追加の配線孔を貫かなくてはならなくて面倒くさい、 と言う場合にはいいかも。 あとは性能か。 ……カタログスペックで 100M らしい。 ……戸建限定らしい……電波法か何かかな?、 それとも単純に、フィルタリングできずに他所の部屋へ漏れてしまうと マズいからか?。

Fri,11 Apr,2008

FreeBSD や Debian GNU/Linux で、 libusb と libftdi を使って FT245BM、月曜からの続き。 ようやく、 Debian Xenomai GNU/Linux-adeos (HZ=1000モード) にて、 送信開始〜受信完了まで、安定して 2[ms] で動く様になった。 でも、100回まわすのに 4800〜5000[ms] かかっている辺りがよく判らん。 ……。 1サイクル毎に 40[ms]の受信ポーリングを入れていたのを忘れていた。 それでも 100回で 800[ms]余計だな。 タイムスライスの消費と、CPUを離すタイミングに問題があるかも?。
Mon,14 Apr,2008に続く。

Mon,14 Apr,2008

FTDI の続き。
↑ FT245BM に latency timeout を 16[ms] と設定している場合、 データが無い時に usb_bulk_read() すると、 FT245BM が latency timeout して「データ無し」を送ってくるまでか、 usb_bulk_read() の引数の timeout か、 どちらか短い方の時間だけ、ブロックしてしまうらしい。 引数の timeout はデフォルト 5000[ms] で latency timeout の方が短いので、 usb_bulk_read() が 16[ms] ブロックしてしまっていた。
↑ サイクル毎の初回は、 event char で即時に応答してきたデータがあるので 2[ms] で受信完了し、 それ以降は受信してもデータが無いので 16[ms] 待ってしまっていて、 結局、1サイクル 2+16*3 で 50[ms] かかってしまうらしい。 これより早くしようとすると、 2+16*2 で 34[ms] になる計算。
↑ Linux-adeos ならば usb_bulk_read() の timeout を 1[ms] にして、 あっさり解決。 1サイクル 40〜41[ms] で回る様になった。
↑ FreeBSD で usb_bulk_read() の timeout を 1[ms] にしたら、 一切受信できなくなった。 2[ms] でも危うい感じで、3[ms] でようやく安定してきた。 libusb は、BSD系と GNU/Linux系と Mac で、 ソースが全く別にわかれているから、挙動も違うらしい。
↑ GNU/Linux版 libusb の場合、 timeout 付けて select() しているだけだった。
↑*2 BSD版 libusb の場合、 ioctl(,USB_SET_TIMEOUT,) して read() していた。 またカーネルソース読めって?……。
↑*? どちらにせよ、そういう実装をされているのでは、 受信専用の別スレッドを作らないと危なくて使えん。

Tue,15 Apr,2008

FreeBSD の Linux エミュレーション。 Linux のカーネルモジュールのエミュレーションが どうのこうのと言う話があるらしいが。 VMWare Player が動くようになるとうれしいのだが、さて?。

Wed,16 Apr,2008

FTDI の続き。
↑ まとめれば1回のバルク転送に収まる量のデータを、 五月雨に個別に ftdi_write_data() とか usb_bulk_write() とかすると どうなるのか、試してみた。 個別の ftdi_write_data() や usb_bulk_write() 毎に、 1[ms] ずつブロックしていた。 こちらでまとめないと駄目か……。
NEC の Lui。 確かに、だいぶ前からこういう方向性のシステムは欲しかったのだが。 現に代用として sshfs を使ってもいるし。 でも、現状のネットワークインフラの状況を考えると、 遠隔地でのシンクライアントの導入って、5〜10年は早いよなぁ……。 とか言っていると3〜5年で済んだりもするものだが、 それでも数年単位で早いよなぁ。 海外では駄目だろうし。 あと、1式40万円近い値段も……。 それから、BSD系とか、せめて GNU/Linux系とか、使えないものかな。 ……、実効速度で 5〜10Mbpz のネットワークが必要らしい。 一般家庭で使うプロバイダだと、 ベストエフォート数十Mbps 契約でも 好調な時で実効速度がせいぜい2〜3Mbps なのだから、 一般家庭をサーバにして外出先、では無理じゃん。
新しらせ。 隣に並んでいる艦は「DD-154 あまぎり」らしい。 なんで甲板が赤いのだろう?。 護衛艦よりも砕氷船の方が大きいのね。

Thu,17 Apr,2008

事故の為、30〜1時間の遅れ。 普通の複線の路線の踏切で、 上り電車だけ連続で3本、と言うのを初めて見た様な気がする。

Fri,18 Apr,2008

悪天候により 10〜20分の遅れ。

Sat,19 Apr,2008

quoted-printable。 nkf -mQ でデコードできる。 nkf って、いつの間にこんなに多機能になったのだろう。
gihyo って技術評論社だったのか。

Sun,20 Apr,2008

攻殻機動隊 1.5 (円盤付きの方)¥350-。

Mon,21 Apr,2008

I18N。 GTK+ とか Qt とか使わない場合、 fribidi 使うと省力化できるらしい。

Tue,22 Apr,2008

gdb。 gdb の FreeBSD版は、 マルチスレッドでの next とか step コマンドが非対応らしい。 痛い……、滅茶苦茶痛い……。
↑ gdb が対応しているならば、set scheduler-locking step。 で、対応している OS って何だろう?。
↑ ざっと gdb のソースを見た限り、 リモートデバッグの場合と、 SVR4 /proc を持っている場合と、 GNU/Linux の場合、 らしい。 FreeBSD で procfs 入れた場合は駄目だった。 それはつまり、「スレッド=プロセス」なシステムのみ対応、って事かな?。
↑ GNU/Linux でも、target exec では駄目で、 デバッグ対象を実行した後に gdb を起動して attach した場合のみ、 scheduler-locking が指定できた。 不便……。

Sun,27 Apr,2008

I18N GearHeadFri,21 Mar,2008の続き。 Internationalization 完了。 やっぱりこれも1ヵ月かかったのか……。 Sun,11 May,2008Wed,18 Mar,2009に続く。

Mon,28 Apr,2008

人身事故だとかでダイヤに乱れ。
銀行のATMコーナーが滅茶苦茶混んでいた。 30〜45分待ちくらいだった。 普段の5割増しくらいな感じ。
libsigc++。 portupgrade したら、libsigc++ が 2.0 から 2.2 に上がっていた。 今までのソースがコンパイルできなくなった。 libsigc++-1.2系列で SigC::Object だった物が、 libsigc++-2.0 では変更になったものの 後方互換性の為の typedef か何かをしてあったのだが、 libsigc++-2.2 では後方互換性も切ったらしい。 取り敢えず、SigC::Object を sigc::trackable に置換すれば、 コンパイルできてちゃんと動いた。

Tue,29 Apr,2008

攻殻機動隊 1.5 (紙メディア通常版) ¥350-。

Wed,30 Apr,2008

CORBA で送信側と受信側のデータが一致しないと思ったら、 *printf() の %ld や %lld の挙動が amd64 と i386 で違うだけだった。
Thu,01 May,2008 追記: C99準拠ならば、inttypes.h を使うと幸せになれるらしい。
libpng-1.2.27。 md5 や sha1 が一致しないどころか、サイズが違う。 どうにか、古い方の libpng-1.2.27(600KBくらい)を見つけ出して、 新しい方の libpng-1.2.27(800KBくらい)と diff してみた所、 どうやら autoconf 2.61 から autoconf 2.62 へ変更していて、 新しい方には autoconf の更新作業で作られた バックアップファイルも一緒に入っていた。 その他、 開発に使っているマシンに入れている zsh のバージョンも上げたらしい。
↑ 結局、リリース番号だけ libpng-1.2.28 に付け替えて出し直したらしい。

Thu,01 May,2008

車両故障の為、1本運休。 さらに別の?車両故障の為、10分遅れ。
printf() で inttypes.h 使うべきだと言う事が判ったが、 clock_t 型とか suseconds_t 型とかどうするのだよ。 しかも、 static_cast<type>(expr) か const_cast<type>(expr) 使うべき所を、 従来型キャスト使ってしまっているのを大量に発見。 泣けてくる。
↑ gcc -Wold-style-cast。 案の定、使っている各種ライブラリのヘッダ側で散々 warning が出る。 特に、GTK+ とか CORBA とかがからんでいると、数十とか数百とか出る始末。
↑ gcc3頃から -W が -Wextra に変わったらしい。

Fri,02 May,2008

GNU/Linux には、当然 __bounded__ が無い。 それだけでは済まなかった。 sys/cdefs.h に __unused が無くて、代わりに __attribute_used__ らしい、 これは aio.h , netdb.h , bits/utmp.h , bits/utmpx.h , linux/icmp.h , linux/skbuff.h , linux/sysctl.h 辺りで、 別件に __unused を使ってしまったためらしい。 gettimeofday() 使うには、time.h を読むのでは駄目で sys/time.h 読まなければならない……、 ってこれは BSD系でも sys/time.h って書いてあるな、 単に別件で読み込まれただけか。 CLK_TCK が無かった、CLOCKS_PER_SEC に変わったらしい。 あと sig_atomic_t も見つからない……、 signal.h を読めばよいらしい、これも BSD系では別件で読み込まれただけか?。
__attribute__ ((__format__ ())) も忘れてるし。 ……クラスのメンバに使おうとすると、
error: format string arg not a string type
エラーで蹴られる、何でだろう?。
↑ Mon,18 Aug,2008 追記: gcc のマニュアルの Section 5.25: Declaring Attributes of Functions に 書いてあった。 C++ の非静的関数の場合、暗黙の第1引数として this があるらしい。 その引数1個分、__format__ の引数での数指定がずれるそうで。 __format__ の引数の指定で、両方共1つずつ大きい値を指定すると、 ちゃんと機能した。

Sat,03 May,2008

↑*2 __attribute__((__bounded__(,,))) が使えるかどうかで、 #define __bounded__ しておかないと、warning がうるさい。 autoconf で調べようとしたら、 既存のマクロが AX_C___ATTRIBUTE__ しか無い。 仕方が無いので自分で書いた。
AC_DEFUN([AC_LANG_WERROR_FUNC],
[m4_define([AC_LANG_WERROR_FUNC_INCLUDED])dnl
ac_lang_werror()
{
  case $[]1 in
  on)  eval ac_c_werror_flag=yes ac_cxx_werror_flag=yes ;;
  off) eval ac_c_werror_flag=    ac_cxx_werror_flag= ;;
  esac
}])dnl

AC_DEFUN([AC_LANG_WERROR],
[m4_ifndef([AC_LANG_WERROR_FUNC_INCLUDED],
          [m4_divert_text([DEFAULTS], [AC_LANG_WERROR_FUNC])])dnl
m4_if(
    $#, 1, [m4_if(
        [$1], [on], [ac_lang_werror on],
        [$1], [off], [ac_lang_werror off],
        [m4_fatal([$0: wrong argument])])],
    $#, 0, [AC_LANG_WERROR([on])],
    [m4_fatal([$0: incorrect number of arguments: $#])])[]dnl
])dnl

AC_DEFUN([CHECK___ATTRIBUTE__], [
  AC_CACHE_CHECK([for __attribute__ $1], [ax_cv___attribute__$1],
    [
    AC_LANG_WERROR([on])
    AC_COMPILE_IFELSE(
      [AC_LANG_PROGRAM(
        [[#include 
          static void foo(void) __attribute__ (($1));
          static void
          foo(void) {
              exit(1);
          }
        ]], [[foo();]])],
      [ax_cv___attribute__$1=yes],
      [ax_cv___attribute__$1=no]
    )
    AC_LANG_WERROR([off])
  ])
  if test "$ax_cv___attribute__$1" = "yes"; then
    AC_DEFINE(AS_TR_CPP(HAVE___ATTRIBUTE__$1), 1, [define if your compiler has __attribute__ $1])
    m4_ifval([$2],[$2])dnl
    m4_ifval([$3],[else
    $3
    ])dnl
  fi
])

AC_DEFUN([CHECK___ATTRIBUTE__UNUSED_ARG], [
  AC_CACHE_CHECK([for __attribute__ unused at argment of functions], [ax_cv___attribute__u
nused_arg],
    [
    AC_LANG_WERROR([on])
    AC_COMPILE_IFELSE(
      [AC_LANG_PROGRAM(
        [[#include 
          static void
          foo( __attribute__ ((__unused__)) int dummy ) {
              exit(dummy);
          }
        ]], [[foo(1);]])],
      [ax_cv___attribute__unused_arg=yes],
      [ax_cv___attribute__unused_arg=no]
    )
    AC_LANG_WERROR([off])
  ])
  if test "$ax_cv___attribute__unused_arg" = "yes"; then
    AC_DEFINE(AS_TR_CPP(HAVE___ATTRIBUTE__UNUSED_ARG), 1, [define if your compiler has __attribute__ unused at argment of functions])
    m4_ifval([$1],[$1])dnl
    m4_ifval([$2],[else
    $2
    ])dnl
  fi
])

AC_DEFUN([CHECK___ATTRIBUTE__DEPRECATED], [
  AC_CACHE_CHECK([for __attribute__ deprecated], [ax_cv___attribute__deprecated],
    [
    AC_LANG_WERROR([on])
    AC_COMPILE_IFELSE(
      [AC_LANG_PROGRAM(
        [[#include 
          static void foo(void) __attribute__ ((deprecated)) __attribute__ ((unused));
          static void
          foo(void) {
              exit(1);
          }
        ]], [])],
      [ax_cv___attribute__deprecated=yes],
      [ax_cv___attribute__deprecated=no]
    )
    AC_LANG_WERROR([off])
  ])
  if test "$ax_cv___attribute__deprecated" = "yes"; then
    AC_DEFINE([HAVE___ATTRIBUTE__DEPRECATED], 1, [define if your compiler has __attribute__ deprecated])
    m4_ifval([$1],[$1])dnl
    m4_ifval([$2],[else
    $2
    ])dnl
  fi
])


if test x$ax_cv___attribute__ = xyes; then
CHECK___ATTRIBUTE__(constructor,,[AC_DEFINE([__constructor__],,[no __constructor__])])
CHECK___ATTRIBUTE__(destructor,,[AC_DEFINE([__destructor__],,[no __destructor__])])
CHECK___ATTRIBUTE__(noinline,,[AC_DEFINE([__noinline__],,[no __noinline__])])
CHECK___ATTRIBUTE__(noreturn,,[AC_DEFINE([__noreturn__],,[no __noreturn__])])
CHECK___ATTRIBUTE__(unused)
CHECK___ATTRIBUTE__UNUSED_ARG
CHECK___ATTRIBUTE__DEPRECATED
CHECK___ATTRIBUTE__(bounded,,[AC_DEFINE([__bounded__(a,b,c)],,[no __bounded__])])
fi
こんな感じかなぁ?。 AC_LANG_WERROR しているので、ウォーニングは全部潰しておかないといけない。 なので、 __attribute__((__deprecated__)) 以外は、 ダミーの呼び出しをかけている。 __attribute__((__deprecated__)) は呼び出しをかけてしまうと駄目なので、 __attribute__((__unused__)) を付けている……、 でも __unused__ が使えなかったりするとこけるのだよね。

Sun,04 May,2008

攻殻機動隊 1.5 (円盤付きの方)¥550-、 攻殻機動隊 1.5 (紙メディア初回限定版) ¥550-。

Mon,05 May,2008

PD6 ¥5229-。
3月下旬の MOドライブ、無かった。
GUNDAM X SIDE.1 〜 3 各2枚ずつあって 土曜日午前中タイムセール¥750- だったらしい。

Tue,06 May,2008

PD1 無し、PD2CV 無し、APD2 無し、 PD3 無し、PD4 無し、 PD5 無し、PD5X 無し、 PD5plusX ¥5,980-、 PD6 無し。 ブルーフロウ 無し、ブルフロ ファンディスク 無し、 ブルーブラスター ¥2,180- で2本、ブルブラ ファンディスク 無し。 ガジェットトライアル 無し。 火星計画2 無し、火星計画3 無し

Fri,09 May,2008

車両故障の為、運休。 運転再開後は1時間遅れ。
モンゴル語は縦書きしかないらしい。 横書きは存在しないらしい。

Sun,11 May,2008

I18N GearHeadSun,27 Apr,2008の続き。 バグ修正や機能追加も出尽くしたと思う。 様子見中。 不本意ながら Wed,18 Mar,2009に続いた。
FreeBSD 6.3-RELEASE on Let'snote CF-Y5 で、 カーネルフリーズが頻発する件、 Thu,10 Jan,2008Sun,17 Feb,2008Sat,01 Mar,2008Wed,02 Apr,2008の続き。 SMPを切ってから約6週間、今日初めて同じ症状で落ちた。 どうやら、SMPを切れば発生率は大幅に落ちるらしいが、 それでも完全解決とはいかないらしい。 今日の作業で怪しい所といったら……、 Wine で MS-Windows用のソフトのデバッグをしていた事か。 user_ldt がからむと発生率が上がるとか?。
↑ 取り敢えず、 根拠は無いけど熱暴走を疑って、 最高クロックをメーカー既定値の 1.667GHz から、 1.458GHz に落としてみた。 Tue,30 Sep,2008に続く。

Mon,12 May,2008

CLK_TCK は obsolate で CLOCKS_PER_SEC を使うらしい。
BSD系では PRId32 が使えるのに、 GNU/Linux で PRId32 が使えないと思ったら、 GNU/Linux だと __STDC_FORMAT_MACROS を define しないと 使えないらしい。 __STDC_FORMAT_MACROS が正式な規格に載るか否かはまだ未定らしい。
↑ UINT16_MAX とか使う場合は __STDC_LIMIT_MACROS らしい。
pthread_t が、 BSD系だと実体はポインタ型なのだが、 Solaris とか GNU/Linux の様な SysV系だと実体は整数型らしい。 両方に対応したダミーの初期設定をするには、 static_cast<pthread_t>(NULL) する。 Wed,20 Aug,2008に続く。
sig_atomic_t。 BSD系だと普通に使えるのに、 GNU/Linux だと使えたり使えなかったりする。 g++ -E して判明。 GNU/Linux だと #include <signal.h> の前に #include <pthread.h> すると sig_atomic_t が typedef されない様になっていた。 理由は不明。
BSD系だと INFTIM が定義されているが、 GNU/Linux だと未定義。
GNU/Linux で clock_gettime() が使えないと思ったら、 libc とか libstdc++ とかではなくて、librt らしい。
time_t は、BSD系でも GNU/Linux系でも、 i386系だと int32_t で amd64系だと int64_t らしい。 でも PRItime とかなんとかいう物は無いんだよね。 tv_usec と tv_nsec は、両方共 int32_t っぽい。

Tue,13 May,2008

FreeBSD の Xorg で USBキーボード。 起動前に挿しておかないと、認識してくれないんですが。 ちょっと不便。 それともどこかで設定を間違えた?。
sched_getscheduler()。 FreeBSD で、通常のスケジューリングモードだと、返値は不定らしい?。
pthread_attr_setschedparam()。 FreeBSD だと、 一般ユーザでもスレッドに対して 任意のスケジューリングモードとレベルを指定できるらしい、 但しプロセスのスケジューリングモードとレベルを上げる場合は特権が必要。 GNU/Linux だと、 スレッドでもプロセスでも、 スケジューリングモードとレベルを上げる場合は特権が必要らしい……、 まぁ GNU/Linux にはその意味でのスレッドが無いけれど。

Wed,14 May,2008

CORBA。 omniORB のサーバ側 impl で CORBA::BAD_PARAM が throw() される。 ……。 シーケンス型の配列の添字が、配列の要素数を越えているだけだった(泣。 ここの所、Pascal をいじっていた物だから、 C++ の配列でも添字を 1 始まり 1+n まで、 にしているバグに気付かなかった。
size_t や ssize_t の *printf() 指定子?は %zu や %zd らしい。
配列の添字の指定に使う変数は、 size_t だろうか?、int だろうか?、unsigned int だろうか?。
↑ omniORB だと operator[](_CORBA_ULong) だったので、 _CORBA_ULong を使うのが、一応は正しいのだろうけれど。
Google ウェブマスターツール。 修正要求や巡回要求を出してから実際に反映されるまで、 早い場合は数日だけれども、平均的には1週間以上かかるらしい。

Fri,16 May,2008

FreePascal。
Error: Incompatible types: got "SYSTEM.Word" expected "SYSTEM.Word"
とか出る。 同じにしか見えないのですが……。
FreePascal。 FreeBSD/amd64 上で ppc386 -TLinux とかやったら、 クロスコンパイルまではできた。 でも、リンクが通らない。 手動で i386-linux-ld したら、
undefined reference to `atexit'
とか出た……、 ライブラリが FedoraCore4系 BSD/Linux 2.4.2 の物と Vine 3.2 GNU/Linux 2.4.xx の物が 混じっていただけだった。
FreePascal。 FreeBSD/amd64 上で ppc386 -Twin32 とかやったら、 クロスコンパイルにリンクまで通って、exe ファイルができあがった。 でも実行する手段が無くて動作確認できなかった。
Wine。 今までずっと、日本語が文字化けする理由が判らなかった。 ようやく判明。 ずっと英語フォントだけを使っている状態だったらしい。 そりゃ駄目だわ……。 ~/.wine/drive_c/windows/fonts/ に日本語フォントを入れて、 .wine/config 日本語フォントへの replacement を書けば、 日本語で表示されるようになった。
FreePascal。 各unit の initialization で 初期データの読み込みやら設定やらを行なっているのだが、 各unit の initialization間で依存関係がある場合、 処理順序はコンパイル時に決定されるものの、 正しい順序で処理されるとは限らないらしい。 マニュアルには「uses での記述順に処理される」と書いてあるが、 実際には uses の並び順を変えても変わらなかった。 困ったな。
↑ Sat,24 May,2008 追記: uses で最後に記述した unit の initialization が最初に処理され、 uses で最初に記述した unit の initialization が最後に処理される、 と考えるとつじつまが合う事に気付いた。 はて?。
↑ Mon,14 Jul,2008 追記: 複雑な依存関係 (同じサブユニットを使っているのにユニット毎に uses の順番が違うとか、 ユニット毎にサブユニットの重複が有ったり無かったりとか)の無い、 単純な木構造となるユニットで試してみた。 メインとなる *.pas の uses で記述される最初のユニットから順番に、 interface, implementation 問わず uses の ネストの深い方から順番に、 処理されていた。 initialization は、 unit1_int1_int1, unit1_int1_int2, unit1_int1_imp1, unit1_int1_imp2, unit1_int1, unit1_imp1_int1, unit1_imp1_int2, unit1_imp1_imp1, unit1_imp1_imp2, unit1_imp1, unit1_int2_int1, unit1_int2_int2, unit1_int2_imp1, unit1_int2_imp2, unit1_int2, unit1_imp2_int1, unit1_imp2_int2, unit1_imp2_imp1, unit1_imp2_imp2, unit1_imp2, unit1, unit2_int1_int1, unit2_int1_int2, unit2_int1_imp1, unit2_int1_imp2, unit2_int1, unit2_imp1_int1, unit2_imp1_int2, unit2_imp1_imp1, unit2_imp1_imp2, unit2_imp1, unit2_int2_int1, unit2_int2_int2, unit2_int2_imp1, unit2_int2_imp2, unit2_int2, unit2_imp2_int1, unit2_imp2_int2, unit2_imp2_imp1, unit2_imp2_imp2, unit2_imp2, unit2, main.pas の順番。 finalization はその逆。
FIFO型 pipe のバッファ。 バッファが一杯になれば、 pipe に向かって write() した時に -1 の EAGAIN が返ってくる。 ここまでは当然なので問題無い。 FreeBSD の場合は、 EAGAIN が返ってきた時に write() したいサイズ分だけ read() してやれば、 write() できる様になった。 ところが、GNU/Linux の場合は、 write() したいサイズ分だけ read() しても、 write() するとまた -1 の EAGAIN が返ってきて、書き込めない。
↑ 試した感じでは GNU/Linux の pipe のバッファサイズは 64KiB 弱らしい。 …… pipe(7) に書いてあるね、 2.6.11 より前は 4KiB で以降は 64KiB だそうで。
↑*2 pipe(7) に、書き込むサイズが PIPE_BUF 以下か上かで挙動が違う、 と言う主旨の事が書いてあったので、 write() で EAGAIN が返ってきた時に、 パイプの空き容量を PIPE_BUF-1 確保してから再度 write() する場合と、 パイプの空き容量を PIPE_BUF 確保した場合で、 比べてみた。 PIPE_BUF-1 の場合は再び EAGAIN だったが、 PIPE_BUF の場合はちゃんと書き込めた。 書き込めた後は、 再び 64KiB のバッファが溢れる様な write() 要求を出すまでは、 普通に write() できた。 で、溢れる様な write() をした時点で EAGAIN が出て、 それ以降は、空き容量を PIPE_BUF 以上確保するまで EAGAIN が出続けた。 ヒステリシスバッファかよ……。

Sat,17 May,2008

工画堂。 PD2 Complete Box って……、しかも1万円弱って……。 PD5 online って、 それだったら 5+5X の方が良い様な……、 5+5X の 5X には、本家では未修正のバグがあるけれど。

Sun,18 May,2008

MACROSS PLUS Cream P.U.F. ¥750-。

Mon,19 May,2008

5ボタンで 800dpi 以上で光学式で三千円未満の物。 Gigabyte GM-M6800 ¥2,480- USB, 800/1600dpi 上下ホイール, 3+2ボタン, 光学式(垂直照射)。
A4Tech X-710FS ¥1,980- USB, 400/800/1200/1600/2000dpi 上下ホイール, 3+2ボタン+3点バーストボタン, 光学式, DPIは順送り選択 LED色で表示。
バッファローコクヨサプライ BSMLU02LWH ¥1,980- USB 1600/800dpi 上下ホイール, 3+2ボタン, レーザー式, DPI切り替えは左右ボタン両押し。
DPI切り替えとボタンが共用だと、押し間違いが嫌なので却下、 それに左右両押しは第3ボタンエミュレートだから駄目。 ボタン押しで DPI順送り切り替えだと、 目的の DPIを選ぶのが大変だから嫌。 GM-M6800 はコストパフォーマンスが……。
↑ どうやら、アクロス AMS-SS/SW/SB ¥980-が、 値段と性能のバランスで最高だったらしい。 50cm 落としただけで割れるようなちゃちな作りだし、 位置センサがマウスの中心に無いとか言うトンデモだけれど。

Tue,20 May,2008

Unix系 OS の高級言語で周期割り込み。 BSD系だと setitimer があるけれども、しかも 4.2BSD からだし……、 でも POSIX には入っていないらしい。 POSIX だと timer_create/timer_delete/timer_settime/timer_gettime/timer_getoverrun らしい。 でも FreeBSD 6系や OpenBSD では未実装だし、 linux.or.jp/JM にも載っていない。 FreeBSD のソースを追いかけてみた所、 FreeBSD 7系では実装されているっぽい。 GNU/Linux も 2.4付近から使えるらしい。
↑ setitimer() は、時々、シグナルが来なくなるのだよなぁ……。 オーバーランしたからなのかどうなのかは不明だが。

Wed,21 May,2008

FreeBSD/amd64 で i386互換モードバイナリの話、 Thr,07 Jul,2005Fri,08 Jul,2005Tue,04 Mar,2008の続き。 Fri,07 Mar,2008Thu,06 Mar,2008に関連。
FreeBSD/i386 と、FreeBSD/amd64 の WITH_LIB32 な -m32 モードで、 コンパイルして出来上がったファイルのサイズが違う。 で、追いかけてみると、ファイルサイズの違いは、 FreeBSD/i386 上の /usr/lib/* と、FreeBSD/amd64 上の /usr/lib32/* の、 ファイルのサイズの違いに由来していた。 で、更に何故違うのか追いかけてみた。 FreeBSD/amd64 上の /usr/lib32 は LIB32CPUTYPE=k8 でビルドされているが、 FreeBSD/i386 上の /usr/lib は CPUTYPE=i386 でビルドされていて、 i386 と k8 の最適化の違いに由来していた。
↑ FreeBSD/amd64 上の /usr/lib32 を使って、 他のマシン用でも動かすバイナリを作る場合、 lib32 を作成する前に、 /etc/make.conf で TARGET_CPUTYPE=i386 とか TARGET_CPUTYPE=pentium-mmx とかしておいた方が安全かもしれない。
マクロスキャノンの日本語訳は重力子反応砲だったのか。
マクロス7の「BGMは流さない」ルールは有効なのだろうか?。 今の所、ラジオをつけると曲が流れたり、大道芸で歌っていたり、 コンサートで曲が流れたりで、BGMはまだ無い様な気がする。
VF-25 メサイア のプラモ出るのか……。 ノーマルで¥4,200-って……。 スーパー、フルアーマー、スナイパー、電子戦、で、4パターン出されると、 @6,000*4 = ¥24,000- とかなりそうで怖いな。 バンダイは、 V2 GUNDAM で アサルト,バスター,別パターンで本体付きセット販売、 GUNDAM X で ノーマル,ハモニカ砲のやつ,別パターンで本体付きセット販売とか DX武器セット付きとGファルコン付きが別のセット販売、 と、実際にやったからなぁ。
FreeBSD で 特定のスレッドだけで pthread_attr_setscope( , PTHREAD_SCOPE_SYSTEM ) すると、 そのスレッドに pthread_kill() した時に、 他のスレッド(兄弟スレッド)にもシグナルがコピーされた。 pthread_attr_setscope( , PTHREAD_SCOPE_PROCESS ) だとコピーされなかった。 ……よくわからん動作だ。
↑ FreeBSD 5以降では、 1:1 スレッディングと M:N スレッディングの両対応になり、 デフォルト状態や PTHREAD_SCOPE_PROCESS 指定した場合は M:N、 PTHREAD_SCOPE_SYSTEM 指定した場合は 1:1、 と、切り替わるらしい。 で、/usr/src/lib/libpthread/thread 見たら、 scope のモードによって、シグナルの配送処理の方法も変えていた。 仕様通りらしい。
↑ 環境変数 LIBPTHREAD_SYSTEM_SCOPE を設定すると、 1:1 スレッディングがデフォルトになるらしい。 環境変数 LIBPTHREAD_PROCESS_SCOPE を設定すると、 M:N スレッディングがデフォルトになるらしい。
↑ man によると、 libthr が 1:1 専用、 libpthread が M:N 用(実際は前述の通り 1:1 モードもある)、 libc_r は libc のリエントラント版、 だそうで。 FreeBSD 2〜3 は libc_r だっけ?、 FreeBSD 4 は忘れた、 FreeBSD 5〜6 は libpthread がデフォルト、 FreeBSD 7 からは libthr がデフォルト、 らしい。

Thu,22 May,2008

sched_setscheduler() とか pthread_setschedparam() に相当する処理を コマンドラインから実行するには、 BSD系だと rtprio とか idprio だが、 GNU/Linux系だと chrt らしい…… linux JM には載っていない。 あと taskset とか言う物もあるらしい。 …… schedutils パッケージを入れると、chrt と taskset が使えるらしい……、 そりゃ linux JM には載らんわ。
GNU/Linux で ucom……じゃなくて Linux だと usbserial か。 今までどうやっても、初回の write() が失敗していたが、 ようやく対処法がわかった。 write() した後に一旦 CPU を手放さないと実際の送信が行われず、 read() しても永遠に応答無しになっている、 と言う事らしい。 write() の後に sleep(1) か nanosleep() を入れたら、 read() で応答が得られた。 sleep(0) とか pthread_testcancel() では駄目だった。 *BSD では何もせずに write() だけで送れたのだけれどな……、 そのかわり、USB の周期が過ぎるまでブロックされたけれど。

Fri,23 May,2008

MJ12bot を偽装して、 スパムメール送信用のメールアドレスを収集するクローラ MJ12bot/v1.0.8 が来ていた。 毎秒6アクセスしよる。 延々違う URL になりつつ無限ループしているページを食らわせたら、 1時間して諦めて去った。
↑ もう1件、 ボットネットの様にも見えるアドレスから、 スパムメール送信用のメールアドレスを収集するクローラが来ていた。 月頭に1度、2日間連続して、の周期。 1アクセス毎にユーザエージェントを変更し、 アドレスも毎日1回変わっていた。 初回の初日は2時間で諦めて去った。 初回の2日目は3時間で諦めて去った。 翌月は12時間で諦めて去った。 ……、調べてみたら、初回のユーザエージェントは
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1
の3パターンだけだった。途中で切れているし。 翌月は
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET)
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
に増えていた。
DNS/tcp に、必ず送出元ポートが 6000 なアタックが周期的に来ている。 S に対して S+A を返すと R が来て止まる。 2〜4週間に1度、3〜4日間連続して、1日1回、の周期。
あれ、GNU/Linux って、 owner uid が非0 なファイルやディレクトリに関して、 g や o にパーミションが無いと、 root もアクセスできない?。
今まで問題なく動いていたプログラムを、 スケジューリングモードを SCHED_FIFO にしたら、 いきなりフリーズした。しかもカーネルごと。 原因は
volatile bool condition;

bool Function( 省略 )
{
	(省略)
	condition = false;
	while (!condition)
		;
	(省略)
}

	別スレッドで condition に true を代入。
だった。 通常の SCHED_OTHER だと、 while(); でも強制切り替えが入るけれど、 SCHED_FIFO だと強制切り替えが入らないので。
	condition = false;
	timespec tmp_ts = { 0, 1*1000000L };
	while (!condition) {
		nanosleep( &tmp_ts, NULL );
	}
こんなんでいいのかな。 そもそも pthread_condwait() 使えって話が。
途中駅混雑の為、4分遅れ。
人身事故と途中駅混雑の為、4〜14分遅れ。

Sun,25 May,2008

一撃殺虫ホイホイさん 通常版 ¥300-。

Tue,27 May,2008

Debian GNU/Linux。 init.d から起動される ntpd のオプションを変更する方法が無いって、 どういうことよ。

Wed,28 May,2008

UTF-8 なメール。 Subject が UTF-8 を元にエンコーディングしているのは問題無いのだが、 本文が UTF-8 でベタに書かれたメールが来た。 ヘッダからすると、 Ximian Evolution 改め Novell Evolution とか言うメーラーらしい。 このメーラーの作者は RFC を読んどらんのか……。
UTF-7 なメールは、正式に通っていたらしい。RFC2152。
CUI なバイナリエディタ。
beav, bed, biew, bvi, fb, hexcurse, hexedit, hexpert, le。
beav は emacs なキー操作なので、vi派の私には使いにくい。
bvi は vi なキー操作だが、 うっかり vim なキー操作をして弾かれてしまうので、逆に使いにくかったり。
fb は……何と言うか、ed ライク。
le はファンクションキーとメニューベースの独自キー操作。
置換でファイルサイズを縮小した時に無限ループになるバグがあるのって、 どれだっけ?。
bed は IGNORE & 廃止 になってる……、 ファンクションキーとメニューベースの独自キー操作だったと思う。
biew はそもそもビューワーであってエディタでは無いらしい。 逆アセンブル機能まであるらしい。 ファンクションキーとメニューベースの独自キー操作。
hexcurse, hexedit, hexpert は、どれも置換機能が無かったので却下。
/etc/malloc.conf の効果。 Sat,01 Mar,2008の続き。 Thu,29 May,2008Fri,30 May,2008に続く。 Tue,04 Mar,2008Sat,31 May,2008に関連。
FreeBSD/amd64 の場合。

% env MALLOC_OPTIONS=jz ./malloc_conf_test
malloc() 直後   0x511050: 00 00  - 00 00
	ここで、確保した領域を 0x31 で埋める
free() 直後     0x511050: 31 31  - 31 31
new 直後        0x511050: 31 31  - 31 31
	ここで、確保した領域を 0x32 で埋める
delete 直後     0x511050: 32 32  - 32 32
new[] 直後      0x511050: 32 32  - 32 32
	ここで、確保した領域を 0x33 で埋める
delete[] 直後   0x511050: 33 33  - 33 33

% env MALLOC_OPTIONS=JZ ./malloc_conf_test
malloc():       0x511050: 00 00  - 00 00
free():         0x511050: D0 D0  - D0 D0
new:            0x511050: 00 00  - 00 00
delete:         0x511050: D0 D0  - D0 D0
new[]:          0x511050: 00 00  - 00 00
delete[]:       0x511050: D0 D0  - D0 D0

% env MALLOC_OPTIONS=Jz ./malloc_conf_test
malloc():       0x511050: D0 D0  - D0 D0
free():         0x511050: D0 D0  - D0 D0
new:            0x511050: D0 D0  - D0 D0
delete:         0x511050: D0 D0  - D0 D0
new[]:          0x511050: D0 D0  - D0 D0
delete[]:       0x511050: D0 D0  - D0 D0

ちゃんと効いています。
割り当てるメモリは、再利用しまくりです。
OpenBSD/i386 の場合。

% env MALLOC_OPTIONS=jz ./malloc_test
malloc():       0x83787010: 00 00  - 00 00
free():         0x83787010: 31 31  - 31 31
new:            0x83787020: 00 00  - 00 00
delete:         0x83787020: 32 32  - 32 32
new[]:          0x83787030: 00 00  - 00 00
delete[]:       0x83787030: 33 33  - 33 33

% env MALLOC_OPTIONS=jZ ./malloc_test
malloc():       0x87722010: 00 00  - 00 00
free():         0x87722010: 31 31  - 31 31
new:            0x87722020: 00 00  - 00 00
delete:         0x87722020: 32 32  - 32 32
new[]:          0x87722030: 00 00  - 00 00
delete[]:       0x87722030: 33 33  - 33 33

% env MALLOC_OPTIONS=Jz ./malloc_test
malloc():       0x89dde010: D0 D0  - D0 D0
free():         0x89dde010: 31 31  - 31 31
new:            0x89dde020: D0 D0  - D0 D0
delete:         0x89dde020: 32 32  - 32 32
new[]:          0x89dde030: D0 D0  - D0 D0
delete[]:       0x89dde030: 33 33  - 33 33

% env MALLOC_OPTIONS=JZ ./malloc_test
malloc():       0x7f792010: 00 00  - 00 00
free():         0x7f792010: 31 31  - 31 31
new:            0x7f792020: 00 00  - 00 00
delete:         0x7f792020: 32 32  - 32 32
new[]:          0x7f792030: 00 00  - 00 00
delete[]:       0x7f792030: 33 33  - 33 33

Z を付けようが付けまいが、ゼロクリアされている様に見えます。
man malloc(3) に書いてある通り、解放時の消去は行われません。
/etc/malloc.conf で G が付いていたので、割り当てられるアドレスは変化しまくりです。
Debian GNU/Linux な glibc-2.3.2 の場合。

% ./malloc_test
malloc():       0x804a050: 00 00  - 00 00
free():         0x804a050: 00 00  - 31 31
new:            0x804a050: 00 00  - 31 31
delete:         0x804a050: 00 00  - 32 32
new[]:          0x804a050: 00 00  - 32 32
delete[]:       0x804a050: 00 00  - 33 33

% env MALLOC_CHECK_=3 ./malloc_test
malloc: using debugging hooks
malloc():       0x804a050: 00 00  - 00 00
free():         0x804a050: 00 00  - 31 31
new:            0x804a050: 00 00  - 31 31
delete:         0x804a050: 00 00  - 32 32
new[]:          0x804a050: 00 00  - 32 32
delete[]:       0x804a050: 00 00  - 33 33

……謎な挙動だ。
解放時に先頭8バイトが消えているが、これは、前後の未使用領域への相対ポインタ、らしい。

デバッガで si してみた要約。

0x40186ed3 in malloc () from /lib/libc.so.6
0x40185790 in malloc_hook_ini () from /lib/libc.so.6
0x40184da0 in ptmalloc_init () from /lib/libc.so.6
0x40184cb0 in ptmalloc_init_minimal () from /lib/libc.so.6
0x401e6da0 in getpagesize () from /lib/libc.so.6
0x401f9ea0 in __register_atfork () from /lib/libc.so.6
0x4012b90c in ?? () from /lib/libc.so.6
0x40187c80 in _int_malloc () from /lib/libc.so.6
0x40188480 in malloc_consolidate () from /lib/libc.so.6
0x40184780 in malloc_init_state () from /lib/libc.so.6
0x40187fed in _int_malloc () from /lib/libc.so.6
0x401867e0 in sYSMALLOc () from /lib/libc.so.6
0x401893f0 in __default_morecore () from /lib/libc.so.6
0x401e6560 in sbrk () from /lib/libc.so.6
0x401e6510 in brk () from /lib/libc.so.6

0x40187060 in free () from /lib/libc.so.6
0x40188260 in _int_free () from /lib/libc.so.6


0x400bdb70 in operator new () from /usr/lib/libstdc++.so.6
0x40186ea0 in malloc () from /lib/libc.so.6
0x40187c80 in _int_malloc () from /lib/libc.so.6

0x400bc660 in operator delete () from /usr/lib/libstdc++.so.6
0x40187060 in free () from /lib/libc.so.6
0x40188260 in _int_free () from /lib/libc.so.6


0x400bdcc0 in operator new[] () from /usr/lib/libstdc++.so.6
0x400bdb70 in operator new () from /usr/lib/libstdc++.so.6
0x40186ea0 in malloc () from /lib/libc.so.6
0x40187c80 in _int_malloc () from /lib/libc.so.6

0x400bc6c0 in operator delete[] () from /usr/lib/libstdc++.so.6
0x400bc660 in operator delete () from /usr/lib/libstdc++.so.6
0x40187060 in free () from /lib/libc.so.6
0x40188260 in _int_free () from /lib/libc.so.6

libc の _int_malloc() と _int_free() をいじってやれば、BSD系な J とか Z が実装できるかな……、
mmap した場合の free() は _int_free() に来ない構造だった。
MALLOC_TRACE だと、brk()系の時は処理されないので駄目。

確保時は malloc.c:_int_malloc() でいいらしい。
解放時は menusage.c:munmap() と malloc.c:_int_free() の2つらしい。
……。
malloc.c から #include<arena.c> かよ。
……。
strace してみたら、
そもそも free()/delete/delete[] しない行儀の悪いプログラムだと、_int_free()/munmap() が呼ばれていなかった。
駄目じゃん。
↑ 結論: まともに free()/delete/delete[] していない駄目ソフトだと、 malloc.conf 指定しても解放時にゼロクリアされないし、 _int_free() を改造してもゼロクリアできない、 突き詰めるとカーネルの munmap() でゼロクリアする様にしないと駄目。 malloc.conf 指定しなかったり GNU/Linux な glibc の場合でも、 malloc()用バッファを mmap で確保する時に /dev/zero で mmap() するので、 大元の1回だけはゼロクリアされている筈、 OpenBSD や FreeBSD で Z 無しでも 確保メモリがゼロクリアされている様に見えるのはこの為。 Z や J を付けた場合と否では、メモリを共有している全プロセスが、 メモリを使いまわす時にゼロクリアされるかされないかの違い。
↑ GNU/Linux だと、 mm/mmap.c の do_munmap() から detach_vmas_to_be_unmapped() を呼び出す辺りで、 ゼロクリアすれば良いのだろうけれど。 そもそも munmap() したメモリにアクセスするようなケースって、 既にセキュリティホールだろうし。 mmap() する時にはゼロクリアされるのだし。 メモリ使用中に他の非特権プロセスから覗かれる様なケースも、 既にセキュリティホールだろうし。 Linux だと、その辺のセキュリティホールが何度か出ているけれど。
↑*2,*1 それはともかくも、 確保したメモリを初期化していないのに 初期化したつもりでアクセスしてしまう様なバグや、 解放したメモリに再アクセスしてしまう様なバグを見つけるのには、 やっぱり便利なんだよね。
↑*4 GNU/Linux な glibc の場合、確保/解放するメモリが 約129.1KiB 以上の場合、 mmap()/munmap() になった……、 プログラム起動時等に別件で確保した分が 128KiB に加わっているらしい。 OpenBSD の場合、確保/解放するメモリが 2KiB より大きい場合、 mmap()/munmap() になった。 FreeBSD の場合、解放するメモリの大きさがなんであれ、 プロセスが終了するまで munmap() しないらしい…… GNU/Linux な glibc の MALLOC_TRIM_THRESHOLD_ -1 相当か……。
↑ MALLOC_OPTIONS の話は、明日に続く。
めも。 libc6 は普通のシェアードライブラリな glibc2。 libc6-dev は静的ライブラリな glibc2 とヘッダファイル。 libc6-dbg は -g -pg 付きの glibc2 で valgrind から Depends されている。 libc6-i686 は NPTL専用かつ多分 -mtune-i686 付きの glibc2。 と言うわけで、普通の開発環境ならば libc6 と libc6-dev と libc6-dbg の 3つの libc6 が入っていて問題無い。

Thu,29 May,2008

なんか、ルービックマジックが日本で再販売になるっぽい……、 2月にされたらしい。 と言う訳で各種入手経路別価格一覧。
				本家値段	$1=¥110換算	再販版定価	量販店Y	量販店B	量販店T	量販店D
Rubik's Mini Cube	2×2	$6.99-		¥769-		¥1,260-	¥880-(10%)	¥880-(10%)	¥999-		なし
Rubik's Classic Cube	3×3	$11.99-	¥1,319-	¥2,079-	¥1,660-(10%)	¥1,450-(13%)	¥1,299-	¥1,480-
Rubik's Revenge Cube	4×4	$20.99-	¥2,309-	¥2,940-	¥2,050-(10%)	¥2,050-(10%)	¥2,299-	¥2,480-
Rubik's Professor Cube	5×5	$30.99-	¥3,409-	¥3,675-	¥2,680-(10%)	¥2,570-(10%)	¥2,999-	なし
Rubik's Magic Puzzle	4×2	販売終了?	販売終了?	¥2,079-	¥1,660-(10%)	¥1,450-(10%)	¥1,799-	なし
Rubik's Magic Puzzle	6×2	$9.99-		¥1,099-	なし		なし		なし       	なし		なし

送料は不明。全く関係無い別の海外直販の時は千円くらいだった。
4×2の日本名は「リンク ザ リング」らしい。
6×2の日本名は「アンリンク ザ リングス」で通称は「マスターマジック」らしい。
あれ、日本再販版って、4×2だけなんですが。 6×2は再販無し?。 ……。 web で検索してみたら、4×2を二個一にして自作している人達がいる……、 がしかし、実物をいじった事が無いので、 あの説明だと糸の掛け方がよく判らない……。 日本版で三個二にすると1つ約¥2,500-が2つできあがり、 通販だと送料千円の仮定で1つ約¥2,100-で 2つだと1つあたり約¥1,600-、 ……。 実際送料っていくらなのよ?。
GNU/Linux でシェルスクリプトを動かすと、 bash 上で動くから、定義済み環境変数が微妙に違って嫌。
Celeron M 1.5GHz で libc6-glibc-2.3.2.ds1-22sarge6 の 再構築をやってみたら、2時間〜3時間かかった。 ディスクの消費量は約2GB。 環境変数 CFLAGS とか CXXFLAGS とかその辺が設定されていると、多分こける。
% sudo apt-get build-dep libc6
% mkdir ~/build/libc6
% cd ~/build/libc6
% apt-get source libc6
% cd glibc-2.3.2.ds1
% dpkg-buildpackage -us -uc -b -rfakeroot -nc
log-test-i386-libc で timezone/tst-timezone と posix/annexc が、 log-test-i486-nptl で timezone/tst-timezone と posix/annexc と nptl/tst-cancel17 と nptl/tst-clock2 と nptl/tst-cancelx17 が、 log-test-i686-linux-i686 で iconvdata/bug-iconv3 と timezone/tst-timezone と posix/annexc と rt/tst-clock_nanosleep が、 エラー出ている。よくわからん。
debian/
build-tree/
build-tree/glibc-2.3.2
build-tree/i386-i686
build-tree/i386-libc
build-tree/i386-nptl
stamp-dir/
ふと気づくと、 glibc-doc, libc6-dbg, libc6-dev, libc6-i686, libc6-pic, libc6-prof, libc6-udeb, libc6, libnss-dns-udeb, libnss-files-udeb, locales, nscd と、片っ端から作られていた……。 dpatch-edit-patch hogehoge してみた。 作業ディレクトリ全部消しやがった……。
MALLOC_OPTIONS の続き。 GNU/Linux な glibc に FreeBSD な MALLOC_OPTIONS を付けてみるパッチ

Fri,30 May,2008

↑ MALLOC_OPTIONS の続き。 で、さっそく。 glibc の calloc() が、 malloc() で得たメモリが chunk_is_mmapped() なら(mmap で割り当てられたなら) 0x00 でクリアされている事を前提にしている仕様を発見。 glibc内から glibc内の malloc() を使っているケースだから、 malloc() したメモリがゼロクリアされている事を前提にしても、 問題ではなく「正当な」仕様だし……。 これ解決するのに4日かかった……。 ちかれた……。
↑ Wed,04 Jun,2008 追記: MALLOC_OPTIONS の続きの続き。 さらに、 glibc の calloc() が、 malloc() で得たメモリが !chunk_is_mmapped() でも(sbrk で割り当てられた場合でも)、 それが今回の malloc() で拡張された領域ならば、 0x00 でクリアされている事を前提にしている仕様を発見。 brk() のメモリがゼロクリアされる事って保障されていたっけ?。 これ解決するのにさらに3日かかった……。 もういや……。
アマネカ。 大方の予想通り、発売日当日にパッチが出た。

Sat,31 May,2008

GNU/Linux な glibc2 の malloc()/new/new[] の sbrk() な chunk。 メモリを確保する時は、 システム(glibc)専用領域が 4バイト(32ビット系の場合)追加されて、 確保は 8バイト単位(32ビット系の場合)、 最低サイズは 16バイト(32ビット系の場合)。 例えば 12バイトを malloc() すると、16バイトの chunk が確保される。 この時、 確保した chunk の先頭アドレスが 0x80b0320 だとすると、 0x80b0320 から 4バイトは直前の chunk のユーザ利用領域、 0x80b0324 から 4バイトはその chunk のサイズと種別のビットが最下位 3ビット、 0x80b0328 から 12バイトがユーザ利用領域、 0x80b0330 が次の chunk の先頭アドレス、 0x80b0334 から 4バイトが次の chunk のサイズと種別のビット。 ユーザ利用領域の最後 4バイトが、次の chunk の領域と重なっている。 なんで領域を重ねているかと言うと、 chunk をユーザが使用している時はユーザの領域として使い、 ユーザが chunk を解放してシステム(glibc)でプールしている時は 前の chunk のサイズを格納するのに使う、 と言う様に使いまわしてケチっている為らしい。 さらに、ユーザ未使用でプールしている時は、ユーザ領域の先頭 8バイトに、 前と次の chunk へのポインタを格納している。
↑ mmap() な chunk の場合。 20バイト余計に必要らしい。 chunk の先頭の 4バイト(32ビット系の場合)を、システムで使う。 あとは同じ。 ……12バイトはどこへ消えた?。

Mon,02 Jun,2008

各種計算機のベンチマーク結果 を更新。 CeleronM で、何でこんなハイスコアが出たのか、全く不明。

Tue,03 Jun,2008

gcc のアーキテクチャ指定。 gcc-3.3 だと Pentium-M が無い。 man とソースを見た感じでは、 -mtune=pentium3 -msse2 とか -march=pentium3 -msse2 になると思う、たぶん……、 でも PTA_SSE2 と -msse2 の違いが判らないし、 PROCESSOR_PENTIUMPRO と PROCESSOR_PENTIUM4 の違いも判らない……。 -mtune だと 80386 でも動く筈のコードを出力し、 -march だと 80386 では動かないかもしれないコードを出力する。 あと、IA-32互換の Athlon だと SSE2 が動かない。 k8 Athlon64 から SSE2 が使えるが、それだったら amd64 の方が。

Thu,05 Jun,2008

イーバンク銀行。 ソニー銀行対抗の定期預金キャンペーンは無いのかな?。 メモ:2008年3月末: 口座数:266万、 決済件数:2310万件/3ヶ月 → 一人1ヵ月当たり:2.9件、 預金残高:7602億円 → 一人当たり:28万6千円、 投信残高:408億円 → 一人当たり:1万5千円、 らしい。
イーバンクマネーカード、 Thu,04 Oct,2007の続き。 イーバンクマネーカード発行枚数が100万枚突破だそうだが、 口座開設者の約4割が保有している勘定になる。 発行開始から2ヶ月で50万枚(月25万枚)、 それから追加8ヶ月で追加50万枚(月6万枚)。 もの凄いペースの落ち方だ……。 ……、 データサンプルがたった4件(開始時に0なのは判っているから)しかない上に、 イーバンク銀行の金利や噂や顧客の気分など様々な不特定要因がある状態で、 内挿/外挿の推定をするのは正気の沙汰ではないが、あえてやってみる。 だいたい以下の感じ。
根拠の無い当てずっぽうのイタズラなので信用しない様に。

3次曲線補間による、内挿と外挿。

        確定値                                  新規口座開設を4万/月と仮定して
                パターン                        既開設者数のみを見た場合
                その1  その2  その3  その4  その1  その2
開始時  0         0万     0万     0万     0万     0万     0万		2007年7月23日
1ヵ月  30万     30万    30万    30万    30万    26万    26万		2007年8月1日
2ヶ月  50万     50万    50万    50万    50万    42万    42万		2007年10月3日
半年    ?        85万    80万    80万    85万    55万    55万
10ヶ月  100万   100万   100万   100万   100万    60万    60万		2008年6月5日
1年    ?       105万   110万   110万   105万            65万
1年半  ?       110万   145万   130万   120万    65万    70万
2年    ?       110万   180万   150万   130万    70万    80万

最近5年の口座開設数は3〜5万/月。

「その1」よりも最終到達値が小さい場合、「解約」が発生してしまう。
「その2」よりも最終到達値が大きい場合、今後の発行ペースが今よりも大きくなってしまう。
「その4」あたりが、それっぽい曲線になる。
すなわち、口座開設者の(半分しか申し込まない|半分もが申し込む)勘定になる。
……、残りの半分は、敢えて申し込まないか、休眠口座か。
面倒だから/よく判らないから/要らないから、申し込まないと言う人は
それなりにいるだろうけれども、残り半分の全部がそうとは……。

ただまぁ、マネーカード発行開始後は、16歳以上の新規口座開設は強制でマネーカードになるらしいけれど。

新規口座開設を4万/月と仮定した場合、2007年7月下旬の既開設口座は 210〜220万口座くらい?(IRの開示情報を探せば、もっと正確な値が判るが、こんなバカネタで調べるのも面倒)。
申し込みをした人の数の半分くらいの数の人が、敢えて申し込まないと仮定しても、半数が休眠口座と言う勘定に。


休眠口座が半数と仮定すると、

決済件数:2310万件/3ヶ月 → 一人1ヵ月当たり:5.8件、
預金残高:7602億円 → 一人当たり:57万2千円、
投信残高:408億円 → 一人当たり:3万円、

最頻値よりも圧倒的に多くしている少数の人が、平均を引き上げているのだろうか?。それとも妥当な数値なのだろうか?。


根拠の無い当てずっぽうのイタズラなので信用しない様に。
模型屋が閉店していたらしい。しかも9ヶ月くらい前に。
そう言えば、2007年の暮頃から、 あちこちのコンビニやガソリンスタンドが更地になっていってるなぁ。

Fri,06 Jun,2008

Bourne Shell。 Debian だと、Bourne Shell コンパチシェルとして dash を使うのが一般的らしい?。
CeleronM なマシンに Debian GNU/Linux で acpi を有効にしてみたが、 thermal と cpu-freq が動かない。 ……、PentiumM は SpeedStep が使えるけれども、CeleronM は使えないらしい。
↑ uswsusp(initramfs-tools) を使ってみようとした。 無かった。 sarge では駄目で、etch かららしい。

Sat,07 Jun,2008

↑*2 acpi で shutdown -P しても、冷却ファンが止まらない。 ……、マザーボードに冷却ファンの調速/停止用の素子が無いらしい。
各種計算機のベンチマーク結果 に nbench を追加。 姫野ベンチでも nbench でも、x86(i386)用バイナリなら、 FreeBSD/i386 や FreeBSD/amd64 上の GNU/Linux/i386 エミュレーションであっても、 FreeBSD より GNU/Linux の方が速いらしい。 FreeBSD 上の Linux エミュレーションであっても、GNU/Linux の方が速いから、 カーネルの違いの影響は無いだろう。 コンパイラは FreeBSD は gcc-3.4 で GNU/Linux は gcc-3.3 だが、 3.3→3.4 では、そんな差は出ないと思う。 となると *BSD libc と GNU libc の違いか……?。 でも、どちらのベンチマークも、 コア部分では libc は使っていないと思うから、 残る差異は時間計測部分の libc 呼び出しと、 libc(libpthread?,libgcc?) のプロセス/スレッド制御部分の処理の違い、 ぐらいしか思いつかないけれど……。
MACROSS PLUS O.S.T. ¥1,000-。
ルービックマジックは売っていなかった。
別の店でもルービックマジックは売っていなかった。 ルービックキューブ¥1,480-、リベンジ¥2,480-。
MOP2-U640P USB接続 中古バルク ¥4,200-。 4000rpm 世代らしい。
MACROSS VO ¥1,580-。
中古ゲーム屋が1軒無くなっていた。 web で検索してみたら、 1年半前に閉店していた同じチェーンの店は先月に再開していたらしい。
GUNDAM X SIDE.1 〜 3 各¥1,250-。
攻殻機動隊 1.5 再販版の普通版¥900-。

Sun,08 Jun,2008

2GB の SDメモリ、各社¥980〜1,080-。
PD1 無し、PD2CV 無し、APD2 無し、 PD3 無し、PD4 無し、 PD5 無し、PD5X 無し、 PD5plusX ¥5,980-、 PD6 無し。 ブルーフロウ 無し、ブルフロ ファンディスク 無し、 ブルーブラスター ¥2,480-、ブルブラ ファンディスク 無し。 ガジェットトライアル 無し。 火星計画2 無し、火星計画3 無し。 アマネカは新品も中古も無かった。 ブルブラ値上げ。
PD5? ¥4,179? 、 ブルーフロウ ¥2,709- 、 ブルーブラスター ¥2,604-
ルービックマジックの構造解析のページ 、作成。

Mon,09 Jun,2008

5分〜15分の遅れ。理由は不明。

Wed,11 Jun,2008

マクロスF、サントラ1出ていたらしい。
工画堂、ブルーフロウ/ブルーブラスター/ファンディスク、 4本セットが出るとか何とか言う話が。 8日に珍しく店頭在庫が有るのを見た時に、 買おうか否か迷って結局買わなくて良かった……。 去年みたいに、 PD5 買った翌月に PD5plusX とか出たのは、泣けるからなぁ。 ……工画堂、大丈夫なのか。
Power DoLLS2 Complete BOX 定価:¥9,980-。 量販店S:¥8,280- ポイント83 で約8,197〜8,205、送料無料 → 無し(Fri,27 Jun,2008) → ¥8,280- 83p(Sat,28 Jun,2008)。 量販店B:¥9,480- ポイント948 で約8,532〜8,627、送料¥525-。 量販店Y:無し → ¥9,480- ポイント948 で約8,532〜8,627、送料¥500-(Fri,27 Jun,2008)。 量販店A:¥8,832- ポイント不明(17〜18?)、送料無料 → ¥9,032-(Sun,29 Jun,2008)。 オンラインショッピングモールRの量販店V:¥9,169- ポイント92? で約9,780〜9,087?、送料¥630-。 オンラインショッピングモールRの量販店J:¥8,980- ポイント180? で約8,800〜8,819?、送料¥500-。 量販店Jの直接通販:¥8,980- ポイント898 で約8,082〜8,172、送料¥500-。 量販店M:¥8,505-、送料¥399。 N:¥7,959-、送料¥400。
BB TwinPack 定価:オープン(推定¥7,480? OMNI SHOP 価格¥7,000-らしい)。 量販店S:無し → 無し(Fri,27 Jun,2008〜Sun,06 Jul,2008)。 量販店B:¥6,980- ポイント698 で約6,282〜6,352、送料¥525-。 量販店Y:無し → 無し(Fri,27 Jun,2008) → 無し(Sat,28 Jun,2008) → ¥6,980- ポイント698 で約6,282〜6,352、送料¥500-(Sun,29 Jun,2008)。 量販店A:¥6,615- ポイント不明、送料無料 → ¥6,339- ポイント不明、送料無料(Fri,27 Jun,2008)。 オンラインショッピングモールRの量販店V:¥6,399- ポイント64? で約6,335〜6,342?、送料¥630-。 オンラインショッピングモールRの量販店J:無し → 無し(Fri,27 Jun,2008)。 量販店Jの直接通販:無し → ¥6,980- ポイント70 で約6,910〜6,973、送料¥500-(Sun,29 Jun,2008)。 量販店M:¥6,264-、送料¥399。 N:¥5,859-、送料¥400。
バリューモアってベクターの系列?関連?だったのか。
村内って家具だけじゃなかったのか。

Thu,12 Jun,2008

ビックカメラ Suica VIEW カードのキャンペーン履歴
2006/03/15		サービス開始
2006/07/14〜2006/08/31	入会1000ポイント
2006/07/14〜2006/10/01	入会1000ポイント延長
2006/11/23〜2007/01/08	入会1000ポイント
2007/08/01〜2007/10/31	ポイント2.0倍
2007/12/01〜2008/01/31	抽選(5000ポイント100人、1000ポイント330人)
2008/03/20〜2008/05/31	ポイント1.5倍
2008/11/14〜2008/12/31	キャンペーン店舗でオートチャージ付き申込にてビックカメラ500円割引券(5,000円以上買物時限定、有効期限2009/1/31)

抽選キャンペーンは省略
採算ラインぶんの固定客の収集は完了した、 と言う事かな?。
alt-cannadic 誤字修正パッチ

Fri,13 Jun,2008

EPSON のレーザープリンタ。 IPP は
http://x.x.x.x:631/EPSON_IPP_Printer
EPSON_IPP_Printer
らしい。
FreeBSD で cups 使って EPSlaser に印刷。 PostScript を印刷しようとすると、 英語の文書だと正しく印刷できるけれども、 日本語の文書だと文字化けする(出鱈目な英数記号に化ける)。 bsd-lpr だと正しく印刷できる。 一旦 ps2ps かけてからだと、cups-lpr でもちゃんと印刷できる。 試しに印刷直前の ps を cups からファイルに出力してみたら、 その時点で既に文字化けしていた。 ……2〜3時間調べたり試行錯誤……。 -dPARANOIDSAFER とか -dSAFER を付けたり外したりしても駄目。 どうやら、foomatic-rip から gs を呼び出す時点で、 環境変数 GS_LIB が間違っているらしい。 cupsd.conf に
FontPath /usr/local/share/ghostscript/8.62/lib
を追加したら、日本語でも印刷できるようになった。 ……、これ、 GhostScript のバージョンが変わる毎に修正しないと駄目だよなぁ、 不便……。
各種計算機のベンチマーク結果 に、Core2 追加。 Core2 は Core と比べて、クロック性能比が確実に良くなっていた。 ただ、某J氏が、 「3年前納入の Letsnote(PentiumM 1.2GHz)と比べて、 今年納入の Lavie(Core2Duo 1.06GHz …… VersaPro なんですけど)は、 ぐっと速くなった」 と喜んでいたが、 ベンチマークの結果を見る限り、 「ソフトが色々入って使い古した MS-Windows XP (ノートン入り)と、 クリーンインストールで何も入っていない MS-Windows Vista」 の違いの為ではないかと思われる。 まぁ、その点を確認する為に、ベンチマークを行ったのだけれども。 でもシングルコアとデュアルコアの差はあるかもしれない。
通販価格。 PD3 ¥980-。 ブルーフロウ ¥2,480-、ブルフロ ファンディスク 無し、 ブルーブラスター ¥2,480-、ブルブラ ファンディスク 無し。 ブルフロ値下げ。 BB TwinPack はまだ出品されていない。

Sun,15 Jun,2008

PD5 ¥3,480-、PD6 ¥3,980-。 火星計画DVD ¥4,980-。
計算機のベンチマークテスト用の環境作成の為に、 FreeBSD/amd64 の実行用ディスクの転送をしていたら、 アク禁食らった(泣。 プロバイダにアク禁されたのか、 向こうのサーバにアク禁されたのかは、 不明。 200KB/s くらいの転送速度で 1GB くらい転送した所で、 通信回線を切られた。
568MiB 転送するのに約45分。229KiB/s。

Mon,16 Jun,2008

DELL GX620 で pxelinux で Linux-2.6.20.x/i386 を動かそうとしたら、 Linux-kernel が NIC を認識せず、nfs_root のマウントに失敗して、 initrd.img に同梱しておいたリカバリ用シェルに落ちた。 でも、そこから手動で ifconfig してやると NIC を認識したし、 手動で mount / してやると nfs_root のマウントをした。 どこか設定間違えたか?。
↑ FreeBSD/i386-6.3-RELEASE だと pxeboot からの起動で NIC を認識して、 ちゃんと起動した。
bge0: <Broadcom BCM5750 A1, ASIC rev. 0x4001> mem 0xfe8f0000-0xfe8fffff irq 16 at device 0.0 on pci2
miibus0: <MII bus> on bge0
brgphy0: <BCM5750 10/100/1000baseTX PHY> on miibus0
brgphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
bge0: Ethernet address: 00:18:8b:**:**:**
↑*2 どうも、GNU/Linux の /etc/rc?.d/ での実行順序が悪い気がする (当分、再度の利用予定が無いので、試す気無し)。
NEC VersaPro VY10A/M-4 で pxebooot で FreeBSD-6.3-RELEASE を動かそうとしたら、
fxp0: <Intel Pro/100 VM Network Connection> port 0x2000-0x203f mem 0xf0101000-0xf0101fff irq 20 at device 8.0 on pci3
fxp0: MII without any PHY!
device_attach: fxp0 attach returned 6
とか出て NIC を認識せず、nfs_root のマウントに失敗して止まる。 FreeBSD/amd64 GENERIC でも FreeBSD/i386 GENERIC でも変わらず。 FreeBSD の起動メニューから "disable ACPI" を選んでも駄目。 ノートPCだから、ちゃんと認識する NIC に交換する事もできない。
↑ 試しに OpenBSD/amd64-4.2-RELEASE の インストール CD から起動してみたら、 やっぱり NIC を認識しない。
↑ Linux-2.6.20.x/i386 だと pxelinux からの起動で NIC も認識した。 ……、この Linux、 上記の GX620 で起動に失敗した物と全く同じなのだけれど……。
Intel(R) PRO/1000 Network Driver - version 7.3.15-k2
Copyright (c) 1999-2006 Intel Corporation.
e100: Intel(R) PRO/100 Network Driver, 3.5.17-k2-NAPI
e100: Copyright(c) 1999-2006 Intel Corporation
PCI: Setting latency timer of device 0000:03:08.0 to 64
e100: eth0: e100_probe: addr 0xf0101000, irq 20, MAC addr 00:0D:5E:**:**:**
…… MAC の 0:D:5E って、NEC らしいのだが……。
↑*3 で、よくよく比べてみると、 FreeBSD では I/O を叩いているっぽい表記だが、 Linux では I/O を叩いている気配が無い。 なので、FreeBSD の boot prompt から
set hint.fxp.0.prefer_iomap="1"
してみたら、ちゃんと NIC を認識して、 NFS_root をマウントして起動するようになった。 pxeboot の仮想ルート下の /boot/loader.conf で
hint.fxp.0.prefer_iomap="1"
追加すれば、全自動で起動できると思う (当分、再度の利用予定が無いので、試す気無し)。
↑*4 NFS-server のログを見たら、 pxeboot は NFS でマウントしてカーネルを読み込んでいた。
middleman(mman) のバグではなくて仕様です。 ホスト名以降の // が / に変換されてしまう。 普通の URL ならば、プロトコル指定の付近を除いて // なんて出てこないが、 cgi とかなんとかがからんでくると、 引数で // を使っている場合が結構あり、 それが全部こける。 困るなぁ。

Tue,17 Jun,2008

NEC VersaPro VY10A/M-4 で FreeBSD/amd64|i386-6.3-RELEASE、 昨日の続き。 それ以外では、例によって例の如く、 無線LAN と音源とSDカードスロットが認識しなかった。 多分、 Intel HDA for FreeBSD と wpi-freebsd と sdmmc を入れれば、 認識すると思うけれど。 当分、再度の利用予定が無いので、試す気無し。
各種計算機のベンチマーク結果 に、Core2Duo や PentiumD の FreeBSD/amd64 を追加。

Wed,18 Jun,2008

人身事故の為、40〜1時間の遅れ。

Sat,21 Jun,2008

USB マウスがまたこけた。 uhub が逝ってる。 どうも最近の FreeBSD は、以前に比べて微妙に不安定になっている様な。 Sat,19 Jul,2008に続く。

Sun,22 Jun,2008

GUNDAM X SIDE.1〜SIDE.3 今日だけ割引で¥1,150-
PD5 ¥2,079- 、 ブルーフロウ ¥2,709- 、 ブルーブラスター ¥2,604-
GUNDAM X 無くなっていた。

Mon,23 Jun,2008

sylpheed-2.5.0 が出ていた。 Thr,13 Oct,2005の続き。 サーバ証明書の検証を行う様になっていたが、 未知のサーバ証明書でユーザに信用するか否か聞く際に、 フィンガープリントを表示してくれない。 まぁ、未知のサーバ証明書をインポートする場合は、 フィンガープリントなんか信用せず、真っ当に入れろ、 と言うのが正論だろうけれど。 あと、 ユーザ個別のサーバ証明書データベースを管理する UI が無いし (まぁこれは Sylpheed に実装しなければならない事では無いだろうし)、 管理方法に関する doc やアナウンスがみつからない……。 適当にいじってみた感じでは、
${HOME}/.sylpheed-2.0/trust.crt
が、 ユーザ個別のサーバ証明書データベースらしい。 取り敢えず新規登録したければ、 そのファイルに追加したいサーバの証明書を追加してやれば良いみたい。 閲覧とか詳細表示とかは、 openssl コマンドでごにょごにょすればいいっぽい。
なんかいつの間にか Wine 1.0 が出ている。
日本郵便の郵便追跡サービスを使ってみた。 基本的には郵政公社の郵便追跡サービスと同じだった、当たり前か。 本局郵便局と支店の違いって何だろう?、 どうやら、窓口会社の郵便局と、日本郵便の拠点、の違いらしい。 ……2時間ほど未来の時刻に発送された事になっているんですが。 それともこれは、発送予定時刻、なのかな?。

Wed,25 Jun,2008

「天使の取り分」といったら「紅茶」。
踏切で何かあったとかで、3〜5分の遅れ。

Thu,26 Jun,2008

xpdf。
Error: Couldn't find 'UniJIS-UCS2-HW-H' CMap file for 'Adobe-Japan1' collection
Error: Unknown CMap 'UniJIS-UCS2-HW-H' for character collection 'Adobe-Japan1'
Error: Unknown font tag 'C2_0'
Error (****): No font in show
とか出て、UCS-2 で記述された PDF だけ表示されない。 ${HOME}/.xpdfrc の cMapDir と toUnicodeDir で指定したディレクトリが 存在していなかった。 どうやら、先日、ghostscript-gnu から ghostscript-gpl に上げた時に、 ディレクトリ構成が変わったらしい。
cMapDir         Adobe-Japan1    /usr/local/share/ghostscript/8.62/Resource/CMap
toUnicodeDir                    /usr/local/share/ghostscript/8.62/Resource/CMap
と書いたら、UCS-2 な PDF も表示できる様になった。 cMapDir と toUnicodeDir は、ディレクトリを再帰的には見てくれないらしい。 ghostscript のバージョンを上げるとディレクトリ名が変わってしまう辺り、 嫌な感じ。
↑ 一部の PDF だと、それでも駄目だった。
cMapDir         Adobe-Japan1    /usr/local/share/fonts/adobe-cmaps/aj16/CMap
toUnicodeDir                    /usr/local/share/fonts/adobe-cmaps/aj16/CMap
でいけた。 Adobe 純正の CMap でないと、何か足らないらしい。

Fri,27 Jun,2008

Athlon64。 1.0GHz/20Wモード アイドル状態で41℃、 1.0GHz/20Wモード 牛放牧で43℃。 FreeBSD で powerd 有効にしていると、 フルパワー 2.2GHz/67Wモードにはあまりならず、 なってもわりと短時間でクロックが落ちるので、 フルパワー時の温度は忘れた。 温度が上がると冷却ファンの回転数が数倍に跳ね上がって、 冷却性能が激変するし。
Let'snote CF-Y5。 CoreDuo 375MHz/5Wモード アイドル状態で65℃、 375MHz/5Wモード 牛放牧で69℃、 フルパワーの 1.667GHz/15Wモードで98℃、 だった。 FreeBSD で powerd 有効にしていても、 なにかするとすぐにフルパワーに張り付いている。 CPUクーラーの性能は概算で3℃/Wくらいらしい。 ……室温20℃±5℃で、筐体内温度が45〜55℃?……、 冷却ファンの回転数変化が案外効いていると言う事か。 …… 375MHz モードだと、RC5-72 の 1unit に2時間かかる勘定になる……。
Firefox。 Firefox 2.0.0.0 のリリースが 2006年10月25日?。 FreeBSD の ports に安定版として入ったのが11月1〜5日頃?。 Firefox 3.0.0.0 のリリースが 2008年6月18日。 ただ、今回は(今回も?)、 依存するパッケージのバージョンアップが目白押しで、 かつ人的資源が大幅不足だとかで。

Sat,28 Jun,2008

EIZO L465 ¥12,800- で白と黒1台ずつ。 EIZO L557 黒が¥17,800- 白が¥16,800-。 EIZO S1910 ¥29,800-。 Fujitsu DynaMO 1300LT (メモリカード転送機能無しモデル) ¥7,350-。
PD6 ¥4,179-、今日だけ2割引(→¥3,343)。
GUNDAM X SIDE.1〜SIDE.3 ¥950-。

Mon,30 Jun,2008

何だか知らんが3〜5分遅れ。

FENIX HomePage
G-HAL HomePage
Mail to, メールはこちらへ
Suggestion Box, 投書箱
BBS, 掲示板 UserName:BBS、Password:BBS
(C) 2008 G-HAL