丁稚な日々

Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...

[直前] [最新] [直後] [Top]

Jan.2,2003 (Thu)

Revision: 1.1 (Jan.02,2003 17:55)

謹賀新年

_ 明けましておめでとうございます。
今年もよろしくお願いします。

_ 本格始動は明日の夜以降。
まだ実家にいるのです。

_ [ruby-talk:60221](もう6万通超えたのか!)のwin32_popenは面白そう。

Jan.3,2003 (Fri)

Revision: 1.1 (Jan.03,2003 19:36)

Jan.4,2003 (Sat)

Revision: 1.7 (Jan.04,2003 19:53)

[mswin32] "wb+"

_ [ruby-dev:19299]の確認用コード。
正常動作させるにはコメントアウトしてるfflush()が必要。

#include <errno.h>
#include <stdio.h>

int main(void)
{
    FILE *fp;
    int n;
    char c;

    fp = fopen("db", "wb+");
    fputc('.', fp);
    /* fflush(fp); */
    while (1) {
        n = fread(&c, 1, 1, fp);
        if (n == 0) {
            printf("errno = %d\n", errno);
            printf("feof() = %d\n", feof(fp));
            break;
        }
        printf("%02x\n", c);
    }
    fclose(fp);

    return 0;
}

前にruby-devで似たような話題があったような記憶があるんだけど、どれだろう?
... [ruby-dev:18426][ruby-dev:18439]かな?
とすると、えーとえーと、NEED_IO_FLUSH_BETWEEN_RW#defineするだけでいいのかな。

_ うーむ、bccwin32ではまた微妙に違うらしい。
少なくともfflush()では救えない。代わりにfseek()を使えば救えるらしくはあるのだけど。
後はbccな人にまかせよう。

_ おまけ。
その後の調査結果。

更新ストリームに対して、出力操作の後にfflush関数若しくはファイル位置付け関数を呼び出さずに入力操作を行っている場合,又は入力操作の後にファイル位置付け関数を呼び出さずに出力操作を行っている場合

は、未定義っつーことだそうです(JIS X 3010-1993 プログラミング言語C 附属書G.2(未定義の動作)より引用)。
... ん? すると、bccでfflush()で救えないのは規格不適合なんでわ!?

[mswin32] system(array)

_ do_aspawnパッチ(なかださん改良版)をcommit。
おかげさまで楽できました。ありがたや。

SEGV

_ 思い出してしまったけど、手元に20分の1くらいの確率でSEGVで落ちるスクリプトがあるんだった。
しかも、

$ ruby -v
ruby 1.6.8 (2002-12-24) [i586-linux]

なのだ。ダメじゃん。

_ 実は1.6.7の頃からちょくちょく落ちてたんだけど、手元のi386-netbsdelf1.6*なstable-snapshotでは落ちないようなので気にしないことにしていたのだ。
でも1.6.8に変わってもやっぱり落ち続けている模様。
落ちる場所は様々。複数threadが同時に動いているところばかりなので、threadが怪しいのかなぁ。

_ 他に全然こういう話を聞かないのも不思議。格別変わったことはしてないはずなんだけど。
なぜかcoreが残っていないので原因追求もさっぱり進まず。似たような動きをする(ような気がする)適当なスクリプトじゃ再現しないし。
そもそも人様のマシン(つーかこの日記がある鯖です)なので環境関連の細かいこともさっぱりわかってなかったり。
とりあえず、--enable-sharedはついてないみたいだけど、これも関係あるんだかないんだか...

Jan.5,2003 (Sun)

Revision: 1.1 (Jan.05,2003 03:38)

[RAA]

_ [ruby-talk:60539]で「スクリプトからRAAのエントリを更新したいよーん」(意訳)と言われたので、raa-updateなるものをでっちあげてみた。

_ うーむ、既存のエントリの情報を取れるようにすべきだよなぁ、きっと。
まぁいいや、誰かがなんとかするだろう。必要なら。

[mswin32] oldname

_ それもそうですね
というわけでcommitしました。
主体性のないヤツ...<自分

Jan.6,2003 (Mon)

Revision: 1.5 (Jan.06,2003 19:04)

[RAA] owner

_ 名前+メールアドレスの組にid振ってますので、複数ある人は統一しましょー。
このidは2.0.0からあったような。つまり2ヵ月半ほど前から。

_ こちらも同種の話かな。
私のアナウンスメールはなひさんの[ruby-talk:60530]の翻訳です。つまり、なひさんに英語で書かせて自分は楽をするという極悪ぶり。

[mswin32] config.h

_ [ruby-win32:438]からのスレッド。
commitされてからようやく意味がわかった。遅い。

[mswin32] To-Do

_ いくつか消費したので再整理。
といっても、後から出てきたものがなぜか優先されてしまうというスタック状態なので長期的に見たら全然変わってなかったり...

_ 順不同:

  1. file.cのドライブレター対応
  2. File.joinでの正規化
  3. dir.c(Dir.glob系)の`\'対応
  4. execで/bin/shを呼んじゃうのの修正
    しまった、systemの修正のときに仕込みをするつもりで忘れてしまった...
  5. registry.rb
  6. lib/resolv.rbのWin32対応
  7. NT系でのコンソールへのWriteFile()バグの対応

_ 1・2・5はさっさとやろう。
3は誰かコード書いてください。今だとルールが固定したっぽいからできそうだな。
4は既にコードはあるんだけど、ちょっと考え直そう。do_spawn()do_aspawn()P_*の引数追加するのがいいかなぁ。
6は保留。
7はどうしようかなぁ。

_ とりあえず、今月の早いうちにいくつかは処理しよう。
その後は忙しくて手が出せなさそうだし。

[mswin32] exec

_ 上記の4をcommit。
proc_exec_n()はもうちょっと考慮した方がよかったかもしれない。

_ ところで、先日から

% /usr/local/bin/ruby -v -e 'p system(["echo", "hoge"], "aaa")'
ruby 1.6.8 (2002-12-24) [i386-netbsdelf1.6K]
false
% ruby18 -v -e 'p system(["echo", "hoge"], "aaa")'
ruby 1.8.0 (2003-01-05) [i386-netbsdelf1.6K]
aaa
true

なっていて(*1)、このcommitでexecもこれに追従したんだけど、よかったのかしらん。
使い勝手の話からすれば個人的には大歓迎ではある。

[mswin32] drive letter

_ 上記の1・2をcommit。
cygwinでの処理があれでいいのかは不安。なんかやりすぎちゃってるような気が。

_ しかし、あれもこれも、1.8になってから慌ててcommitするようじゃダメだよなぁ。反省。

付記

(*1) なっていて
従来はsystemexecの第一引数が配列の時は、ちゃんとコマンドをパス付きで指定する必要があった。
なぜこういう仕様だったのかは不明。そもそもあまり知られていない機能ではある。

Jan.8,2003 (Wed)

Revision: 1.5 (Jan.08,2003 20:28)

関西Ruby新年会

_ もう昨日になっちゃったけど、[ruby-list:36904]で告知してます。
なお、連絡用メーリングリストのアドレスを間違えてます。正しいアドレスは[ruby-list:36907]参照。
QuickMLにはもちろん何の罪もないんですが、なぜかQuickMLで作ったメーリングリストを告知するときは何かしらミスってしまうなぁ...

_ 今回の幹事はあづみさんにお願いしました(事実上押し付けたようなものかも)。
いや、来週末もその次の週末も関西近辺にいないとか、いろいろ忙しくて...

Jan.9,2003 (Thu)

Revision: 1.1 (Jan.09,2003 05:14)

風邪

_ 早く寝すぎたせいかヘンな時間に目が覚めてしまった。
風邪はなんか治ったっぽい。早期対策はやはり有効か。

[mswin32] rbconfig.rb

_ え? 正しくないですか?
1.6以降は特に問題ないと思ってたのですが。

[mswin32] Win32API.rb

_ こうかしらん?

--- ext/dl/sym.c	2002/12/24 11:41:32	1.10.1002.4
+++ ext/dl/sym.c	2003/01/08 20:11:03
@@ -362,2 +362,5 @@ rb_dlsym_call(int argc, VALUE argv[], VA
 	}
+	else if( FIXNUM_P(argv[i]) && FIX2INT(argv[i]) == 0 ){
+	  ANY2P(args[i]) = DLVOIDP(0);
+	}
 	else{
@@ -420,3 +423,3 @@ rb_dlsym_call(int argc, VALUE argv[], VA
     case 'L':
-      ANY2L(args[i]) = DLNUM2LONG(argv[i]);
+      ANY2L(args[i]) = NUM2ULONG(argv[i]);
       PUSH_L(ftype);

でも、Win32APIのためにdlの仕様を変えちゃっていいのかなぁ?

Jan.10,2003 (Fri)

Revision: 1.2 (Jan.10,2003 13:39)

SOAP4R

_ ぜんぜん何もわかってないのだけれど、RWikiのなひさんの書き込みを参考にちょっと触ってみたり。
おもしろーい。

_ それはそれとして、1.8だと山のような警告でくらくらに。
Object#typeの影響はやっぱり大きいなぁ。

Ruby in 2002

_ そろそろ旬を過ぎたかな。
英訳もあります。素晴らしい。

_ 海の向こうでもやってます。というかあっちが本家。
本家のまとめの和訳もあります。訳はいまいちだけど。

_ これらとは別に、僕の目から見た「Ruby in 2002」って話をすると、1.6にバグを入れてたことが発覚したのが一番印象深い。ってダメじゃん。
まぁ、仕込んだのは2001年だけど。


被捕捉アンテナ類
[\ay antenna (testing)] [Ant] [Antenna-Julia] [LayserあんてなV2] [nAntenna] [nuance de Antenna] [Rabbit's Antenna] [Read List] [Ruby hotlinks 五月雨版 (るるりん。)] [してたま (私的アンテナ with たまてばこ)] [ただのあんてな] [ちゃらんぽらん] [でこぽんリンク] [なよろアンテナ] [にっきトレーサー] [偽善者あんてな - 2nd season -] [湘南日記放送局(SDB)] [はてなの各アンテナ]