« 2007年7月 | トップページ | 2007年9月 »

2007年8月の11件の記事

2007年8月30日 (木)

ライト、ついてますか2

昨日はその翻訳の酷さについて書いたのだけど、にもかかわらず読もうと思ったのは、大事なことが書かれているとの評判だから。そして160ページしかないから。

というわけで、せっかく最後まで読んだので、内容を自分で消化するためにも、全6部20章の内容を簡単にまとめてみることにする。うまくまとめられない部分は、理解ができていないということだ。とりあえず、途中まで。。。

続きを読む "ライト、ついてますか2"

| | コメント (0) | トラックバック (0)

2007年8月29日 (水)

ソースからコメントを削除する3

こんな簡単なプログラムでもバグがあったので修正。

  • バグ内容:C形式のコメント「/*    */」で、終わりに「**/」と、アスタが複数続いた場合に、コメントが終了したとみなされない。
  • バグ原因:C形式のコメントの中に「*」が連続して出て来た時に、「次でコメント終了するかも」ステータスから、「まだコメントの中だよ」ステータスに遷移していた。正しくは、引き続き「次でコメント終了するかも」ステータスに遷移しなければならない。
  • 類似バグ調査/今後の対策:状態遷移表を作成して、全ステータス、全イベントの調査が必要

そんなわけで、「次でコメント終了するかも」ステータスにおける処理を修正しました。といっても、この処理の関数版をこのブログに載せるのはこれが初めてですね。

続きを読む "ソースからコメントを削除する3"

| | コメント (0) | トラックバック (0)

ライト、ついてますか

今年はソフトウェア開発に関する著名な本を読み漁ろうと考えてて、ワインバーグ氏のあの本を、いまさらながら読み始めてます。160ページなのですぐに読み終わると思うのですが、96ページまで読んだ段階で言いたいことが2点あります。

  • 訳が下手
  • 絵が気持ち悪い。図中の日本語のフォントも気持ち悪い

内容について考えるよりもまずそのインターフェースの悪さに辟易してしまいます。原文で読んだほうが良いかも。できれば翻訳しなおしたいくらいです。とりあえず我慢して読んでみます。感想は後ほど。

| | コメント (0) | トラックバック (0)

2007年8月25日 (土)

Rubyその1

さて、ようやくRubyをはじめました。まだまだ、hello,Ruby!とかやってますが、ぼちぼちと勉強していきたいと思います。

で、まだそんなレベルなので、Rubyの中身については書くことができないのですが、今Rubyが流行っている理由について考えたことをちょっと書いてみます。

Rubyが流行っている理由で、今思いつくのは、

  • PCの性能が十分あがってきた(CPUの高速化、メモリの大容量低価格化)
  • オブジェクト指向が浸透してきた
  • インターネットにより、プログラマ間の情報流通が密になり、プログラマ自体の意識が高まってきた
  • 言語仕様のターゲットが、ハードウェア(最適化、高速化)ではなく、アプリケーションのユーザーでもなく、言語の設計者でもなく(!)、それを使うプログラマにフォーカスされている

といったところです。CPUが速くなってきたため、最早、CPUの論理にあわせて書く必要がなくなりました。昔はメモリの効率やら、レジスタの使い方やらを気にして、CPU様に合わせて書いていましたが、昨今の十分速いCPUと十分なサイズのメモリでは、そんなにご機嫌を伺う必要はなく、むしろ、「プログラマ」側への負荷を減らす事の方が、ソフト開発全体を考えたときに、コストメリットが出てきたのだと思います。CPUと人間との界面がプログラミング言語だとすれば、より人間側に近づけても実務上十分な性能がでて、生産性やメンテナンス性のコストを削減できるわけです。

そして、人間側に近いプログラミング言語とは具体的にどのようなものかというと、構造化プログラミングを経て生まれた、オブジェクト指向が現時点ではそれに該当すると思います。余談ですが、個人的にはBASICも十分人間よりだと思いますが、いかんせん大規模開発にはぜんぜん向きませんね。さて、Javaが流行りだした初期の頃は「オブジェクト指向のなんたるか」を良く分らないまま、C-likeなJavaのコードを書きつつ、なんだかなーと思ったりしてた人も、10年もやってるうちに「オブジェクト指向がもたらす理想郷」に対する幻想もすっかりなくなり、オブジェクト指向がどんな風にすれば役に立つのか、どんな風にしたらぐちゃぐちゃになるのか、そもそもオブジェクト指向っていうのは何なのか?が、うっすら分ってきてると思います。そこで現れたのがRubyです。オブジェクト指向を用いてより人間的に考えて記述したい。素直に表現したい。その辺が実現されているわけです。

また、Rubyはかなりプログラマ指向な言語です。Rubyを使う人は、なぜいままで、他の言語はこんなに便利にできていなかったのだろう?と思うのではないでしょうか。Cプログラマな僕はそう思いました。Cはシンプルな機能しか持っていないため、いろいろな「イディオム」を駆使して、仕様を実現しなければなりません。100回同じ事をやろうと思ったら

for ( i = 0; i < 100; i++) {

  /* ごにょごにょ */

]

と書けば良いです。しかしこれはひとつのイディオム、決まり文句であり、「あぁ、確かにこう書けば100回繰り返せるね」の1例にしか過ぎません。100回繰り返したいだけなのですが、iを使う必要は?0から始まる意味は?iは99までだよね?i++ってそんなことわざわざ書いてあげないといけないの?などなど、自由度が高い反面、書き方によってはプログラマの意図が正確に汲み取れない可能性があります。少なくとも、「おそらくこういう意味だと思うが、自分はプログラマの意図を正確に読み取っているのだろうか?」という不安は常に付きまといます。で、Rubyでは、

100.times {

  # ごにょごにょ

}

こう書けます。100回繰り返す。これ以上ないくらい明示的です。このプログラムを読むことになる保守担当者、もしくは一ヵ月後の自分自身はこのセンテンスの意図することは明らかでしょう。プログラムを書く側はついつい読者のことを考えずに、「こう書いた方が楽」、「どうだ、このコードの方が効率がいいだろう!」とかその場で考えて書いてしまいますが得てしてそういうプログラムは複雑で、読者はそのコードがそもそも何を言いたいのかを読み取るのに苦労します。Rubyは書く側の負荷を下げることで、より読みやすいコードを作成することに余力を使うことができます。しかし、「数値もオブジェクトである」って仕様は「へぇー」くらいですが、それにtimesっていうメソッドを用意して、繰り返しを簡単に記述できるようにするというのは、偉大な発明だなぁと思いました。

次回はもうちょっと勉強を進めて、Rubyの内容について書けるようにしたいと思います。

| | コメント (0) | トラックバック (0)

2007年8月18日 (土)

SHA1その2

SHA1の関数でうまくいかない話ですがこの前書いたエントリでは概要だけだったので、実際に何をやったのかを書いておきます。

ソースsha1test.cは、opensslのSHA1()関数を用いて、unsigned charの配列の中身のうち、指定されたバイト分を対象にSHA1アルゴリズムに掛け、求まったハッシュ値を20byteの配列に出力します。(詳細は$ man  SHA1してみてちょ)。

以下は、sha1test.cの中身を表示し、gccを用いてコンパイル・リンクを行い、引数に"hoge"をとって実行してした結果です。最後にecho コマンドと組み合わせてsha1sumコマンドに"hoge"文字列を入力した場合の結果を乗せています。

[lucy@fedora7 sha1test]$ cat sha1test.c 
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>
int main(int argc, char **argv){
  unsigned char *p_target = (unsigned char*)"hoge";//対象文字列
  unsigned char sha1hash[SHA_DIGEST_LENGTH];       //ダイジェスト
  size_t len = 0;
  int ii  = 0;
  if (argc > 1){ // 引数が与えられれば、それを対象文字列とする
    p_target = (unsigned char *)argv[1];
  }
  len = strlen((char *)p_target);       // 対象文字列の長さを計測
  printf("str=%s\n", (char *)p_target); // 対象文字列を表示
  printf("len=%d\n", len);              // 文字列長を表示

  SHA1(p_target, len, sha1hash);        // ダイジェストを計算

  // ダイジェストの値を16進で表示
  for( ii = 0; ii < SHA_DIGEST_LENGTH;ii++ ){
    printf("%02x", sha1hash[ii]);
  }
  putc('\n', stdout);  // 最後に改行を出力
  return 0;
}
[lucy@fedora7 sha1test]$ gcc -Wall -o sha1test sha1test.c -lssl
[lucy@fedora7 sha1test]$ ./sha1test hoge
str=hoge
len=4
31f30ddbcb1bf8446576f0e64aa4c88a9f055e3c

[lucy@fedora7 sha1test]$ echo hoge | sha1sum
eefd5bc2c547bf82b177b6259c13f7723dc876d9  -
[lucy@fedora7 sha1test]$

となります。なんで、下の赤く書いた二行が異なってしまうのでしょう。。。何が悪いのでしょうか。。。というわけで、次回はJavaのMessageDigestクラスを使って実験してみようと思います。

2009/1/2追記:結局これは、「echo がデフォルトでは改行コードを出力する」のが問題でした。改行コードを出力しないようにしたら(echo -n)一致しました。

| | コメント (3) | トラックバック (0)

2007年8月17日 (金)

SPEED HACKS

最近世間ではなんとかHACKSっていうのが流行っているようで、かく言う私もBINARY HACKSも買っちゃいましたが、今回は「スピードハックス仕事のスピードをいきなり3倍にする技術」を読みました。

昔からビジネス系の本には胡散臭さが付きまとってるなぁと思っていたのですが、社会人も何年かやってると、そういう書籍に頼りたい気持ちも分かってくるというものです。何しろ仕事では「これが正解」ってのが無い。世間の流行、お客さんの気まぐれ、上司の気まぐれ、関係者の力関係、声の大小、等々によって、状況が二転三転。ここまでくると、「なるようにしかならないよ。俺らに流れは作れないんだから、無理せず流さに乗るのが賢い選択だよ」というあきらめの境地と、「いや何とかすべきだ。俺が何とかしなくちゃならないんだ。でもどうすべきなんだろう?」という前向きの困惑の気持ちが葛藤を始めます。そこで手に取るのがビジネス本です。コレを読めば前に進めるのかもしれない。「思考は現実化する!」そうなのか?「すごい会議!」どんな会議だろう?

今でもビジネス書にはある程度の疑いの目を向けてはいるのですが、最近は仕事の効率化や自己啓発について、具体的なやり方までを書いた本が出ていていいかも。。と思うことが多いです。特に「効率化/整理整頓」というフレーズに僕は弱くて、どんだけ楽できるんだろう?どんだけ検索でいらいらしなくてすむんだろう?と普段ダメダメな机の上で作業しているものだから、その手の書籍はついつい手にとってしまいます。さてこのスピードハックスもちょっと手にとって面白そうだったので購入したのですが、以下の点が個人的に良いと思います

  • 既存の考え方を実践してみて、著者なりの工夫をして詳解をしているところ
  • 「元に戻せる」ことがスピードアップに貢献しているという指摘
  • 「常連タスクはチェック済みにしてしまう」戦略
  • 「やったことのある作業」と「やったことの無い作業」に分ける戦略
  • タスクを細かく分ける。「洗い出し」の作業をやることで、やるべきことが整理されるし、タスクへ実際に取り掛かる際の精神的負担が軽くなるという指摘
  • 仕事の所要時間を感覚ではなく客観的に計測し、記録に残すという指摘
  • 過去の客観的名所要時間から、現在のタスクにかかる所要時間がより正確に見積もれ、将来がより予測可能になる。その予測可能になることがストレスの軽減になる。という指摘
  • 巻末やコラムに載ってるWebサービスの紹介。知っているものも多いが、知らないものもあったり、競合するサービスを両方紹介していたりして、「自分に合うほうを使ってね」という著者の意識の現われかなと思った

なお、ビジネス書が胡散臭いなぁと思っていた理由は、

  • 雨後のタケノコのように現れては消えるから。普遍的なものではなさそうに見える
  • みんなお金が欲しいと思ってる、だからその周辺でうまい商売をしているだけに見える
  • その例、法則、ルールは、本当に自分(ワタクシ)に当てはまるのか怪しい
  • それを実行することにかけるコストと、メリットの関係はどうなのか
  • そもそも、その本で幸せになれるのか
  • 本を読んで成功できるなら、みんなが読んでいるのでは?
  • 読んだだけじゃダメだ、実行をしなければ。。。というのであれば、正にその実行する部分をなんとかしなきゃいけないんじゃないか?そこまでフォローしてるのか?
  • あなたが成功したのは「運」が良かったからじゃないのか

等でした。ただ、最近の本は、より具体的に、実感をもって、客観的な視線を失わないように書かれているので、なるほどなぁ。と励みになる部分や取り入れてみたい部分もあったりするので、興味深く読めてます。

| | コメント (0) | トラックバック (0)

2007年8月16日 (木)

plaggerって?

plaggerなる便利(だけど敷居の高い)ものがあるらしい。RSSとかperlとかいう分野に親しくないと仲良くなれないとか。今年はRubyちゃんと仲良くなる予定なので、perlちゃんとも仲良くなった方が良いのかな。知り合いぐらいにはなっておきたいな。

RSSリーダーで高速ブログ確認とか、やって意味あるのかなーと思ってやってないんだけど(ひろゆきも否定的みたいだし)、webの世界に、もすこし足を踏み入れてみようかな。

どーもサーバサイドで動くアプリって、性能が回線速度やサーバ側の負荷に依存したり、サーバの急なダウンで使えなくなったり(じっさいはあまり経験無いけど)、データのバックアップが取れてるのかしらと心配になったりと、ネットワーク時代幕開け以前からPCユーザー(ぶっちゃけていえば、88とか98とかMSXとかx68kとかそれ以前から)の人にとってはちょっといまいち信用できないんじゃないかと思うんだけど、考え方を切り替えていった方がいいのかなぁ。古くからの人でWebをハードに使いこなしている人ってのも多いだろうけど。

もう8月だけど、今年のテーマに「Webを身近に使いこなす」ってのを挙げておこう。

| | コメント (0) | トラックバック (0)

2007年8月15日 (水)

SHA1

openssl(libssl.a)に含まれる関数SHA1()を使って文字列(ascii)のハッシュ値を求めるプログラムを作ったんだけど、sha1sumコマンドにechoで文字列を渡したときに表示される値とちがうんだよね。何が悪いのかしら。

| | コメント (0) | トラックバック (0)

2007年8月10日 (金)

ソースからコメントを削除する2

CodeCompleteを読んでいたら、

  • 設計とは決定論的なプロセスではなく、ヒューリスティックなプロセスである
  • ソフトウェアの開発プロセスとは、そのソフトウェアに関する学習プロセスである

と書いてあった。一発で「良い」設計はできないということらしい。というわけで(?)設計というのもおこがましいが、この前書いたソースからコメントを削除するプログラムを早速改良してみた。流行の言葉でリファクタリングって言うのかしら。そんな大層なもんじゃないと思うけど。

/* A main function of this program.
* * 1. check args.
* * 2. open a specified file as an original source code.
* * 3. call delcmt() function, with 2 file streams.
* *    The 1st file stream is original source code,
* *    and the 2nd is stdout which the function write to.
* */
int main(int argc, char *argv[]){
  FILE *fp = NULL;
  int delcmt_result = 0;   // check args
  if(2 != argc){
    printf("usage:%s src_file\n"
           "This program outputs de-commented code of specified file"
           " to STDOUT.\n", argv[0]);
    return -1;
  }   // open an input file.
  if (NULL == (fp = fopen(argv[1], "r"))){
    fprintf(stderr, "can't open %s\n", argv[1]);
    return -1;
  }   // output de-commented source code
  delcmt_result = delcmt(fp, stdout);   // close an input file.
  fclose(fp);   // return result value.
  return delcmt_result;
} /* This function reads original source code from a p_in stream
* *  and writes de-commented source code to a p_out stream.
* *  This function does not delete blank line.
* *  *** args ***
* *  FILE *p_in :an original source code stream read from.
* *  FILE *p_out:a de-commented source code stream write to.
* *
* *  *** return ***
* *  int : 0:OK
* *      -1:NG
* *
* *  *** output ***
* *  This function writes de-commented source code to a file stream p_out.
* *  So, if a p_out is stdout, de-comennted source code is output to STDOUT.
* *    */
int delcmt(FILE *p_in, FILE *p_out){
  int  char0  = 0;
  char state  = NON_CMT;   // check args
  if(NULL == p_in || NULL == p_out){
    fprintf(stderr, "delcmt error 0\n");
    return -1;
  }   // get char from p_in file stream, and
  // output only non-comment character
  // until end of file stream,
  // using 5 states.
  while ( EOF != (char0 = fgetc(p_in))){
    switch(state){
    case NON_CMT:
      state = non_cmt(char0, p_out);
      break;
    case  CMT_SEMI_START:
      state = cmt_semi_start(char0, p_out);
      break;
    case CPP_CMT:
      state = cpp_cmt(char0, p_out);
      break;
    case C_CMT:
      state = c_cmt(char0, p_out);
      break;
    case CMT_SEMI_END:
      state = cmt_semi_end(char0, p_out);
      break;
    default:
      goto error_end;
    }
  }

  // check file stream is end.
  if(!feof(p_in)){
    goto error_end;
  }   return 0; error_end:
  fprintf(stderr, "delcmt error 1\n");
  return -1;
}

ポイントは3点。

  • 各ステップにコメントを追加
  • fclose()のポイントがおかしかったので修正。delcmt()関数を呼ぶ側でfcloseするようにした
  • 各状態における処理を関数化

各関数についてはとりあえず省略。

| | コメント (0) | トラックバック (0)

2007年8月 8日 (水)

ソースからコメントを削除する1

車輪の再発明(劣化コピー)の類だと思うが、C言語系のコメントを削除するコードを書いたので、ここにメモしておきます。

  • /* コメント */ 形式のコメントに対応
  • //行末までコメント 形式のコメントに対応
  • 特に2番目の形式では、行末の改行文字はコメントとはみなさずに残す。そのため、一行まるまる//形式のコメントの場合は、末尾の改行のみが残され、結果として空行が出力される。
  • 1番目の形式でも、1行ずつ/* */で閉じられている場合は、同様に空行になるが、複数行が/* 途中で改行 */ で囲まれている場合は、途中に含まれる改行文字は削除される。
  • そのため、空行を削除したい場合は、別のプログラム(grep -v "^$")で削除する必要がある。

コメントの英語がおかしい/コーディングがおかしい/アルゴリズムがおかしい、色々あるかと思いますが、良ければコメントください。

#include <stdio.h>
#include <string.h>
#include "delcmt.h"
/* A main function of this program.
 * 1. check args.
 * 2. open a specified file as an original source code.
 * 3. call delcmt() function, with 2 file streams.
 *    The 1st file stream is original source code,
 *    and the 2nd is stdout which the function write to.
 */
int main(int argc, char *argv[]){
    FILE *fp = NULL;
    if(2 != argc){
        printf("usage:%s src_file\n"
             "This program outputs de-commented code of specified file"
             " to STDOUT.\n", argv[0]);
        return -1;
    }
    if (NULL == (fp = fopen(argv[1], "r"))){
        fprintf(stderr, "can't open %s\n", argv[1]);
    return -1;
  }
  return delcmt(fp, stdout);
}

/* This function reads original source code from a p_in stream
 *  and writes de-commented source code to a p_out stream.
 *  This function does not delete blank line.
 *  *** args ***
 *  FILE *p_in :an original source code stream read from.
 *  FILE *p_out:a de-commented source code stream write to. 
 *
 *  *** return ***
 *  int : 0:OK
 *      -1:NG
 *
 *  *** output ***
 *  This function writes de-commented source code to a file stream p_out.
 *  So, if a p_out is stdout, de-comennted source code is output to STDOUT.
 *    */
int delcmt(FILE *p_in, FILE *p_out){
  int  char0  = 0;
  int  char1  = 0;
  char state  = NON_CMT;
  if(NULL == p_in || NULL == p_out){
    fprintf(stderr, "delcmt error 0\n"); 
    return -1;
  }
  while ( EOF != (char0 = fgetc(p_in))){
    switch(state){
    case NON_CMT:
      switch(char0){
      case '/':
        char1 = char0;
        state = CMT_SEMI_START;
        break;
      default :
        if(EOF == fputc(char0, p_out)){
          goto error_end;
        }
        state = NON_CMT;
        break;
      }
      break;
    case  CMT_SEMI_START:
      switch(char0){
      case '/':
        state = CPP_CMT;
        break;
      case '*':
        state = C_CMT;
        break;
      default:
        if(EOF == fputc(char1, p_out)){
          goto error_end;
        }
        if(EOF == fputc(char0, p_out)){
          goto error_end;
        }
        state = NON_CMT;
        break;
      }
      break;
    case CPP_CMT:
      switch(char0){
      case '\n':
        if(EOF == fputc(char0, p_out)){
          goto error_end;
        }
        state = NON_CMT;
        break;
      default:
        state = CPP_CMT;
        break;
      }
      break;
    case C_CMT:
      switch(char0){
      case '*':
        state = CMT_SEMI_END;
        break;
      default:
        state = C_CMT;
        break;
      }
      break;
    case CMT_SEMI_END:
      switch(char0){
      case '/':
        state = NON_CMT;
        break;
      default:
        state = C_CMT;
        break;
      }
      break;
    default:
      goto error_end;
    }
  }
 
  if(!feof(p_in)){
    goto error_end;
  }   fclose(p_in);
  fclose(p_out);   return 0;   error_end:   fclose(p_in);
  fclose(p_out);   fprintf(stderr, "delcmt error 1\n");
  return -1;
}

delcmt.hでは、「状態」を定義する定数を#defineするのと、関数の宣言をしているだけ。

#define NON_CMT        0
#define CMT_SEMI_START 1
#define CPP_CMT        2
#define C_CMT          3
#define CMT_SEMI_END   4

int delcmt(FILE *fp_in, FILE *fp_out);

中身の説明ですが、1文字ずつfgetcして、以下の5状態を遷移しつつ、非コメントの文字だけを出力しております。

  • コメント外の状態、
  • /が来てコメントが始まるかも知れない状態
  • /に引き続き/が来て、行末までコメントの状態
  • /に引き続き*が来て、コメントになった状態
  • コメント中に*が来てコメントが終わるかも知れない状態

拡張性を考えて、int delcmt(FILE*, FILE*)は、ファイルストリームを引数に受け取るようにしてあり、stdinでもstdoutでも実際のファイルでも、何でも受け付けられるようにしてあります。

なお、

/* コメント/*コメント*/コメント */

この様な入れ子のコメントには対応していません。この場合は、

/*コメント/*コメント*/本文本文*/

と解釈されます。

| | コメント (0) | トラックバック (0)

2007年8月 7日 (火)

coLinuxその3

インストールメモ。全然整理されていないけど、インストール時に書いたメモを、最小限の修正で、そのまま貼り付けておきます。後でまとめてすっきりさせたいな。あと現状の課題の整理もしないと。

coLinuxインストール

■■■■■coLinux 0.6.4編■■■■■
■ダウンロード
○sorceforge
http://sourceforge.net/project/showfiles.php?group_id=98788

○coLinux-stable
・coLinux-0.6.4.exe
・colinux-0.6.4-20060912-update.zip

○Root FS Images - 2.6.x-based
・Fedora-7-20070612.exe

■インストール
○1.インストール
coLinux-0.6.4.exe実行
・インストール先はd:\coLinux
・root FSだけチェックoff

途中WinPcapのダウンロード&インストールを指示されるので、
http://winpcap.mirror.ethereal.com/install/default.htm
からWinPcap_4_0.exeをダウンロードし、実行してWinPcapをインストール。

○2.パッチ当て
colinux-0.6.4-20060912-update.zipを展開。
4つの.exeをd:\coLinuxにコピー。3つは上書き。1つは追加。

○3.Fedora7イメージ展開
Fedora-7-20070612.exeを実行。rarの自己解凍ファイルなので、
Fedora7のファイルシステムイメージが展開される。
ディレクトリ無しで展開されるので注意。中身の一覧は、
Fedora-7.img
README-Fedora-7.txt
start-Fedora-7.bat
start-Fedora-7.sh
swap.img

これらをd:\coLinuxに移動

■起動
○1.coLinux起動
コマンドプロンプトを起動し、start-Fedora-7.batを実行
★windowsがブルースクリーンに!!
対処法は2つあるみたい
☆対処案1coLinux7.4のTAPドライバを利用
http://tzlog.blogspot.com/2007/06/vista-colinux-centos44.html
> TAPドライバは、coLinux-0.7.1-20070326版のを使用した。
> このバージョンならブルースクリーンになることはないようだ。
> 0.6.4とかのTAPドライバだと起動時にブルースクリーンになる。
> まず、coLinux-0.7.1-20070326をインストールし、そのままの状態で
> coLinux-0.6.4をインストールする。このときTAPドライバはインストールしないで
> 本体だけインストールする。使うのはcoLinux-0.6.4の方。

☆対処案2 XPsp2のデータ実行防止(DEP)を無効にする
http://saikyoline.jp/weblog/2006/03/colinux_2.html
「システムのプロパティ」の「詳細設定」タブ
「起動と回復」の「設定」
「起動システム」の「編集」
上がってきた(はず)のメモ帳で
「/NoExecute=OptIn」→「/NoExecute=AlwaysOff」
と変更し保存
OS再起動

→☆対処案2を実行し、起動!

■インストール後の設定
ここを参考に
http://scratchpad.fc2web.com/colinux/install/index.html
http://kajuhome.com/yum.shtml#n07-02

# yum update
をしたら、coLinuxが落ちるようになってしまった。(;;

■windows再起動
翌日はなぜか起動するようになった。
#colinuxコンソールでのrebootがまずいのか??

どうやら英語キーボードとして動作しているので調べたところ、
/etc/sysconfig/keyboard

KEYTABLE="jp106"
とすればよいらしい。
参考URL
http://itpro.nikkeibp.co.jp/article/COLUMN/20061027/252022/

しかし、設定の反映方法が分からない。上記ページのやり方では
そんなserviceは知りませんといわれる。再起動によって無理やり反映。
#やはりcolinux上でのrebootは良くないようだ。。。

■networkの設定
次は、ネットワークの設定がよくわからない。
・poderosaからリモートでログインしようとしてもログインできない。
・windows上では「ローカル エリア接続 3」にTAP-Win32の仮想NICが見えているが、
 ケーブルが接続されていないとアイコンに×がついている
・colinuxでifconfigをすると、eth0には10.0.2.15/24の値が出ている
・colinuxで# ssh -lucy localhostではログインできる。

127.0.0.1:1がvncのアドレスとかってメッセージが出ているので、そっちでやってみる。

■VNCクライアントのインストール
・UltraVNCをダウンロード
http://sourceforge.net/projects/ultravnc

UltraVNC-102-Setup.exe
を実行してインストール。
途中、インストールするコンポーネントを選ばされるが、よくわからないのでとりあえず全部入れる。
サーバの設定項目は、とりあえず使わないので全部off。関連付けとデスクトップアイコンだけon。

■UltraVNC Viewer起動
デスクトップのUltraVNCViewerを起動する。
127.0.0.1:1を設定してconnectを押すが、Connection failedと出る。
#当たり前か。。。

■coLinux 0.6.4アンインストール
d:\coLinuxより、fedora7系のファイルはmvしておき、アンインストール。
coLinux 0.7.1の方が良いと友人のアドバイスがあったため。

■■■■■coLinux 0.7.1編■■■■■
■coLinux 0.7.1ダウンロード
上記source forgeより
coLinux-0.7.1-20070326.exe

■coLinux 0.7.1インストール
coLinux-0.7.1-20070326.exeを実行。
Root Filesystem image Downloadはoff
インストール先はd:\coLinux
WinPcapはgetしない
TAP-Win32 Adapter V8(coLinux)の警告は「続行」

■退避していたfedora7のイメージを戻し、fedora7.batを起動
 相変わらず、Xが表示できないのエラーがでるので、全部No。
 で、コマンドプロンプトが表示される。

■相変わらず、XPのネットワーク接続はケーブルが接続されていません。のまま

■colinux 0.7.1では 設定ファイルがxmlからxxx.conf形式になり、

> colinux-deamon.exe @xxx.conf
と起動する模様。xxx.confには、さまざまなオプションが書ける。
詳細は、coLinux付属のcolinux-daemon.txt参照
#コマンドラインパラメータでも良いらしい。

で、myfedora7.confの内容(コメントは省略)
-----ここから-----
kernel=vmlinux
cobd0="d:\coLinux\Fedora-7.img"
cobd1="d:\coLinux\swap.img"
root=/dev/cobd0
ro
initrd=initrd.gz
mem=256
eth0=tuntap    ←★こいつがミソ。
-----ここまで-----

こんな風にして、起動バッチファイルstart-Fedora-7.batを
-----ここから-----
colinux-daemon.exe @myfedora7.conf
-----ここまで-----

と、上記myfedora7.confを読み込むようにした。

・XP側のTAP-Win32のローカル接続のIPアドレスを192.168.0.1/24に設定。

・coLinuxのeth0(/etc/sysconfig/network-scripts/ifcfg-eth0を
  192.168.0.2/24
  デフォゲ192.168.0.1
 に設定。詳細は以下
[lucy@localhost network-scripts]$ more ifcfg-eth0
# Realtek Semiconductor Co., Ltd. RTL-8029(AS)
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
#BOOTPROTO=dhcp
IPADDR=192.168.0.2
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
GATEWAY=192.168.0.1

また、DNSを設定
[lucy@localhost etc]$ more /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 192.168.2.1

■Poderosaでssh2でログインできた。
★VNCが繋がらない。
★nslookupもftp(クライアント)も無い。こまる。

■VNCサーバを起動する必要あった
$lucy> vncserver
とするとパスワードを聞かれるので、2回入れる

その後、XPからUltra@VNCで192.168.0.2:1に接続すると、passwordを聞かれ、
上記パスワードを入れたらXに接続できた!

# yum groupinstall "GNOME Desktop Environment"
にて、gnomeをインストール中

■VNCサーバ自動起動の設定
# chkconfig --add vncserver

これで自動起動

■VNCサーバのconfigの修正
[lucy@localhost sysconfig]$ more /etc/sysconfig/vncservers

VNCSERVERS="1:lucy"

ディスプレイ番号:1で接続できるようにした。

■日本語
・# pirutによるパッケージの追加で、japaneseを追加
・システム→管理で、japaneseを選択
・LANGの設定(UTF-8)
[root@fedora7 sysconfig]# pwd
/etc/sysconfig
[root@fedora7 sysconfig]# more i18n
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

■テキストログイン
起動時にxを自動起動させないために、
/etc/inittabで下記のように修正

id:5:initdefault:


id:3:initdefault:

#もしかしたら、xdmの設定でも何とかなるのかな?

■ホスト名の設定
[root@fedora7 sysconfig]# pwd
/etc/sysconfig
[root@fedora7 sysconfig]# more network
NETWORKING=yes
HOSTNAME=fedora7

相変わらず日本語入力ができてないのですが、それはまた後ほど。。

■課題

  • 日本語入力ができない
  • coLinux FS(?)が使い方が分からない。これでホストOS(WinXP)とファイルのやり取りができるのかな
  • 音が出ない(?)
  • ftpコマンドが無い(ベースのパッケージとやらを入れたら入った!)
  • 解像度がXGA

| | コメント (0) | トラックバック (0)

« 2007年7月 | トップページ | 2007年9月 »