2004-11-03 (Wed) [長年日記]
_ mod_rubyのlibapreqサポート
ドキュメントが無いのでmod_rubyのソースから内容を解析するしかないですが、これを使いたいなぁ。
[ゴッゴル@Devlog(2004-11-03)より引用]
実は、英語版のClassReferenceManualの方には説明があったりします...。
_ ruby1.8 for woody
woody用にbackportしてみた。
deb http://shugo.net/debian/woody/ruby/ ./
問題なさそうだったらbackports.orgに投げたいなあ。
2004-11-07 (Sun) [長年日記]
_ モジュール関数
ゆうぞうさんとの間で認識に食い違いがあったようだ。 「モジュールの特異メソッドとしてもプライベートインスタンスメソッドとしても定義されているメソッド」という認識でよいですよね?
ゆうぞうさんは、mix-in以外でincludeを使わないらしい。 自分はどうかと言うと、置き場所が決まらない関数的なメソッドをAppName::Utilみたいなモジュールにモジュール関数として突っ込んで includeして使うことがけっこうある。
ただ、名前の衝突に弱いのがincludeの痛いところだ。 *1 C#みたいにメソッドを再定義する時はかならず、
override foo(x) ... end
とする(overrideの代りにdefで再定義しようとするとエラーか警告)、なんてのは嫌がられるだろうな。
*1 includeにかぎらずだけど。そういえば、WEBrick::CGIを継承したクラスで@configというインスタンス変数を使って失敗したこともあったりして。
_ Object#object_id
今さらながらはじめて知った。今はObject#__id__よりもこっちが推奨なのか。
もしや、Object#__send__にも代替が、と思ったけど、こっちはまだないみたい。ruby-talkで議論されていたようだ。 collect派としてはperformを推したいが、ゆうぞうさんはinvokeじゃないの?と言っていた。
-wを使わないと、Object#idのwarningが出ないのは、標準ライブラリでがんがん使われているからだろうな。
2004-11-08 (Mon) [長年日記]
_ lessの-xオプション
IRCでZnZさんに教えてもらったのだが、lessでタブ幅を変えるには、
$ less -x3 tdiary.rb
でいいらしい(この場合はタブ幅3)。
起動した後も、-x3<Enter>で変更できる。 これでたださんも恐くない。
2004-11-10 (Wed) [長年日記]
_ 引っ越し
松江に引っ越し。これで晴れて善良な市民を名乗ることができます。
外に出た時に携帯を忘れて、ひさびさに公衆電話を使ったけど、前に使っている人がいてちょっとの間待たされた。こういう気分もひさしぶり。あと、電話の上に十円玉並べたりとかね。しかし、百円玉ではおつりが出ませんってひどい話だ。
_ 取り残された玉湯町民 [私は来年3月(の合併)まで待つことにします]
2004-11-12 (Fri) [長年日記]
_ Ruby 講習会初級コース後半 2 日目
かずひこさんには褒めていただいたが、やっぱり初心者の方に話すのは難しいですね。ついつい、いらないことを言ってしまう。
ちなみに「勉強になります」はNaCl用語で、褒める言葉に詰まった時に使います。
_ Kouji [へぇ > 勉強になります。 じゃなくて、自分が全く知らなかったことを教えて頂いたときの言葉が「勉強になります」です。..]
2004-11-17 (Wed) [長年日記]
_ 市役所
市役所に児童手当などの申請の手続きに行ったのだが、担当の方が丁寧な方で、転入の手続きの時にもらえなかった冊子やごみの収集日の案内などを入手できた。いつもこういう方に対応してもらえるといいなあ。
2004-11-18 (Thu) [長年日記]
_ Groovyのit
RubyにGroovyのitを導入するというのはどうだろう。
ary.each { p it }
は、
ary.each { |it| p it }
と同じ意味。
ワンライナーでうれしいかもしれない。
多値を受け取りたい場合は、themで配列で受け取るとか?
sum = ary.inject(0) { them[0] + them[1] }
これは何もうれしくないな、うん。
_ readlineの$SAFE対応
これを押し進めると、以前前田くんが述べていたように、特別な APIを経由しない限り拡張ライブラリで定義されたメソッドは自動 的に$SAFE=2で禁止、というのも一つの考えだと思います。
[[ruby-dev:24909] Re: Process.getrlimit and Process.setrlimitより引用]
あれ、そんなこと言ってましたっけ。
それはさておき、readlineが$SAFEに対応してなかったので、対応。 cursesも怪しいな。
2004-11-25 (Thu) [長年日記]
_ C#のプロパティのオーバーライド
mono 1.1.2を試すと、前は通っていた以下のようなコードが通らなくなった。
using System; public class Person { protected string name; public Person(string name) { this.name = name; } public virtual string Name { get { return name; } } } public class MutablePerson : Person { public MutablePerson(string name) : base(name) {} public override string Name { set { this.name = value; } } } public class Test { public static void Main() { Person shugo = new Person("Shugo Maeda"); Console.WriteLine("shugo is {0}", shugo.Name); MutablePerson shugo2 = new MutablePerson("Shugo Maeda"); Console.WriteLine("shugo2 is {0}", shugo2.Name); shugo2.Name = "Studly"; Console.WriteLine("shugo2 is {0}", shugo2.Name); } }
mcs曰く:
$ mcs1.1.2 test.cs test.cs(21) error CS0546: 'MutablePerson.Name': cannot override because 'Person.Name' does not have an overridable set accessor test.cs(11): 'Person.Name' (name of symbol related to previous error) Compilation failed: 1 error(s), 0 warnings
どうも、Person.Nameにsetアクセサがないためにオーバーライドさせてくれないらしい。 interfaceを使うべきなんだろうなあ、と思いつつ
set { throw new NotSupportedException(); }
としてしまった。 激しい敗北感。
2004-11-27 (Sat) [長年日記]
_ BooのDuck Typing
「foo as duck」と書くと型チェックが動的に行われるというのが目新しい。
[Matzにっき(2004-11-26)より引用]
というとこだけ読むと、「何だ、s.is_a?(String)みたいなもん?」と思えるが、 実際には型チェックを動的に行うというより、リフレクションを使ってメソッド 呼び出しを行って、上手く行けばOK、というもののようだ。 ちなみに、duckの部分は例ではなくって、ほんとにduckと書く。
class Person: [getter(Name)] _name as string def constructor(name): _name = name class Car: [getter(Name)] _name as string def constructor(name): _name = name x as duck = Person("Shugo") print(x.Name) x = Car("March") print(x.Name)
ここで、x as duckの部分をx as Personに変えると、もちろんCarオブジェクトの 代入の部分で(静的な)エラーになる。 ちょっとObjective-Cに似てるかもしれない。duckはidだね。
.NETだとGroovyが使えなくて残念だと思ってたけど、こっちの方が面白そうだな:)
一番気になるのは型推論がほんとにうれしいのか、という点。Haskellだと他の部分が 自分がこれまで使って来た言語と違いすぎていてそこだけ評価できないんだけど、Boo はわりと普通っぽいのでいいかもしれない。 QDBMのインタフェイス書いてちょっと使ってみようかしら。
_ Booのmixin
ソースに含まれているcrazy_ideas.booというファイルを見ると、以下のような コードが、
mixin TraceMixin(Foo, ICollection): def before(name): print(name) def after(name): print(name)
これってメソッドコンビネーション? まだ実装はされてないみたいだけど、どういう仕様になるんだろう。
2004-11-30 (Tue) [長年日記]
_ 引数なしのsuper
がHEADで使えなくなっててびびった。 一瞬自分が『引数なしのsuperはない方がsuper()と書かなくていいからうれしい』とか言ってたためかと思ったが、んなわけない。 define_methodで定義されたメソッドでsuperを呼ぶと落ちるバグの修正にミスがあったようだ。 何でも最近のRubyでは使われなくなっていたruby_frame->flagsを 使ったら0で初期化するのを忘れていたらしい。 テスト重要ですぞ。
_ machine readable commit mail
machine readableなcommit mailを用意しようと思うも、 形式に悩む。
候補は、今のところ、
- CIAの形式のXML
- svn log -v --xmlの形式のXML
- YAML
くらい。
最初は人間用もYAML一本にしようと思っていたが、to_yamlそのままの出力がいまいちなため分けることに。 つーか、svnなら楽なのに。
_ anon [http://shugo.net/archive/tdiaryquote/にtdiaryquote_0.0.4.xp..]
_ shugo [あれ、すみません、置いておきました。]