某日記

(中期)

平成14年10月11日(金曜日)

新区名

なんというか茶番だよなぁ 。 神奈川県川崎市宮前区鷺沼は、沼がつくけど誰も気にしちゃいねぇぞ。 一方で与野区は中央区よりよっぽど個性的でいい名前だと思うんだけどなぁ。

そもそも 、 一般市民で積極的に合併を望んでた人がどれくらいいたかが怪しいですからねぇ。 名前が変わればそれだけでいろいろコストがかかるわけで。

ううむ

どうしても違法コピーのせいにしたいらしい 。 そういう根拠のないことをぬけしゃあしゃあと言うなよ、バカ。

いやぁ、予想された事態だけどね。こういう世論誘導戦術は。 これで、CCCD じゃない CD にミリオンセラーが出ても、 何もコメント出さないんだぜ。

そうそう簡単にミリオンセラーがでるわけがないんだよ。 ここ 10 年が異常だっただけだろう。バブルだったんだね。 このところの経営不振はポンポンミリオンセラーが出ることを 前提にした企業戦略が行き詰まったものだ、と見るのが自然だし、 「宇多田ヒカルなんだから CCCD さえ導入すればミリオンセラーが当然だ」 なんて思ってるフシがあるあたり業界におごりがあるとしか思えない。 そのおごりこそが不振の根本原因じゃないの? 消費者と投資家を馬鹿にするのもたいがいにしなさいな。

そうそう、ここで宇多田を槍玉にあげるあたりが臭いやね。 例の宇多田パパ発言があるから。あれは、必ずしも CCCD というものを 否定したわけではないんだが、現状のコピーコントロールの問題点の 一つをまっとうに指摘した正論ではあったんだよね。 それに対してこういう形でレコード業界側が「報復」したんだな、 と見なされても、さほど「うがった」見方でもないだろうな。 正論を許さない風潮というのは恐いね。

ACPI

どうも S4 で寝てくれない。NetBSD current の ACPI CA は、Intel が 6 月に 出したものなのだが、これを 4 月に戻すと動く。

松茸

松茸もらってきたくらいでぎゃあぎゃあ言うなよ、貧乏人どもめが

平成14年10月12日(土曜日)

夕方

出かけようと思ったがやめた。

8bit through

ふうむ 、 なんか signed char と unsigned char の変換の話とは 微妙に別の話のような気もするんですが、 とりあえずは実装依存動作なのでどう動いても文句は言えないコードですな。 unsigned → signed に関しては、ISO C の 6.3.1.3 の 3 に 「値がはみ出してたら、実装依存の結果(値)になるか、 実装依存のシグナル(例外)が発生するよ」 と書いてあるんで、(signed char)(c) > (signed char)(0) が 真か偽かも実装依存ですな。まあ、普通は不定ではなくて何らかの確定値に なります。

で、微妙に別の話というのは、件の話は右辺が int なので、 いったん signed char にキャストされた c が、 もう一度 int に暗黙のうちにキャストされてるんですね。 ところが、吐かれたコードでは符号拡張されてないんで、これはとどのつまり、 いつのまにか signed char へのキャストがなかったことになってる、 という話なんですな。パラノイア的に解決するなら、 一度 register volatile signed char な変数に代入してやると 確実に息の根を止められるでしょう。

この手の最適化が許されてたかどうかはすっかり忘れてしまったんですけど (調べるのも面倒くさいが多分コンパイラのバグ)、 まあいずれにしろあまり言語の隅っこのほうの機能を使うとろくな目には遭わん、 という話ですな。それに、RISC プロセッサの多くでは 8bit の即値比較を 避ける理由がないし、 おそらく最近の x86 も即値を避けてもご利益はなさぞうな気もする。 こういう最適化をしても 9 割のケースでは有意な差がないので、 最初からこういう最適化をするのではなくて、 動いてから必要に応じて最適化を行うのが良いですね。 別の問題としては、せめてマクロを使うべきでしょうな。

8bit through 話 。 補足すると、実装依存な動作によって不定なケースが発生するから 問題になるんじゃなくて、 ほとんどのケースでその「実装依存動作」というのが 「単に 8bit コピー」かつ「符号つき整数は 2 の補数表現」なので、 MSB が立ってる char を int にキャストしたときに符号拡張されてしまって 誤動作する、というケースが一番多いわけです。 int へのキャストは、上の例のように、 いろんなところで暗黙的に行われるので、思いがけないところで いろいろな問題が発生します。 たとえば c>=0x80 (ただし c は signed char)とか。 このミスは、私もよくやるんだ。

これに絡んだ問題としては、char が signed か unsigned かが処理系依存なので、 ある環境では動くのに(char が unsigned な場合)、 別のところに持っていったら動かなかった(char が signed だった)、 なんてこともあります。

なお、「マルチバイト型」という型は存在しないので、 マルチバイト表現は char の配列で表現されるんですが、 これを生で扱おうとすると、もちろんいろいろ実装依存になります。 C 言語でマルチバイト表現を扱う正式な方法は、 提供されてるライブラリ関数を使って完全に opaque な形で プログラミングすることなんですが、少なくとも ISO C の範囲だと いまひとつプラクティカルではないのがたまに傷。 __STDC_ISO_10646__ 環境だと、一旦 wchar_t に変換しちまえば 直接触れるんですけどね。スタイル的にあまり良くないけど。

ACPI まわり。寝なかったのは、ACPI CA の 6 月の import 時に行われた acpi_wakeup.c の sync が間違ってたから。直して commit 。

こいつを真似して 、 うちの mozilla も flash 対応完了。 ちなみにわざわざ .s 使わんでもできます。

こういう感じ 。 なんとかして preload を回避できないか画策してみたけど うまくいかなかったので preload してください。

平成14年10月13日(日曜日)

最適化

そこまでシビアな話になると 、 コンパイラは全く信用できないですよ。 今回の話は、「無理なキャストが規則上ダメ」ということよりも、 「無理なキャストがコンパイラのバグにひっかかった」可能性が高いと思うので、 やっぱり「信用できないコンパイラ様」という話の気がします。 VC++ とか Intel 版でも結構バグがあって、 なぜかダミーの関数呼出しを入れるとコードがまともになる、とか、 そんなことはよくあります。gcc も割とダメ。

あと、マクロにしとけばとっかえひっかえいろいろな方法が試せますんで、 やっぱりマクロにしましょう。 (inline 関数はそれはそれで微妙なんだよな……)

個人的には、アセンブラだって開発ツールさえしっかり作れば、 生産性は低くないし保守性も悪くないと思うんですけどねぇ。 移植性はないし、プロセッサ世代ごとの最適化を自動的に適用するのも 難しいですが。

まあ、最低でも吐かれたアセンブラコードが読めないと 仕事にならんのは確かですな。 今回の話とは関係ないですが、Windows は基本的に load address が 固定されてるので、お客さんから drwtsn のログとかもらってきて、 リンカの吐いた map と突き合わせて、exe を逆汗して落ちてる場所の 当たりをつける、とかいう話は日常茶飯事ではある。

でも、x86 嫌い……。もちろん昔(16bit 時代)は書いてたんだけども。

平成14年10月14日(月曜日)

マクロ

マクロ 。 トラディショナルなコンパイラでは、 マクロの展開はコンパイラの仕事ではないので、 なんでプリプロセッサごときでバグるんだろう、と一瞬思ったんですが、 確かに VC++ のマクロプロセッサって何か変なんですよね。 私も何度か仕事で変な現象を見た記憶が。

VC++ とか BC++ とかだと、半分くらいはプリコンパイルヘッダの 問題なんじゃないかという気がするんですよね。 単純に disable すると windows.h の include で遅くて死にそうなのがアレ。

見てるコンパイラが違うと感覚が違う、という例でしょうね。 私は基本的に gcc の感覚なので、 (たとえマクロを使うのが行儀の悪いことだと知っていても) 一番堅牢なのが(enum でも inline でもなく)マクロ展開だと 思ってるわけで。

夕方

GORRY さん + yar-3 と元住吉の洋食屋。おばちゃんがイイ!

夜中

リチャードティーの Strokin'。かっこいい。 A 列車は、ピアノ+ドラムのデュオであることを 忘れてしまうスケールの大きさとグルーブ。

平成14年10月15日(火曜日)

夜中

俺の週末を奪ったバグの修正パッチ(Hi Jason!):

--- acpi_ec.c   2002/10/02 16:33:36     1.7
+++ acpi_ec.c   2002/10/15 20:53:37     1.8
@@ -545,7 +545,6 @@
        /*
         * Perform the transaction.
         */
-       (*Value) = 0;
        for (i = 0; i < width; i += 8) {
                if (Function == ACPI_READ)
                        EcRequest.Data = 0;

おおもとは FreeBSD の jhb のせいなんだが、 thorpej がその後の修正の merge をとちった模様。

うう、なんかものすごーくまともに動くようになった気がするぞ……。 ある意味一年以上悩んでた訳なんだが……。

平成14年10月16日(水曜日)

ACPI

とりあえずめぼしい不都合は 「S3 からの復帰で最初に触った zsh が floating pointer exception で落ちる」 「S4 からの復帰で X がフリーズする」の 2 つになった。

前者は要調査(まあ多分単純な話)、 後者はバーチャルコンソールの機能で X 以外の tty に 切り替えておくと OK。

ううむ

君たちの数十年後の姿だよ

平成14年10月17日(木曜日)

今週のチャンピオン

アクメツ。この漫画、期待してたよりずっとおもろいんですけど。にゅ〜なんぶ。

野球(2)。迷走中。

6/17。おりんちゃん。おねえさんが何者なのかが気になる。 花を描く少女漫画的手法はやりすぎですってば :D

ラーメン(2)。琴美たん萌え。

×。フィンガーメイド<なんか卑猥。テクニックの披露を期待してたのに……。

バ○

誰かバ○を駆除してください

喫煙にしろ、釣りにしろ、「文化の破壊」とかいう反対理由を言う奴がいるが、 ちゃんちゃらおかしい。 文化をつければ何をしても許されると思ってるのだろうか。 自分たちが「文化」と思っているものを否定されたくないのなら、 少なくともマナーなりルールなりを守って、 「文化」足るものにしてから言ってくださいな。 あと、本当に「文化足るもの」としようとしてる人々に対しても失礼であり 迷惑なんじゃないのかな。ガキの感情論を振りかざされても迷惑。

バ○に対するわかりやすい反論

ただまぁ、例の条例に関しては、どうも実効性に疑問があるんだよねぇ。

平成14年10月18日(金曜日)

今日

気づくと 1300 過ぎてる罠。ううむ、時計を止めた記憶すらないぞ……。

全休にするか半休にするか。どっちかといえば今日のは単なる寝坊なんだが、 確かに昨日からあまり体調はよろしくないし、 症状(喉が痛いのと倦怠感)が悪化してのだよな。 でも休むほどじゃないんだな。 一方で、わたし的には今日やろうと思っていた仕事が溜まってるのであった。

とりあえず半休でメール出したが、 なんかこれ書いてる間にも悪化してきたような……。 とりあえず床屋に行ってから考えよう(ぉぃ

過去形

そうだったのか 。 どおりでやたらと北海道でその表現を聞くと思った。

一方で、首都圏でここ 2 〜 3 年その表現をよく聞くようになったんだが、 これはどうもマクドの接客マニュアルのせいらしい、という噂。 これに限らず、 どうもあの会社の恣意によって気持ち悪い日本語の再標準化というか私物化が 行われてる気がしないでもないんだが(ユダヤの陰謀か←おい)、 まあ言語の移り変わりというのはそんなもんかもしれないなぁとも思うし、 だから「自分の知ってる標準語と違う」という生理的違和感があるだけで とりたててどうこうするつもりもない一方、 なかなか興味深いことなのであった。

ACPI

FIVA 限定だけど、acpi_apm pseudo driver を使って、 常用できる程度にはなったよ。実用上困らないレベルの問題は残ってるけど。

known problems:

  1. S4 からの復帰で、 autri ドライバが「Codec timeout. Busy writing AC'97 codec」と 言いまくる。
  2. S4 からの復帰で、コンソールに ハードウェアカーソルらしきものが残る。
  3. pciide と npx の power hook で、無邪気に device reset してるけど、 こんなんでいいの?
  4. apm sim でしか使えないのはダサい。
  5. powerhook フレームワークがタコ。

powerhook のフレームワークだけれども、作るとすれば、

  1. もっと粒度の細かい power state をハンドルできるようにすべき。
  2. 同じイベントの中での実行順優先度がほしい。
  3. 現在利用中の電源機構の種類およびそれに依存する情報も 渡せるようにしたい。 たとえば、APM と ACPI では、同じ「サスペンド」でも デバドラがすべき処理の内容が違うし、 ACPI だけに限ると、S2 と S3 と S4 は APM 的にはどれも 「サスペンド」に相当する気がするんだが、 デバドラから区別したい。 あと、APM か ACPI かを静的に区別する方法はないので、 どこかで現在有効な電源機構の種類を取得する必要がある。
  4. ステート遷移のキャンセルが欲しい。
くらいが必要になるわな。 まあ、このへんひっくるめた mipower framework を誰かが書くんだろう。

天唾

携帯電話 。 確かに酷いのあるらしいねー。なんだっけ、確か SO503i って言ったっけ?

ぎゃはははは

同感