よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

June 17, 2003 [おもひで]

[Ruby-GNOME2] Sokoban

あまりの反響の無さに寂しかったのでruby-list/talkでアナウンスしてみた(^^;)。

[Ruby] ProcとBlock

うーむ、ややこしい(T_T)

  * Proc.newおよびブロック引数で与えられるProcは、引数チェッ
    クがゆるい。breakやnextが例外になる
  * lambdaおよびprocが返すProcは、引数チェックが厳しい。
    breakやnextは実行の中断
 
という説明にしましょう。
 
|・今まで、rb_f_lambda() だったものは代わりに rb_block_proc() を使うべき?
 
はい。

結局のトコロ、Ruby-GNOME2的にはrb_f_lambda()はrb_block_proc()に変えるべきなのかしらん。ちと量が多くて大変だの(T_T)。

[Ruby-GNOME2] ライセンス診断

RWikiのRuby/Tk版, nyasuさんのvruby版。せっかくなのでRuby/GTK2版を作ってみよう。

#!/usr/bin/env ruby
 
require "gtk2"
 
QTITLE = "フリーソフトウェアライセンス診断"
GONEXT = nil
 
Gtk.init
class Question < Gtk::MessageDialog
  def initialize(question, yes, no)
    super(nil, MODAL, QUESTION, BUTTONS_YES_NO, question)
    set_title(QTITLE)
    @yes, @no = yes, no
  end
  def run
    (super == RESPONSE_YES) ? @yes : @no
  end
end
 
QUESTIONS = [ 
  Question.new(
    "あなたのコードを商用ソフトウェアに組み込まれて販売されてもかまわないか?",
    GONEXT, "GPL"),
  Question.new(
    "あなたはストールマンのフリーソフトウェア運動に心から賛同しているか?",
    "GPL", GONEXT),
  Question.new(
    "あなたはそのソフトウェアを将来Rubyの一部として配布したいか?",
    "Rubyライセンス","BSDライセンスまたはMITライセンス" ),
]
 
QUESTIONS.each do |q|
  if (lic = q.run)
    dialog = Gtk::MessageDialog.new(nil, Gtk::Dialog::MODAL,
                                    Gtk::MessageDialog::INFO,
                                    Gtk::MessageDialog::BUTTONS_OK,
                                    lic + " がおすすめ")
    dialog.set_title(QTITLE + "結果").run
    exit
  end
end

QuestionクラスをGtk::MessageDialogのサブクラスにしてみた。

そうそう、Ruby/GTK2では文字列をUTF-8にしないといけないので、上記を保存した後、UTF-8に変換してから実行する必要があるのがちと面倒かな。

以下は上記のコードをjudge.rbとして保存した時の例。iconvを使ってる。

iconv -f euc-jp -t utf-8 judge.rb |ruby -

本日のツッコミ(全1件) [ツッコミを入れる]
きた (June 18, 2003 21:15)

そうそう.UTF-8にしないとダメなんですよねぇ.
実はこないだそれが分からなくて10分くらい思考錯誤してました…
結局,Uconv使うことにしました.


編集