Sabimaru Tree BBS

投稿記事表示(ツリー単位の選択)
戻る

◎六代目寝助 -えのやん@北九州 1/11 18:46(#419)2
├◎右シフト・ビット演算が駄目 -えのやん@北九州 1/12 18:04(#420)1
│└◎HP-UXっすか? -sabimaru 1/12 22:20(#422)1
│ └◎ここの AIX がへんなんですよ。 -えのやん@北九州 1/15 10:32(#423)1
│  └◎mozilla -sabimaru 1/15 11:54(#424)1
│   └◇シフト演算子 -えのやん@北九州 1/16 9:51(#425)0
└◇さてさて。 -えのやん@北九州 1/12 18:13(#421)0

トップに戻る
419 六代目寝助 えのやん@北九州 −
2001/1/11 18:46
お正月に自分のホームページを改装して Netscape 6 で見て愕然とした。
カウンターが COUNTER と表示されてしまうのだ。
MNG とか PNG とかがサポートされるのと引き換えに、xbitmap をサポート対象から
外したらしい。
むむむ。 MSPIE でも表示される非GIFな、画像フォーマットだったのに…。
しょうがないので、PNG なカウンターの CGI を探して見た。

  SI-PNG連結スクリプト Ver 1.0(2000/11/1)
  http://www.aurora.dti.ne.jp/~zom/Counter/index.html

おお、あるじゃん。ラッキっと、サーバに転送してテストすると、、、、
駄目じゃん。ありり?

あちこちに動作ログを書くデバッグのスクリプトを入れて見ても、なんら問題ないはず
なのに、、、で、ペンディング。

仕事のプログラムの組合せテストが順調なので、今日、ちょっと詳細に追っかけて見た。
まずはローカルな Linux サーバーでテストっと、、、、っと、そのまま、うごくじゃん!

へ? 機種依存? Perl はエンディアン・フリーなはずだったが…。

なんと AIX の Perl って、右シフト・ビット演算が駄目じゃん。思いっきり機種依存。
とほほほほ。

原因が判れば、あとはコツコツと手当てをするのし。なんて泥臭いんだろう。
(CRCチェックの計算が、右シフトが出来ずにバグバグしてたのねんのねん。)


トップに戻る
420 右シフト・ビット演算が駄目 えのやん@北九州 −
2001/1/12 18:04
(記事番号419へのコメント)
えのやん@北九州さんは No.419「六代目寝助」で書きました。
|へ? 機種依存? Perl はエンディアン・フリーなはずだったが…。
|なんと AIX の Perl って、右シフト・ビット演算が駄目じゃん。思いっきり機種依存。
|とほほほほ。

具体的にどう駄目か。簡単なビットシフトのスクリプトを走らせると一目瞭然。
#! /usr/bin/env perl
 $L=0x080008000;
 for(0..31){
   printf("%2d: %08x\n",$_,$L>>$_);
 }
#-----
このスクリプトの結果の表示は、

 0: 80008000
 1: 40004000
 2: 20002000
 3: 10001000
 4: 08000800
 5: 04000400
 6: 02000200
 7: 01000100
 8: 00800080
...

となるべきなのに、ここのサーバの perl で実行すると、

 0: 80008000
 1: c0004000
 2: e0002000
 3: f0001000
 4: f8000800
 5: fc000400
 6: fe000200
 7: ff000100
 8: ff800080
...

サインビットを立てたまんま、ずるずると引きずりやがる…。

This is perl, version 5.003 with EMBED
   built under aix at Feb 5 1997 18:00:23
   + suidperl security patch

バージョンが、ちょっと古めなせいもあるかもしれないが。

# ふつう Perl で、ビット演算させようなんて思わないよなぁ。

HP-UX は、どうですか?>sabimaru殿


トップに戻る
422 HP-UXっすか? sabimaru −
2001/1/12 22:20
(記事番号420へのコメント)
> |へ? 機種依存? Perl はエンディアン・フリーなはずだったが…。
 > |なんと AIX の Perl って、右シフト・ビット演算が駄目じゃん。思いっきり機種依存

 > |とほほほほ。

エンディアンとは関係なさそうですね。右ビットシフトが
符号無し(論理)シフトじゃなく符号付き(算術)シフトに
なっちゃってるんですね〜。手元のPerlの本(「新Perlの国へようこそ」)
にはこのへんの記述はありませんでした。
ちなみにHP-UXには標準ではPerlは入ってなくて、自分でインストール
しやした。Perl5.004_1です。(やっぱしちょっと古い)
あ、前任者が入れておいたやつがあったか。バージョン4だったかな。
で、試してみたらちゃんと論理シフトしてました。

えのやん氏のサイトに限った話ではありませんけど、
最近、ブラウザによって処理を分けるのって、
一見スマートに見えて実は結構ブサイクなんじゃないか、と
思ってます。(最初は「おおっ、こんな工夫があったか!」
って目ウロコだったんですが(^^;)
だってブラウザの種類だのバージョンなんていくらでもあるじゃ
ないですか。Netscape 6(0.6?)みたいに新しいモンも出てくるし…。
特にスタイルシートがらみのは、なんかウットウシイな〜とよく
思います。…まァそのへんは好みの問題でしょうかね〜。
オイラは、どんな環境にも対応できるシンプル一本なのが好きです。
(メンテがラクだから?そうかも…)

トップに戻る
423 ここの AIX がへんなんですよ。 えのやん@北九州 −
2001/1/15 10:32
(記事番号422へのコメント)
sabimaruさんは No.422「HP-UXっすか?」で書きました。
 > エンディアンとは関係なさそうですね。右ビットシフトが
 > 符号無し(論理)シフトじゃなく符号付き(算術)シフトに
 > なっちゃってるんですね〜。

そーなんです。…で、とりあえず符号ビットを記憶しておいて、右シフトしてから、
前の符号ビットの状態で、上位2ビットを設定して、、、なんてな関数を作って、
シフト回ループさせるなんてー実装で動作確認をしたんですが、よくよく考えてみりゃ
整数演算の右シフトなんて、ただの割り算じゃん。$crc>>2 ってのは $crc/0x2
$crc>>8 は、 $crc/0x100 と書き換えれば、等価ですな。これなら実行速度もほとんど
変わらない。これで作者にフィードバックしようかな。

 > で、試してみたらちゃんと論理シフトしてました。

それが普通ですね。AIX がへんなんですよ。

 > だってブラウザの種類だのバージョンなんていくらでもあるじゃ
 > ないですか。Netscape 6(0.6?)みたいに新しいモンも出てくるし…。

いま自分とこにアクセスしてきたブラウザの自己報告したブラウザ名のログを整理して
います。マイナーバージョンまで数えちゃうと物凄い数になる。

でも、そのほとんどは Mozilla 系なので、分別はさほど難しくも無いかなぁ。

 > (メンテがラクだから?そうかも…)

そー。メンテが面倒なのは確か。ライブラリー化するとか一工夫必要ですな。

# ネットを探がしゃ、ころがってるかな?

トップに戻る
424 mozilla sabimaru −
2001/1/15 11:54
(記事番号423へのコメント)
>  > で、試してみたらちゃんと論理シフトしてました。

> それが普通ですね。AIX がへんなんですよ。

手元のPerlの本ではそのへんハッキリ書いてなかったんですが、
どうなんですかねぇ…。場合によっては算術シフトも
必要なような気もしなくもないけど。でも整数が何ビットで
扱われてるかを意識してないと使えね〜し…(それってあまり
Perlっぽくないような気もするし…(^^;)
やっぱり論理シフト「だけ」用意されてるのが正解なんですかね?
やっぱし、ちゃんとした本が1冊手元にあった方がいいかな…

> いま自分とこにアクセスしてきたブラウザの自己報告したブラウザ名のログを整理して
> います。マイナーバージョンまで数えちゃうと物凄い数になる。
> でも、そのほとんどは Mozilla 系なので、分別はさほど難しくも無いかなぁ。

IEも「Mozilla」を自称(詐称?)するんで、実はIEも結構多いと
思います。(でもってNetscapeとIEとでゼンゼン違ったり、
はたまたバージョンによっても以下略)
むしろ今はIEユーザ人口の方が多いらしいしねぇ…。いつのまにやら。
私は未だにコワくてよう使えまへん。(^^ (ていうかインストールが
そもそもできない状態なんですけどね、ナゼカ)

トップに戻る
425 シフト演算子 えのやん@北九州 −
2001/1/16 9:51
(記事番号424へのコメント)
sabimaruさんは No.424「mozilla」で書きました。
 > 手元のPerlの本ではそのへんハッキリ書いてなかったんですが、

 > やっぱり論理シフト「だけ」用意されてるのが正解なんですかね?
 > やっぱし、ちゃんとした本が1冊手元にあった方がいいかな…

手元の「Perlプログラミング(Larry Wall & R.L.Schwartz著、ソフトバンク)」を
見てみました。
------------------------------------------------- 第3章 Perlの真相 P.109
3.2.8 ■シフト演算子
Perlは、Cと同様に、ビット単位の左シフト<<と右シフト>>の2種類のシフト演算子を
持っている。ビット単位のシフトは、マシンの算術演算の特性に大きく依存するために、
すべてのマシンで移植性があるとは限らないので注意すること。
------------------------------------------------------------------------
…ってことで、Perlの原典でこう書かれているってーことは、算術シフトで *正しい*
ことになるのかな。移植性を考慮するなら、そもそも「シフト演算はできない」と思った
方が正しいことになりますね。ただ、この本も元の Perl (4以前)が対象でかなり古いの
で、現時点での実装を厳密に記述しているとは云い難いのだけれど。

…で、来週からまた湘南台入りなので、タイムオーバー。Netscape 6 対応の妙手を
思いついたので、とりあえずカウンターの PNG化とブラウザ判定は、先送りです。

# どっかの政府みたいだなや。でもまぁ、うちは借金はありませんけどね。

トップに戻る
421 さてさて。 えのやん@北九州 −
2001/1/12 18:13
(記事番号419へのコメント)
えのやん@北九州さんは No.419「六代目寝助」で書きました。
 > 原因が判れば、あとはコツコツと手当てをするのし。なんて泥臭いんだろう。

ライブラリレベルでのパッチには成功した。
http://www3.airnet.ne.jp/enomoto/tmp/cnt.htm

さて、あとはこのライブラリと既存のカウンターを合体させればいいのだが…。

PNG対応ブラウザーと非対応のと、それに画像なしブラウザーとで処理を分けようかなぁ、
と思案し出したら、結構、めんどーな気持ちになって来た。

(ますます、このサーバーから引っ越し難くなってきたゾ。大丈夫かなぁ?)


戻る