[#21809] lib/test/unit/ui/tk/testrunner.rb — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
なかだです。
こんにちは、なかむら(う)です。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
[#21830] pty on FreeBSD — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#21846] StringIO#path — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#21876] get_last_error or getLastError by DL::Importable — Take_tk <ggb03124@...>
たけ(tk)です。
[#21883] right hand Regexp — Koji Arai <JCA02266@...>
新井です。
[#21899] core dump in rb_hash_aset — Tanaka Akira <akr@...17n.org>
% ruby -e 'h = {}
まつもと ゆきひろです
In article <1068753744.644627.6908.nullmailer@picachu.netlab.jp>,
[#21932] rough / tabs.rb — Minero Aoki <aamine@...>
青木です。
[#21939] StringIO.new("").read — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#21942] Zlib::GzipReader#read — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#21943] IO#read — Tanaka Akira <akr@...17n.org>
ふと。
In article <87u1523sjj.fsf@serein.a02.aist.go.jp>,
なかだです。
In article <200311250059.hAP0xSYw004490@sharui.nakada.kanuma.tochigi.jp>,
[#21946] Re: [ruby-cvs] ruby, ruby/lib, ruby/test/fileutils: * lib/fileutils.rb (fu_same?): check by inode instead of path name, to detect two hard links pointing to the same content. — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
Siena. です。
青木です。それにしても凄い Subject だ。
[#22000] purge pthread at configure — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22013] HTTP_PROXY — Tanaka Akira <akr@...17n.org>
ふと
[#22025] --enable-pthread on FreeBSD — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22042] ENV["path"].tainted? — Tanaka Akira <akr@...17n.org>
ENV["path"] の値が
まつもと ゆきひろです
In article <1069748137.095435.3356.nullmailer@picachu.netlab.jp>,
斜め読みですが、
まつもと ゆきひろです
In message <1070234162.951847.24883.nullmailer@picachu.netlab.jp>
[#22057] drb/drb.rb document — Minero Aoki <aamine@...>
青木です。
[#22071] Dir.glob と Shjift_JIS について — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
はじめまして。山本といいます。
Siena. です。
> 山本さんのパッチがうまく当たらず手パッチしたので、念のため何度か
Siena. です。
こんにちは、山本です。
山本です。
山本です。
山本です。
山本です。glob_helperをリファクタリングしてみました。
なかだです。
山本です。
なかだです。
山本です。
Siena. です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。パッチを送ります。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
>すいません。パッチを出す時にはいつもどの時点のソースに対する
まつもと ゆきひろです
>|すみません、1.8.1に対してです。
まつもと ゆきひろです
こんにちは、山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。[ruby-dev:22470]にバグがあったので修正しました。
>山本です。[ruby-dev:22470]にバグがあったので修正しました。
まつもと ゆきひろです
山本です。
山本です。
In message <20040102230135.027CDAF8.ocean@m2.ccsnet.ne.jp>
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
なかだです。
山本です。
なかだです。
山本です。
[ruby-dev:21932] rough / tabs.rb
青木です。
タブを扱うライブラリが標準に欲しいので、rough の tabs.rb を
レビューしました。基本的には現状で満足ですが、数点不満があります。
1. (書きかたとして) non-bang メソッドより bang メソッドのが
明らかに高速に見えるのが気に入らない。
2. オリジナルの expand はタブと非タブが交互に出てくる
行を処理させると異常に遅くなることがある。
文句を言うだけでは何なので別の実装を書きました。
書いたのを末尾に添付しときます。
速度は、オリジナルと比較すると
* 最悪のケースではオリジナルより圧倒的に速い
* 行頭にタブが集中する最もありがちなケースではほとんど同じ
という感じです。
ついでに bang 系メソッドは Tabs モジュールからは捨てて
String で実装するようにしてみました。引数を破壊的に変更する
のはわかりにくいと思うからです。どうせ String にメソッドを
追加するのだから、破壊的メソッドはこちらで実装されていれば
十分でしょう。
なお全体的に破壊的メソッドが非破壊的メソッドより遅くなるように
実装しました。
以下は弱めの意見です。
* Text モジュールとかの下に置きたい人は多そうだ。
(個人的にはトップレベルでも気になりません)
* String のメソッドにするときは expand_tabs のがいい?
* tabify/untabify という別名が欲しいかもしれない。
* detab/entab も欲しいかもしれない。
参考
google(expandtab) = 13900
google(expandtabs) = 3380
google(expand tab) = 1340000
google(unexpandtab) = 0
google(unexpandtabs) = 18
google(unexpand tab) = 3290
google(untabify) = 8260
google(tabify) = 4680
google(detab) = 7340
google(entab) = 3130
-------------------------------------------------------------------
青木峰郎
#!/usr/bin/env ruby
#
# Copyright (c) 2001 Akinori MUSHA <knu@iDaemons.org>
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $Idaemons: /home/cvs/rb/tabs.rb,v 1.2 2001/05/30 09:37:45 knu Exp $
# $Id: tabs.rb,v 1.1 2001/06/01 18:58:29 knu Exp $
module Tabs
DEFAULT_TABSTOP = 8
def expand(text, tabstop = DEFAULT_TABSTOP)
text.map {|line|
add = 0
line.sub(/\A\t+/) {|s| ' ' * (tabstop * s.length) }.gsub(/\t/) {
len = tabstop - ($~.begin(0) + add) % tabstop
add += len - 1
' ' * len
}
}.join('')
end
def unexpand(text, tabstop = DEFAULT_TABSTOP)
text.gsub(/^([ \t]+)/) {
t, s = expand($1, tabstop).length.divmod(tabstop)
"\t" * t + ' ' * s
}
end
def unexpand_all(text, tabstop = DEFAULT_TABSTOP)
expand(text, tabstop).map { |line|
len = line.length
mod = len % tabstop
(len - mod - tabstop).step(0, -tabstop) { |i|
s = line[i,tabstop]
if s.sub!(/ +\z/, "\t")
line[i,tabstop] = s
end
}
}.join('')
end
module_function :expand, :unexpand, :unexpand_all
end
class String
def expand(tabstop = Tabs::DEFAULT_TABSTOP)
Tabs::expand(self, tabstop)
end
def expand!(tabstop = Tabs::DEFAULT_TABSTOP)
replace(Tabs::expand(self, tabstop))
end
def unexpand(tabstop = Tabs::DEFAULT_TABSTOP)
Tabs::unexpand(self, tabstop)
end
def unexpand!(tabstop = Tabs::DEFAULT_TABSTOP)
replace(Tabs::unexpand(self, tabstop))
end
def unexpand_all(tabstop = Tabs::DEFAULT_TABSTOP)
Tabs::unexpand_all(self, tabstop)
end
def unexpand_all!(tabstop = Tabs::DEFAULT_TABSTOP)
replace(Tabs::unexpand_all(self, tabstop))
end
end