2002年5月 25日土曜日

am 10:00

と、いうわけで、FreeBSDの宗男の登場である。
今、すごい盛り上がり。
だから、今度は、ゲームボーイアドバンス(この「アドバンス」の由来は?)の音をサンプリングして、テクノでもやろう。



Web name「ピーチ姫」

「アクセス数が一日で千を越えたみたいだけど、任天堂がなに言ったわけ?」

 しらいです。

> >  環境に依存しているからと言って、自身を真っ先に疑う姿勢を欠
> > いていると先に進めませんよ。

> その通りです。
> でも、まったくわからなかったんですよ。

 最初から一足飛びに次のステップに進み過ぎているんですよ。ま
ずは C 言語の正しい理解から始めなくては。
 確かに、習うより慣れよとは言いますが、それとてある程度の基
礎が確立されてからのことだと思います。基礎も出来ていないうち
からいきなり実地では正しく慣れられるとは思えません。


> 本当に、つくづく勉強すべきことは山ほどあるのだなぁと痛感いたします。

 山ほど...うぅむ。この程度のことは C 言語の学習過程に於
いては最初の第一日目で履修しておくべき事柄だと思いますけどね。
まぁ、基礎文法の履修だけで初日を丸々費やしてしまったとしても、
その翌日には学ぶべき優先順位だと思います。
 pointer への理解はまだちょっと先かも知れませんけど、「b=b++」
は文法的にもまずいのでやはり「基礎」の部類でしょうね。文字列
処理に関しても基礎レベルでの理解が不足していると思います。


> それでは、みなさんのご指摘のような修正(「そもそもの汚いソースから直そう」という話はよく耳にする)から始めますね。

 まずは「読む」ことから始めてみては如何でしょう?先人の資産
が open source で数多く公開されていますから、簡単そうなもの
からでも目を通してみては?
 勿論、玉石混淆で中には参考にしてはいけないものもあるかと思
いますが、KNK さんの場合失礼ながらその「石」のレベルにすら及
ばないんじゃないかと思います。
 いきなり「汚い source を直せ」と言われたところで、その清濁
の価値観が形成されないうちには直せませんから、まずは「読む」
ところから始めて価値観に磨きをかけてみませんか?


> それから、strlenで-1については、私の手抜きプログラムで、system() で pwdをファイルに書き出して(この処理はいい処理では
> ないことはわかっていますよ)、それを読み込むときに、改行されてしまうので、-1で改行コードを消しています。
> それで、strcatで\0を足したこともあるんですが、同じでした。

 C で扱われる「文字列」の概念が理解出来ていないからだと思い
ます。「\0」は文字列の終端を表し、それ以外の文字はたとえ自分
が代入した憶えがなくとも文字列の一部を成します。
 ですから、最初に「\0」で文字列領域を全部埋めてでもおかない
限り、strncpy() で明示的に値が代入された領域外もまた文字列の
一部たり得る訳です。何が入っているか判らない訳ですから。

(中略)
# 何故か Netscape Navigator 4.0x では見えませんけど...。
#何故?


> p.s.
(以下略)

 何これ???

                                               しらい たかし
というメール(あ、そもそもメーリングリストの公共性は認められているので、プライバシーは該当しないからね。公式コメント)
で、特にムカつくのが、「まずは「読む」ことから始めてみては如何でしょう?先人の資産が open source で数多く公開されていますから、簡単そうなものからでも目を通してみては?  勿論、玉石混淆で中には参考にしてはいけないものもあるかと思いますが、KNK さんの場合失礼ながらその「石」のレベルにすら及ばないんじゃないかと思います。 いきなり「汚い source を直せ」と言われたところで、その清濁の価値観が形成されないうちには直せませんから、まずは「読む」ところから始めて価値観に磨きをかけてみませんか?」
のくだり。

で、よく見ると、任天堂なのだ。

それから、LSI-Cは商用コンパイラである。
bcc32.exeで動作確認するのなら、多少は許せるが。
そして、彼はGNUが嫌いであると、他でもコメントしている。

それで・・・ 明らかにプログラミングをさせないことを目的とした内容になっているのだ。
で、アクセス数が1000を越えてから、ようやく修正をしようとしたが、自分のところのコミュニティーを動員して「しらいさんには同情します」とか言わせているわけ。
そんで、うちは可能な限りGIFファイルを使わない主義である。
GNUの作ったgimpを使っているしね。
emacsもmgeditも使っているし、KDEはオープンソースなので気に入っている。
で、sylpheedの悪口も書いているから、任天堂から、実にすばらしい「FORTRANなみにヤバイ」ソースによるメーラーをROMカセットで販売することだろう。
で、専用の接続コードでつなぐと、友達と対戦プレイができる。
Aを12回、Bを12回、ABABAB、そして、リセットボタンを押すと、隠しスタートが始るだろう。

ヤツが先に関係のないこと(netscape)にまでインネンつけているのは、見ての通りであるからして、ちっとも卑怯じゃないね。

ヤツはHackerなのか?
それとも、System V野郎なのか?
いずれにしろ、任天堂がソースを子供たちのために公開しなけりゃ、誰も納得しないね。
で、宗男なもんだから、権力使って、sourceforgeに圧力もかけたりしているが、こっちの方が上だ。
っていうか、マイクロソフトの方が、まだいいよな。任天堂より。
LSI-CってWindows用じゃなかったっけ?

俺は、標準的なC言語入門を読んだけど。
基本は、
n=n+1で、
右の計算が左に代入されるってことで、
Cにはインクリメント演算子があるってことで、
n=n++が基本その2だ。
で、それを略すと
n++

で、もちろん、
a=n++
って書き方があるから、これが誤動作を起こす原因だとは思えない。
で、
#include 

int main (void)
{
  int n;
  n=0;
  n=n++;
  printf("%d\n",n);
}
と、
#include 

int main (void)
{
  int n;
  n=0;
  n++;
  printf("%d\n",n);
}
をgcc -S 1.c -o 1 と、gcc -S 2.c -o 2でコンパイルすると、1.cの方がインクリメント演算子を使わないで、代入をしている関係で、無駄な処理がある。
それくらい知っている。
だが、gcc -O2 -S 1.c -o 1 とgcc -O2 -S 2.c -o 2を実行すると、

まったく同じになるのだ。

これはインクリメント演算子を使った方が、少ないバイト数のバイナリを作成「できた」(過去形)名残だ。
で、このとき、俺はnxtをライブで書いていて、そのことを説明しながら、意識的に、n++ではなく、「右の計算結果が代入されるんだよ」を強調しながら、n=n++を意図的に書いている。
記憶にないかな?
ある人もいるだろう。

そこんとこよろしく。
だもんで、K&Rなのだ。

このイヤミがわかっていないようである。
で、フリーなgccの構文解析と最適化は中々であるとも付け加えておく。
LSI-Cはどうなのかは知らないが、LSI-Cの信用に関わることなので、メールしておこうかと考えている。
「あのー、プロじゃないと使えないコンパイラなんですか?」
100%「違います」と答えるだろう。

そう、明らかに私のソースは汚い。
ancient UNIXのようにね。
そのために、俺はsourceforgeに入れてある。

おまけに、cvsだ。

cvsはなんのために存在するのかな?

オープンソースつぶしでなければ、答えられるはずだ。

それから、lharcやFD cloneのソースを参考にした部分もあるが、BSDじゃないとダメかな?

それから、「しらい たかし」なんて名前は聞いたことがない。
主婦にこの話を聞かせたいものだ。
子供にも。

教訓:任天堂のソースはFORTRAN並みにヤバイ」