雑記

Don't Panic (あわてるな)

DSC05252.jpg

とある理由で銀河ヒッチハイクガイド3部作が読みたくなり実家のダンボールの中を捜索。無事発見。

最初の銀河ヒッチハイクガイドが昭和57年。宇宙の果てのレストランが58年。宇宙クリケット大戦争が60年。いずれも絶版だがクリケット以外は新訳で刊行されたらしい・・・

で久々に読みふけってみると、アホらしくておもろい。やはり42か・・・
Posted by issei

Category : 雑記

FreeBSDを6.0に上げてみる その2

Page Faultというオチがついたもののもうちょっと悪あがきをしてみます。このまま再インストールではあまりに面白くなさすぎます。

まずはしっかりとログを見る。コレ基本。

DSC05247.jpg

落ちたときの状態はこんな感じ。

で、冷静に考えれば、そもそもシングルユーザモードでは起動するのだから、その後に起動するプロセスに問題があるんじゃないかという気がしてきました。

それだったらわざわざ再インストールするまでもないですね。というわけで、/usr/local/etc/rc.dを試しに違う名前にしてローカルパッケージを一切起動しないようにして再起動してみます。すると・・・

・・・
・・・
・・・
login画面キタコレ!!

ということでインストールは問題ないと。

そこで改めてパニックの画面を見ると

canna、rtc

とメッセージが出たところでコケています。このrtcが怪しいと睨みました。そこで、rtc.shを見てみると、

/usr/local/modules/rtc.ko

というのを読み込んでいるらしい。なんかスゴくクサイですな。これ。
というわけで、シングルユーザモードで再度起動して

/sbin/kldload /usr/local/modules/rtc.ko

と実行してみたところ・・・

page faultキタ━━━━(゚∀゚)━━━━!!!!

まさに同じ症状。ということで、ここまで来れば簡単ですね。これを外せばいい。

しかし、このパッケージなんのパッケージなんでしょ?名前からするとReal time clock? 全くいれた記憶がないですわ・・・

ということで /var/db/pkgをさくっと検索。こういうときは grepが早い。

#cd /var/db/pkg
#egrep rtc */+CONTENTS

どうも rtc-2004.02.24.1_4が悪さしているようです。


rtc-2004.02.24.1_4/+CONTENTS:@name rtc-2004.02.24.1_4
rtc-2004.02.24.1_4/+CONTENTS:@comment ORIGIN:emulators/rtc
rtc-2004.02.24.1_4/+CONTENTS:etc/rc.d/rtc.sh
rtc-2004.02.24.1_4/+CONTENTS:include/rtc.h
rtc-2004.02.24.1_4/+CONTENTS:modules/rtc.ko
rtc-2004.02.24.1_4/+CONTENTS:share/examples/rtc/test.c
rtc-2004.02.24.1_4/+CONTENTS:@dirrm share/examples/rtc
rtc-2004.02.24.1_4/+CONTENTS:@unexec rm -f /dev/rtc


+DESCを見てみると・・・


This is a kernel module for /dev/rtc device support.
Some apps such as VMware for Linux would be happy with it.

The code was originally written by Vladimir N. Silyaev.


ああ、VMWareを入れてみた時に勝手に入ったのか。happyに動くって・・・さっきから散々fsckしてunhappyだよ・・・OTL

ということで、happyにはなれそうにないので、削除。で、削除してrebootしてみたら・・・

見事に起動しました。

勝利!!!

終わってみればなんてことない問題なんだよな。これが。
Posted by issei

Category : 雑記

うちの会社の社名の由来の続編が発売らしい

うちの会社の社名の由来なんですが、ぶっちゃけTo Heart。いや、ほんとうにスマンかった・・・今でも反省はしていない。

一応知らない人のために解説しておきますが、To Heartってのは、20世紀末に爆発的に流行ったLeafのエロゲ。後にPS2に移植され、同じキャストでアニメまで作られました。

で、うちの会社はこの人気にあやかり、 heart.ne.jpなるドメインを取得し、 *.heart.ne.jp というメアドを売ったのが始まりです。*はお客さんでご自由に選んでください。というサービスでした。

予想通り、* は to にする人が多かったわけですが、考えてみりゃメインの登場人物が全部売り切れらら後は客来ませんね。その事実に気がついたのは随分と後のこと。

勢いだけでいろいろ挑戦していたあの頃。若気のいたりってのは恐ろしいものですが、そういういたりが人脈を生み、現在に続いているいというのも事実。やはり人間至ってナンボですわ。
Posted by issei

Category : 雑記

g++ のこれまたどうでもええ知識

C++のオブジェクトは実空間でどうのように配置されているのだろうか?とういことを調べてみた。(必要にかられて)

すくなくともCでは構造体の変数は宣言された順番に並びます。これは言語の規定。ではC++ではどうなるのか?タブンC++も宣言順に並ぶで正しいと思う。

しかし、問題はVirtual関数。こればっかりはインスタンス舞に呼ばれるものが違うのでメモリに配置しておかなければならないわけで・・・この部分に関してはさすがに実装依存のような気がします。

が、とりあえずg++でどうなってるかわかればいいので、とりあえず、次のようなプログラムを書いてみました。

class A{
public:
  int a;
  int b;
  A();
  virtual ~A();
  virtual void hoge();
};
A::A()
{
 a = 0x11111111;
 b = 0x22222222;
}
A::~A()
{
 printf("A\n");
}
void
A::hoge()
{
 printf("Ahoge\n");
}
これをアセンブラに変換します。 g++ -S t.cc でt.sを見てみると・・・コンストラクタらしきところ(g++では __1Aという名前になるようで)
__1A:
        pushl %ebp
        movl %esp,%ebp
        movl 8(%ebp),%edx
        movl $_vt$1A,8(%edx)
        movl $286331153,(%edx)
        movl $572662306,4(%edx)
とういことで、どうもメモリ上には int a int b $_vt$1A と順番に配置されるようです。ちなみに$_vt$1Aがバーチャル関数が格納されているテーブルで、sizeofを取ると12になります。 つまり基底クラスにおいては、Cと互換性があり、最初の構造体のメンバのデータは同じということになります。 では、このクラスから派生したクラスはどうなのでしょうか?ためしに次のようなクラスを作ってみました。
class B: public A{
public:
  int c;
  B();
  virtual ~B();
  virtual void hoge();
};
で同じようにアセンブラソースを出力し比較してみると int a int b $_vt$1A int c と並んでいる模様。sizeofは16ということになりました。なお、Virtual関数がないクラスはテーブルは何処にも入りません。普通のCの構造体となります。

Posted by issei

Category : 雑記

pipe

いまどきこういうレベルのプログラムをしてる人がどれくらいいるのかわからんですが、pipeの挙動で二日悩みました。

どうにもうまくpipeに書き込んでくれない。

おかしいのう・・・

とおもたらワケなかった。ようするにwriteしたものが全てかかれるわけじゃないという至極簡単なオチ。

あーそういえば、write(fd, buf, len); のlenを凄く大きくしてたんだった。
Posted by issei

Category : 雑記

メモリ不良その2

ということで再度交換に向かい(ちなみにソフマップ)動作確認してもらうと、ちゃんと動きやがりました。

差しが甘いんじゃないかといわれ、持ち帰りましたが、やはり動きません。

別なメモリを差せば動くので、どう考えてもメモリ不良としか思えないのですが、一度動作確認をとられているので、さてどうしたものかと考え、PCも同時購入だったので、PCがごと持ってきました。

で、動作確認してもらうと、やはり動かない。ということで今度はPCが交換の対象になり結果的に新しいPCになりました。これで解決でしょう。

で、新しいPCを持ち帰りさてと起動すると、あれ・・・起動しない・・・

さっきまで起動したのにはて?

結局交換前と全く同じ状況です。

おかしいと、メモリを抜き差ししてるとあるとき動きやがりました。どうも微妙な接触で動いているようです。ということで、再度ソフマップへ。

結局メモリを3回変えてもらて、動きました。
大山鳴動してやっぱりメモリ。つか最初からメモリ交換してくれりゃ、PC一台無駄にせず済んだはずなんですよねぇ・・・しかし2回も交換することになるとは。

長かった・・・
Posted by issei

Category : 雑記

極々内輪の話

我々ダメ仲間の一人に通称極堕先生という御方がいるのですが、この極堕氏のダメっぷりがあまりに突出しており、敬意をあらわすため

ご苦労チャン→極労ちゃん

などと忘れないよう隠語的に常にその言葉を日常的に使用しております。最近では極ちゃんとか、極とか59とか略されて、もう何がなんだか分けが分からん始末。

で、本日、たまたま大きな数というのを調べいたところ

極 = 10^48

らしいことが判明しました。

さすが極堕先生。その単位の数も半端じゃない。
Posted by issei

Category : 雑記

わけあってメモリ不良

つかまされた・・・orz

で交換してもらって、また、さしてみたらまたうごかないという。

二重苦。
Posted by issei

Category : 雑記

わけあってその2

fputcの互換品を作ることに。

めんどくせぇ。

が冷静に考えたら、とりあえず文字さえ表示できればいいので、

write(2,&c,1);

ラクチンである。
Posted by issei

Category : 雑記

わけあって

printf関数の互換品が必要に。

作り方は man va_startで一発なんだが、

これが%指定とか一通り実現しようとすると、意外とめんどくさい。
Posted by issei

Category : 雑記