Rubyist Magazine 13

投稿者 akira 2006-02-20 15:00:00 GMT

お、いよいよHotlinksに咳さん登場だ。

雑誌拾い読みメモ: 日経ソフトウェア 2006.03号 1

投稿者 akira 2006-01-31 15:01:00 GMT

「Railsアプリケーションを日本語化しよう」という記事の「ステップ1」に以下のような記述があった。

まず、RailsでのRubyの動作モードを、データベースに合わせてUTF-8モードに変更します。(略)environment.rb(略)を開き、先頭に以下のコードを追加してください。

$KCODE = 'u'

$KCODEは、Rubyの処理する文字コードを指定する特別な変数で、uはUTF-8を表します。

この設定によりRubyの動作モードがUTF-8モードになります。

[日経ソフトウェア 2006.03号(68ページ)より引用]

以前も同様の説明を読んで、一般的にそういうものなのかなあと疑問に思ったのだった。というのも$KCODEの指定は正規表現のマッチの仕方を変えてしまうので、副作用が大きすぎるのではないかと思えるので。

で、実際にはRailsでどういう対応がなされているのかとざっくり調べてみたところ、直接的にはactionpack/lib/action_view/helpers/text_helper.rbで定義されているtrancateメソッドで文字列の切りつめのためにString#split//を渡して文字に分割した後にArray#joinで必要な長さの部分文字列を得るというのをやっている程度に見える。

その他、検索した中では次のようなのが見つかった。

$KCODE = 'n'だと、xsd:base64になっちゃうみたい。

ActionWebServiceというかSOAP4Rかな。前からこうでしたっけ?

[Journal In Time - ActionWebServiceで日本語を扱うには$KCODE = 'u'が必要より引用]

$KCODEを指定することによりRailsのエラー画面で文字化けしなくなったり、正規表現で.がマルチバイト文字にマッチするようになる。

[UTF-8で運用する :: wiki.rails2u.comより引用]

Railsをいったんおいて、Rubyとしてはどうなのかとソースをgrepしてみたところ、正規表現のマッチが変わるのと、String#inspectでの出力の仕方が変わる程度に見える(出力が自動的に変換されるとかはRubyとしては当然ない)。この正規表現のマッチというのは引用にある「.」の動作やtrancateメソッドで用いられている//の動作のこと。標準添付のライブラリの中には$KCODEを参照しているものもあるし、TMailも一部で参照してはいるが……。

Ruby全体としての影響範囲は限定されている一方で正規表現という点ではけっこう大きな変化がみられるわけで、そう考えると$KCODEによって設定されるのは「Rubyの動作モード」といったものではないし、影響の範囲を知らせずに呪文のように「$KCODE = 'u'」と説明してしまうこの記事のような書き方はいまいちなのではないかなと思える(他方、記事の後に引用した二つのテキストでは限定的に説明されている)。

まあ、そういう記述が必要な場面はあるのだろうと思うのだけど(あるいはアプリケーションを開発するにあたって$KCODE = 'u'を前提にするのはアリだとは思うけど)、それにしても「正規表現の動作が変わるよ」などの注釈があれば、というよりもなぜそうするのについての説明があれば、変に誤解されずにすむと思うのだけどなあ。

ruby1.8_1.8.4-1

投稿者 akira 2005-12-24 15:00:00 GMT

ruby1.8_1.8.4-1を作った。あとでVine Linux向けも作ろう。

Ruby 1.8.2のwebrickとxmlrpcの脆弱性情報

投稿者 akira 2005-11-21 15:00:00 GMT

の話。うーんと、sargeの1.8.2-7sarge2に対するパッチを作らないといかんのかな。ruby-1.8.2-xmlrpc-dos-1.patchはそのまま適用できそうだがruby-1.8.2-webrick-dos-1.patchはだめっぽい。1.8.2-7sarge2が中途半端というか、素の1.8.2から少し進んだ時点の状態になっているせいだな。

コードが移動しているようなので、こんな感じかなあ?:

--- ruby-1.8.2-webrick-dos-1.patch.orig 2005-11-21 16:58:45.000000000 +0900
+++ ruby-1.8.2-webrick-dos-1.patch     2005-11-22 12:57:33.000000000 +0900
@@ -26,14 +26,14 @@
 diff -u -p -F^[^A-Za-z0-9_+-]*\(class\|module\|def\)[^A-Za-z0-9_+-] -r1.5.2.3 server.rb
 --- lib/webrick/server.rb      16 Dec 2004 09:45:59 -0000      1.5.2.3
 +++ lib/webrick/server.rb      25 Sep 2005 07:01:24 -0000
-@@ -90,6 +90,7 @@     def start(&block)
-                 @tokens.pop          # blocks while no token is there.
-                 sock = svr.accept
-                 sock.sync = true
-+                Utils::set_non_blocking(sock)
-                 Utils::set_close_on_exec(sock)
-                 th = start_thread(sock, &block)
-                 th[:WEBrickThread] = true
+@@ -147,6 +147,7 @@     def start(&block)
+         sock = svr.accept
+         sock.sync = true
+         Utils::set_close_on_exec(sock)
++        Utils::set_non_blocking(sock)
+       rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPROTO => ex
+         # TCP connection was established but RST segment was sent
+         # from peer before calling TCPServer#accept.
 Index: lib/webrick/utils.rb
 ===================================================================
 RCS file: /var/cvs/src/ruby/lib/webrick/utils.rb,v

Rubyist Magazine 0010号

投稿者 akira 2005-10-09 15:01:00 GMT

次も期待。その次は咳さん登場というのを期待。

Typo 2.5.6 v.s. Ruby 1.8.3

投稿者 akira 2005-09-27 15:00:00 GMT

ちょっとTypoでも動かしてみるかとやってみたんだけど、どうもサイドバーの設定がうまくいかない。入力したテキストが記録されない様子。チェックボックスだと問題ないみたいだし、記事についても問題なさそう。

1.8.3はダメと書いてあるのはその辺なのだろうか。

「RubyGemsとOS platformとの関係」

投稿者 akira 2005-09-26 15:00:00 GMT

を読んでそんな話になっていたとは…… なんて思ってしまった。ある程度以上の深さのスレッドになっている英語の議論を追うだけの時間なり体力なりを確保するのはなかなか大変なので…… って、まあ、言い訳と言ってしまえば言い訳だけど。

今のところ槍玉にあげられているのは主にDebianらしいのだが、このまま進むと他の環境についても同じこと、つまりパッケージシステムに対する譲歩を強く求められるなんてことにもなりかねないのではないかと思えてくる。

そんなわけで返事を一本書いてみた()。部分的に極端な言い方をしてるけど、やっぱあらゆる場面でrubygemsが、というかそこからccが起動されたり、他のgemをパッケージシステムを経由せずに取ってこられたりってのは、相当にイヤな感じなんじゃないかと思う。もっとも後者についてはwrapするパッケージの依存関係できっちりガードってなことが原理的にまったく出来ないというわけではないとも言えるけど。

純粋にrubygemsを使いたければ生のまま、あるいはrubygems自体のパッケージは使うにしても、それ以降は生のrubygemsと同じやり方でそれを使う。そうでなければ各パッケージシステム的に妥当な形でwrapされたgemを使う。そういった辺りが落しどころなんじゃないかな、と思う。ukaiさんやtagohさんにも意見を聞いてみたい。

あ、そうそう。日本語でサマリーを作ってくださった森脇さん。ありがとうございます。(というのをメールに書き損ねてしまった。)

Ruby 1.8.3のパッケージング予定

投稿者 akira 2005-09-14 15:00:00 GMT

9/21にRuby 1.8.3がリリースされるのに合わせて…… まあ、できるだけ遅れないようにパッケージングする予定。

いろいろ準備中なんだけどbuildする回数が10回単位(ちょっとおおげさ?)で増えていくので頭がこんがらがってくる。

REXML::Comment#to_s

投稿者 akira 2005-09-03 15:01:00 GMT

メモ:

$ ruby -rrexml/document -e '
doc = REXML::Document.new("<!-- bar -->")
print "---1\n"
print doc
print "\n---2\n"
doc.children.each {|c| print c}
print "\n---3\n"
doc.children.each {|c| c.write(o = ""); print o}
print "\n---0\n"'
---1
<!-- bar -->
---2
 bar 
---3
<!-- bar -->
---0

REXML::Comment#to_sはコメントの中身を返すようだ。

ruby-pkg-tools

投稿者 akira 2005-09-03 15:02:00 GMT

Description: Tools for building Debian Ruby packages
 This package contains some useful tools for building Debian Ruby packages
 and is used by the Debian Ruby Maintainers Team. It includes:
   * a CBDS class for building packages which use setup.rb as installer,
   * a program to retrieve upstream sources for use in conjunction with
     svn-buildpackage,
   * a list of team members.

the Debian Ruby Maintainers Teamってruby-pkg-toolsのメンテナたちのことだろうか。/usr/share/ruby-pkg-tools/pkg-ruby-extras.teamにはDebian Ruby Extras Maintainersって書いてあるんだけど、そうするとExtrasが抜けてる? うーん。

svn-buildpackageうんぬんのスクリプトはいまいちよく分からない。……あー、debian/changelogを読んで、対応するupstream tarballを取ってくるのか。しかしそのために/usr/shareにファイル置くってのはどうだろう。debian/watch的なやつのほうが良いんじゃないか。

まあ、目玉はsetup.rbを使ったソフトウェアをパッケージングするのに使えるcdbsのclassファイルだろうな。でもなんでこれcdbsに入れてもらわないんだろう。

rubygems用のclassファイルがあると良いかなあ。その前にrubygems自体がそろそろ欲しいかも。