丁稚な日々

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

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

Jan.21,2003 (Tue)

Revision: 1.2 (Jan.21,2003 17:06)

shebang

_ ぼんやりとruby-talkを眺めていたら、[ruby-talk:62057][ruby-dev:19370]の話が出ていた(気付くの遅い)。

_ このスレッドでは「RPMみたいなバイナリパッケージでインストール先が変わったら困るじゃんかよー」とか言われている。
あー、そうかー、これがデメリットかもなぁ、と思ったけど、なかださんがあっさりと反論していらっしゃるのであった。
ま、そりゃそうだわなぁ。

_ ... 今気付いたけど、一番困るのは自分のような気がしてきた。
どうするかなぁ。ドキュメントに「irb.batとerb.batの中身は自分の環境に合わせて書き換えてね」とでも書いておく? そりゃひどいかも。

_ ま、それはそれとして、まつもとさんの了解が出たのでcommit。

Jan.22,2003 (Wed)

Revision: 1.4 (Jan.22,2003 23:27)

[mswin32] pipe

_ とある要件でruby-devを調べていて、[ruby-dev:18080]を再発見。
あうー、試そうと思って忘れたままだった。5ヶ月も経ってるよ。すみません。

_ いきなりパッチを適用して場当たり的なテストをやっても仕方ないので、rubiconを参考にまずはいくつかテストケースを用意してみる。
で、現状で全てのテストを通過することを確認。
ではパッチを適用して、いざテスト。
...
こんなんで固まっちゃいます。

ruby -e "IO.popen('cat', 'w') do |r| r.puts('hoge') end"

_ 固まっちゃう理由は、パイプのRuby側を閉じてもcat側でEOFが検出されないから。
よってcatはいつまでも待ち続け、Rubyもcatの終了を待ち続けるので固まってしまう。
ん? どっかで聞いたような話だな。

_ 調べてみたら2001年の11月26日の日記にまったく同じことを書いていた(*1)
で、その時はSDKのヘルプを参考にして解決した、とか書いてある。
で、そのとき参考にしたSDKのヘルプ(*2)というのはどうやらこれらしい。
これによると、

The parent process uses the other ends of the pipes to write to the child process's input and read the child process's output. The handles to these ends of the pipe are also inheritable. However, the handle must not be inherited. Before creating the child process, the parent process must use DuplicateHandle to create a duplicate of the application-defined hChildStdinWr global variable that cannot be inherited. It then uses CloseHandle to close the inheritable handle.

ということだそうで、やはりDuplicateHandle()は必須ということか。つーか一度調べたことを忘れないように>自分

_ というわけで、DuplicateHandle()は仕方ないとして、CreateChild()の後ろの三つの引数を使ってもうちょっと整理できるんじゃないか、という気は確かにする(そもそもそのために用意した引数だったような)。
でもなぁ、このサンプルもSTARTUPINFOhStd*は使ってないんだよね...

[mswin32] pipe (その2)

_ [RAA:win32_popen]も眺めたりして考えてみた。
あ、SetStdHandle()するのをやめて、標準ハンドルになるべきハンドルをCreateChild()に渡せばいいのか。当たり前といえば当たり前。
んじゃ実験実験... ふむ、うまくいくような雰囲気。

_ 全テストケースも通って、特にリークなどもなさそうだったのでcommit。
これでCreateChild()の後ろ三つの引数も意味が出てきた。よかったよかった。
あ、ChangeLogに由来を書くの忘れた...

付記

(*1) 書いていた
当時の日記はもうオンライン上にはありません。

(*2) SDKのヘルプ
[ruby-dev:18081]で「MSDNのサイトを辿ると404になる」とか当時は書いてたけど、今日調べたらちゃんと見つかった。

Jan.23,2003 (Thu)

Revision: 1.1 (Jan.23,2003 01:14)

core

_ 久し振りに家のサーバでcoreった。
ちと長いけど、こんなん。

% gdb /usr/local/bin/ruby ruby.core
GNU gdb 5.0nb1
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386--netbsdelf"...
Core was generated by `ruby'.
Program terminated with signal 4, Illegal instruction.
Reading symbols from /usr/libexec/ld.elf_so...done.
Loaded symbols for /usr/libexec/ld.elf_so
Reading symbols from /usr/local/lib/libruby.so.16...done.
Loaded symbols for /usr/local/lib/libruby.so.16
Reading symbols from /usr/lib/libcrypt.so.0...done.
Loaded symbols for /usr/lib/libcrypt.so.0
Reading symbols from /usr/lib/libm387.so.0...done.
Loaded symbols for /usr/lib/libm387.so.0
Reading symbols from /usr/lib/libm.so.0...done.
Loaded symbols for /usr/lib/libm.so.0
Reading symbols from /usr/lib/libc.so.12...done.
Loaded symbols for /usr/lib/libc.so.12
Reading symbols from /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/digest/md5.so...
done.
Loaded symbols for /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/digest/md5.so
Reading symbols from /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/digest.so...
done.
Loaded symbols for /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/digest.so
Reading symbols from /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/nkf.so...done.
Loaded symbols for /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/nkf.so
Reading symbols from /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/socket.so...
done.
Loaded symbols for /usr/local/lib/ruby/1.6/i386-netbsdelf1.6K/socket.so
#0  0x481ab0c2 in memcpy () from /usr/lib/libc.so.12
(gdb) up
#1  0xb4c3815b in ?? ()
(gdb) up
#2  0x48083b71 in stack_extend (th=0x0, exit=1208942592)
    at ../ruby-1.6.8/eval.c:7505
7505        rb_thread_restore_context(th, exit);
(gdb) up
Initial frame selected; you cannot go up.

stack_extend()rb_thread_restore_context()からしか呼ばれておらず、thexitrb_thread_restore_context()からそのまま渡されている。
一方、rb_thread_restore_context()は数ヶ所から呼ばれているが、exitは定数であり、1から6までしかありえない。
と、いうことは、スタックが壊れてるということなのかな。

Jan.24,2003 (Fri)

Revision: 1.4 (Jan.24,2003 20:35)

こんなに赤いのに

_ # Rubyとぜんぜん関係ないです。
某IRCチャンネルにて

>unak< 朝日新聞乱心中 http://www.asahi.com/tech/apc/K2003012400468.html
>unak< ここはZDNetでつか?
<H****> 赤いからじゃないか?

激しくワラタ。

Fileクラスに欲しいものー

_ IRCのネタ。

_ File.native_path

def File.native_path(path)
  if defined?(File::ALT_SEPARATOR)
    path.gsub(Regexp.compile(Regexp.quote(File::ALT_SEPARATOR)), File::SEPARATOR)
  else
    path.dup
  end
end

_ File.relative_path
先日の[ruby-list:36983]のネタに近い(下記は[ruby-list:36985]のパクリ)。

def File.relative_path(abs_path, from = Dir.pwd)
  sep = /#{File::SEPARATOR}+/o
  base = File.expand_path(from).split(sep)
  target = File.expand_path(abs_path).split(sep)
  while base.first == target.first
    base.shift
    target.shift
  end
  File.join([".."] * base.size + target)
end

これだとドライブレターに対応できてないけどね。

Jan.26,2003 (Sun)

Revision: 1.1 (Jan.26,2003 03:40)

らぐやねん新年会

_ 昨夜のことになっちゃうけど、無事行われました。
今回も楽しかったです。例によってRubyネタ少なかったけど...
報告などはこちら

Jan.28,2003 (Tue)

Revision: 1.1 (Jan.28,2003 07:17)

((x ^ 2) == (x * x))

  1. <C言語>とはANSI/ISO/JIS Cであるとする
  2. xは整数とする
  3. 整数に対して2の補数表現を用いる処理系を想定する

という条件をつけると、

_ x ^ 2は、二進数表現の下から2桁目だけが必ず変化するので、x ^ 2は必ずxよりも2大きいか2小さい値となる。
ところが、x * x - xを考えると、xが2より大きい場合、その差は常に2より大きくなる。
よって、題意を満たす数xについて、-2 <= x <= 2が成り立つ。
そこで、条件を満たす全ての整数について考えると、

 xが-2の場合、-2 ^ 2 = -4, -2 * -2 = 4。よって不成立。
 xが-1の場合、-1 ^ 2 = -3, -1 * -1 = 1。よって不成立。
 xが 0の場合、 0 ^ 2 =  2,  0 *  0 = 0。よって不成立。
 xが 1の場合、 1 ^ 2 =  3,  1 *  1 = 1。よって不成立。
 xが 2の場合、 2 ^ 2 =  0,  2 *  2 = 3。よって不成立。

となる。
ゆえに、題意を満たす整数xは存在しない。

_ ってことでいいのかな。
上の3つの条件の1や3を外すと、なんでもありになる(そういう処理系を想定すればよい)。
上の条件の2を外すと、浮動小数点値で条件を満たすxがあるかもしれないし、マクロで条件を満たすxを作り出すことも可能らしい。

Jan.29,2003 (Wed)

Revision: 1.6 (Jan.29,2003 15:36)

((x ^ 2) == (x * x))

_ ANSI/ISO/JIS Cでは、最小の整数型はchar(厳密に言うとsigned char)で、許される最小のビット幅は8です... って調べてて思ったんだけど、8bitって決まってたっけ?
7bitとかでもかまわなかったような記憶があるんだけど、5.2.4.2.1には8bit以上だと明記されているように読める。

_ charより小さいビット幅の型を作り出す方法としてビットフィールドがありますが、((x ^ 2) == (x * x))という条件だと暗黙の型変換でintに格上げされてしまうので、残念ながら条件を満たすことはできなくなります。

_ ... あってるかな。あってるといいんだけど。

初めてのRuby

_ 先日も書いたけど、1.4.2が初めて触ったRubyのバージョン。
でも、これ以前からRubyの存在自体は知ってたはずなんだよなぁ。いつ、どうやって知ったんだろう? 雑誌? ネットワーク?
Perlを始めて触ったのが1995年で、それよりは後のはず。というか、RubyがNetNewsに登場したのが1995年12月ということだから、Perlを始めて触ったときはRubyを知る由もなかったということのようだ。

require

_ なんとなく発見してしまったので反応。
requireの件は$:.unshift(File.dirname(__FILE__))とか入れておくと吉、という話でしょうか。
なんかつい最近2chで見たような話題ですね。

_ 文字コード違いのスクリプトをrequireすると、というのは、1.6.8でも変わってないし、1.8でもおそらく変わらないでしょう。

[BREW]

_ 某IRCチャネルの話題から。

_ 国内初のBREW本格対応端末登場なんだそうだけど、C/C++で書いたソフトが動くようなので、Rubyが移植できるかも、と思ってちょっと調べてみた。
ぜんぜん中身がわからないので、移植実現性などはなんとも言えないんだけど、互換性テストの価格を見てしょぼーん。
ひょっとして、バイナリを更新するたびにこれだけ払わないとダメですか?
これじゃ移植が可能だとしても配布できないじゃん...

_ というわけで、夢は一瞬で消え去ったのであった。
ユーザを増やしたかったら、フリーなソフトウェアの取り込みも考慮すべきですよ>クアルコムさん

Jan.30,2003 (Thu)

Revision: 1.4 (Feb.03,2003 04:56)

Cygwin

_ 間違えてCygwin環境をふっ飛ばしてしまった。くすん。
まぁ、以前から少しおかしかったから、入れなおすいい機会ではあるか。

[RAA] 2.3

_ いちおう反応してみたり。
なお、本気で気になるならruby-listかwebmaster@ruby-lang.orgあたりにメールしていただいた方がいいと思います。

_ <h2>大き過ぎ。
そうかも。2.2からそうだったんですけど、その頃は気にならなかった?

_ バージョンの省略。
省略されていてわかんない、という問題はわかりますけど、「だって長すぎるんだもん」としか答えようがないです。
あやしいと思ったらワンクリックしてね。

_ New ArrivalとRecent Updateの関係は、お察しのとおりです。

Jan.31,2003 (Fri)

Revision: 1.4 (Jan.31,2003 17:29)

Cygwin

_ 昨日ふっとばした環境はいちおう復旧した。
副作用でいろいろバージョンが新しくなっちゃったな。

_ とりあえずCygwin版Rubyとmingw32版Rubyを作ってみたところ、だいたいちゃんと動くんだけど、どちらもWin32API.soだけ落ちる。
ふと思い立って、gccのバージョンを落として(*1)Win32API.soを作り直してみたら、どちらも無事動いた。
ふーむ、やはりバージョンが上がりすぎたのが原因かなあ。
まあいいか、ヒマな時に考えよう。

付記

(*1) gccのバージョンを落として
3.2 20020927 → 2.95.3-10


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