\input texinfo

ruby/tk FAQ
***********
     とりあえず 中村 典嗣
     15 Dec 1999

この文書は、Perl/Tk FAQ 1.00_07 を手本にして ruby/tk FAQを作成したもので
す。linuxdoc-sgmlを使用していますが、使い始めたばかりなので、まだ、良く
分かっていないため、いろいろ変だと思います。まあ、内容もそうなんですが。

ruby/tk とは何ですか？
**********************

ruby/tk は、強力なオブジェクト指向スクリプト言語であるrubyと、手軽に GUI
プログラムを作成できる Tcl/Tk を組み合わせることで、楽しく、プログラムを
することを目指したものです。

ruby/tk と tcltk tcltklib ライブラリの違いは何ですか？
******************************************************

tcltk ライブラリは、Tcl/Tk の C ライブラリを利用するための高(中?)水準イ
ンターフェースを提供します。このライブラリは ruby から Tcl/Tk ライブラリ
を利用するためのもので、内部で tcltklib ライブラリを利用しています。

tcltklib ライブラリは、Tcl/Tk の C ライブラリを利用するための低水準イン
ターフェースを提供します。(<-- マニュアルから引っ張って来ただけ)

ruby/tk をインストールするのに Tcl/Tk は必要ですか？
****************************************************

ruby/tk は、Perl/Tk とは違い、Tcl/Tk から独立していませんので、(というよ
りもソースに含まれていないというべきか？)ヘッダ tcl.h, tk.h とライブラリ
libtcl*, libtk* が必要です。(tclConfig.sh, tkConfig.sh は使用しないのか
な？)

つまり、あらかじめ Tcl/Tk をインストールしておけば、Tcl/Tk の全ソースは
必要では、ありません。

どこにあるの？
**************

`ソースコード'
     ruby のソースに含まれています。rubyのソースの配布先は、 ftp のミラー
     http://www.ruby-lang.org/ja/mirrors.htmlを見てください。

`バイナリー'
     なし。rpm, deb とかには、含まれているのか？

`Physical メディア'
     ruby本におそらく付くでしょう？

どこ？ ruby の配布先は
**********************

ftp のミラー http://www.ruby-lang.org/ja/mirrors.html を見てください

どうやってインストールするの？
******************************

`Tcl/Tk'
     例えば、tcl8.05 + jp パッチの場合(ファイル名は適宜読み変えてくださ
     い)
           % mkdir tcl-tk8.0.5jp1.6
           % cd tcl-tk8.0.5jp1.6
           % tar zxvf tcl8.0.5.tar.gz
           % tar zxvf tk8.0.5.tar.gz
           % cd tcl8.0.5
           % zcat tcl8.0.5jp1.6.patch.gz | patch -p1
           % cd ../tk8.0.5
           % zcat tk8.0.5jp1.6.patch.gz | patch -p1
           % cd ../tcl8.0.5/unix
           % ./configure --enable-shared
           % make
           % make test
           % cd ../../tk8.0.5/unix/
           % ./configure --enable-shared --with-tcl=../../tcl8.0.5/unix
           % make
           % make test
           # cd tcl8.0.5/unix
           % make -n install
           # make install
           # cd ../../tk8.0.5/unix/
           % make -n install
           # make install

`ruby'

           % ./configure
           % make
           # make install

     うまく行かない場合は、ext/tcltklib/extconf.rbを直したりする。

ruby/tk の動作する環境の例
   *  FreeBSD:
   *  Linux:
   *  SunOS:
   *  Solaris:
   *  Windows:

Mac はどうなんだろう？

ドキュメントはどこにありますか？
********************************

ruby/tk のマニュアル
====================

`man ページ'
     man 形式はなし。HTML 形式は、ruby のマニュアルに付属？

`ニュースグループ'
     fj.comp.lang.ruby

`メーリングリスト'
     ruby-list@netlab.co.jp

`デモプログラム'
     contrib/ にあります。Ruby_Tk-widget-demo-*.tar.gzという感じのファイ
     ル。と、Tcl/Tk8.1用のデモが立石さんWeb
     http://kt-www.jaist.ac.jp:8000/~ttate/ftp/ から手にいれることができ
     ます。

`インターネット上の ruby/tk リソース'
     `Ruby関連MLトピックス  http://ruby.freak.ne.jp/ml-topics.html'
          Tkの項目が参考になります。

     `Ruby/Tk チュートリアル  http://www.cdrom.co.jp/~hiramatsu/'
          平松さんのページ

     `rubyによるVerilog用波形ビューワ  http://kondara.sdri.co.jp/~kikutani/'
          菊谷さんのページ

     `ruby で楽しいプログラミング  http://www2.osk.3web.ne.jp/~nkon/3web/ruby/'
          近藤さんのページ

     `Ruby工房  http://www.ueda.info.waseda.ac.jp/~igarashi/work/ruby/'
          五十嵐さんのページ

     `rubyの指環  http://www.nerv.org/eda/ruby/'
          江田さんのページ

     `Ruby Ruby Ruby  http://www.ne.scphys.kyoto-u.ac.jp/~thitoshi/ruby/'
          高橋さんのページ

     `Ruby > (Smalltalk + Perl) / 2  http://www02.so-net.ne.jp/~greentea/ruby/'
          greenteaさんのページ。『入門 tcl/tk』のサンプルコードをruby/tk
          のコードに変換しています。

     `Ruby/Tk で遊ぼう  http://www.iis.u-tokyo.ac.jp/~msato/ruby/index-j.html'
          さとうさんのページ。

`その他のリソース'
     NIFTY Serve FGALTS MES5 「純正和製｜ruby天国／みんなで遊ぼう！」

ruby のマニュアル
=================

紙の ruby 本も出版されました。雑誌でも、数多く記事になっています。出版物
(主に雑誌)に登場したRuby http://www.ruby-lang.org/ja/press.htmlを御覧く
ださい。

`man ページ'
     man はソースに付いています。HTML 形式は、doc/ にあります。リファレ
     ンスマニュアルが contrib/ に rubytk-*.rd.gz という感じのファイル名
     であります。

`ニュースグループ'
     fj.comp.lang.ruby

`メーリングリスト'
     ruby-list@netlab.co.jp

`デモプログラム'
     ソースの中の ext/tk/sample にあります。

`インターネット上の rubyリソース'
     Ruby関連ページたち http://www.ruby-lang.org/ja/links.html を見てく
     ださい。

`その他のリソース'
     NIFTY Serve FGALTS MES5 「純正和製｜ruby天国／みんなで遊ぼう！」

Tcl/Tk のマニュアル
===================

ruby/tk を使うには、Tcl/Tk の知識も必要です。Tcl/Tk の文献は、…

`入門Tcl/Tk'
     入門Tcl/Tk
     http://www.shuwasystem.co.jp/books/wwwsrch/cgi-bin/content/795/index.htm

`入門 tcl/tk'
     入門 tcl/tk
     http://www.ascii.co.jp/books/detail/4-7561/4-7561-1293-5.html

`Tcl/Tk入門'
     Tcl/Tk入門
     http://tsmz.topica.ne.jp/topub/display.asp?sku=4-8101-8597-4

`Tcl/Tkプログラミング入門'
     Tcl/Tkプログラミング入門
     http://www.ohmsha.co.jp/data/books/contents/4-274-06115-9.htm

`Tcl&Tkツールキット'
     Tcl&Tkツールキット
     http://books.softbank.co.jp/bookweb.nsf/7fec73b8359bedeb4925663500009b0c/b350fac633e2a715492565020029247c?OpenDocument

`はじめてのTcl/Tk'
     はじめてのTcl/Tk http://www2.gihyo.co.jp/books/bookinfo.asp?ID=469

どうやって ruby/tk スクリプトを書けば？
***************************************

他の ruby スクリプトと同じように書き始めます。例えば、
#!/usr/local/bin/rubyとか。

一番簡単な "こんにちは" を表示するスクリプトはこう書けます。

     #!/usr/local/bin/ruby

     require "tk"

     TkLabel.new {
       text 'こんにちは'
     }.pack
     TkButton.new {
       text '終了'
       command 'exit'
     }.pack

     Tk.mainloop

別の書き方をすると、

     #!/usr/local/bin/ruby

     require "tk"

     TkLabel.new {
       text 'こんにちは'
       pack
     }
     TkButton.new {
       text '終了'
       command 'exit'
       pack
     }

     Tk.mainloop

     #!/usr/local/bin/ruby

     require "tk"

     TkLabel.new (Tk.root, 'text' => 'こんにちは').pack
     TkButton.new (Tk.root, 'text' => '終了', 'command' => 'exit').pack

     Tk.mainloop

ruby/tk で使える widget の種類は？
**********************************

Tcl/Tk で使えるもの+α(使える widget の種類でなくクラスを書くべきか？)

`Combobox'
     [ruby-list:18167]
     http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/18167

How do I get widget X to do Y ?
*******************************

もし、ボタンが欲しかったら、

     TkButton.new

とすれば良い。もし、このボタンに後で操作を加えたいならば、
     button = TkButton.new

というように、〜を変数に入れておく。これだけでは、画面に表示されないので、
     button.pack

と、pack する。とりあえず、ボタンを表示するスクリプトの全部を書くと、

     #!/usr/local/bin/ruby

     require "tk"

     button = TkButton.new
     button.pack

     Tk.mainloop

のようになる。このボタンには、ラベルがついていないが、configure メソッド
でつけることができる。

     #!/usr/local/bin/ruby

     require "tk"

     button = TkButton.new
     button.configure('text' => 'Press me!')
     button.pack

     Tk.mainloop

このスクリプトを別の書き方をすると、次のようになる。

     #!/usr/local/bin/ruby

     require "tk"

     button = TkButton.new {
       text 'Press me!'
     }.pack

     Tk.mainloop

このコードでは、ボタンを押しても何も起こらない。ボタンを押したときの動作
をメソッドにバインドする仕方は、後ほど…

ボタンを押したとき実行されるコマンドを
======================================
ruby のメソッドに結びつけるには？

command option？でボタンを作成したときか、packしたときにこうやって指定す
れば良い。

ボタンの上にマウスが来たときにイメージを変更するには？
======================================================

imageとactiveimageを指定する

widgets の配置はどうやったら良いの？
====================================

Tcl/Tk と同様に、packer, placer, grid を使用する。

     widget.pack

     #!/usr/local/bin/ruby

     require "tk"

     top2 = TkToplevel.new
     frame = TkFrame.new(top2)
     frame.pack
     TkLabel.new(frame) {
       text 'Left2'
       pack('side' => 'left')
     }
     TkLabel.new(frame) {
       text 'Right2'
       pack('side' => 'right')
     }
     TkLabel.new(top2) {
       text 'Bottom2'
       pack('side' => 'bottom')
     }

     Tk.mainloop

ダイアログとか、メニューとか、
==============================
その他ポップアップするようなのはどうやったら？

シンプルなダイアログボックスは、TkDialog クラスを使えば良いでしょう。

もし、TkDialog クラスなどを使わないのであれば、top = TkToplevel.new

などのように、TkToplevel クラスを使用します。

キーアクションと動作を結びつけるには？
======================================

     widget.bind('<keyname>', action)

     or widget.bind '<keyname>', action

キーバインディングを加えるには？
================================

スケールの動きをバインドするには？
==================================

     #!/usr/local/bin/ruby

     require "tk"

     items = ["One", "Two", "Three", "Four",
       "Five", "Six", "Seven", "Eight",
       "Nine", "Ten", "Eleven", "Twelve"]

     scroll = TkScrollbar.new

     box = TkListbox.new {
       relief 'sunken'
     #  width -1
       height 5
       setgrid 'yes'
       yscrollcommand proc{|idx| scroll.set *idx}
     }.pack('side'=>'left','fill'=>'both','expand'=>'yes')

     scroll.command(proc{|*args| box.yview *args})
     scroll.pack('side'=>'right', 'fill'=>'y')

     for i in items
       box.insert 'end', i
     end

     Tk.mainloop

一つのスクロールバーを複数の widgets に結びつけるには？
=======================================================

ビットマップを表示するには？
============================

     TkLabel.new {
       bitmap 'bitmap-name'
     }.pack('side' => 'top')

     TkLabel.new {
       bitmap ('@' + ['.','images','face.bmp'].join(File::Separator))
     }.pack('side' => 'top')

イメージを表示するには？
========================

     #!/usr/local/bin/ruby

     require "tk"

     TkLabel.new {
       text 'Main'
     }.pack
     $imggif = TkPhotoImage.new {
       file '/usr/local/lib/tk4.2jp/demos/images/earth.gif'
     }
     TkLabel.new {
       image $imggif
     }.pack
     TkButton.new {
       text 'close'
       command 'Tk.root.destroy'
     }.pack('side' => 'left')
     TkButton.new {
       text 'exit'
       command 'exit'
     }.pack('side' => 'right')

     Tk.mainloop

どんなイメージが表示できますか？
================================

Tcl/Tk に準ずる

リストボックス
==============

テキスト widget
===============

ラジオボタンのグループ化
========================

variable を指定。variable は、TkVariable クラスを使用。

     #!/usr/local/bin/ruby

     require "tk"

     letters = TkVariable.new

     TkRadioButton.new {
       bitmap '@/usr/local/lib/tk4.2jp/demos/images/letters.bmp'
       variable letters
       value 'full'
     }.pack

     TkRadioButton.new {
       bitmap '@/usr/local/lib/tk4.2jp/demos/images/noletter.bmp'
       variable letters
       value 'empty'
     }.pack

     Tk.mainloop

フォントの指定
==============

     #!/usr/local/bin/ruby

     require "tk"

     TkLabel.new {
       text 'Foo'
       font 'fixed'
     }.pack

     Tk.mainloop

エントリー widgetの内容を取り出すには？
=======================================

     #!/usr/local/bin/ruby

     require "tk"

     def do_print(entered)
       print "The string \"#{entered}\" was entered.\n"
     end

     $user_entry = TkVariable.new

     entry = TkEntry.new {
       textvariable $user_entry
     }.pack

     TkButton.new {
       text '表示'
       command proc { do_print $user_entry.value}
     }.pack

     Tk.mainloop

エントリーでパスワード入力を隠すには？
======================================

show というのを使用します。

     $user_entry = TkVariable.new

     entry = TkEntry.new {
       textvariable $user_entry
       show '*'
     }.pack

エントリーで入力幅を制限するには？
==================================

メニュー
========

キャンバスにはどうやって？
**************************

キャンバスにビットマップを表示するには？
========================================

     canvar = TkCanvas.new
     TkcBitmap.new(canvar, 50, 50,
                  'bitmap' => '@/usr/local/lib/tk4.2jp/demos/images/letters.bmp')
     canvar.pack

表示したのを消すには？
======================

     canvar.delete(bittag)

キャンバスにイメージを表示するには？
====================================

     #!/usr/local/bin/ruby

     require "tk"

     canvas = TkCanvas.new
     image = TkPhotoImage.new('file' => '/usr/local/lib/tk4.2jp/demos/images/earth.gif')
     TkcImage.new(canvas, 50, 50,
                              'image' => image)
     canvas.pack

     Tk.mainloop

キャンバス上にどのようなものが描画できますか？
==============================================

      arc        sections of circle
      bitmap     for X11 bitmap files/builtins
      image      for Photo image types (gif, xpm, xbm, ...)
      line
      oval       includes circles
      polygon    may be -filled
      rectangle  may also be -filled
      text       similar to Text widget primitive
      window     allows embeddding of other widgets

キャンバス上に線を再描画するには？
==================================

     #!/usr/local/bin/ruby

     require "tk"

     def push_it(line)
       line.coords 0, 0, 100, 100
     end

     c = TkCanvas.new
     i = TkcLine.new(c, 0, 0, 50, 50)
     c.pack

     TkButton.new {
       text 'extend'
       command proc { push_it i}
     }.pack

     Tk.mainloop

キャンバスのデータを PostScript(c)に出力するには？
==================================================

     #!/usr/local/bin/ruby

     require "tk"

     min_x = 0
     min_y = 0

     c = TkCanvas.new
     i = TkcLine.new(c, 0, 0, 50, 50)
     c.pack

     ps = c.postscript('x' => min_x,
                              'y' => min_y,
                              'width' => c.cget('width'),
                              'height' => c.cget('height'))

     f = open('file.ps', 'w')
     f.print ps
     f.close

     Tk.mainloop

キャンバスの大きさを表示するには？ リサイズ後は？
=================================================

     canvas.cget('width')

共通した問題
************

=> とか - とかの意味は？
========================

=> は Hash
. はメソッド

カーソルやカラーを変えるには？
==============================

基本的には、
     widget.configure('cursor' => ...)

ベルを鳴らすには？
==================

簡単には、
     widget.bell

スクリプトで例を書くと、

     #!/usr/local/bin/ruby

     require "tk"

     button = TkButton.new {
       text 'Bell'
       command proc{ self.bell }
     }.pack

     Tk.mainloop

実行時に ruby や、ruby/tk や、Tcl/Tk のバージョンを知るには？
=============================================================

     ruby      VERSION
     ruby/tk   ない？
     Tcl       Tk::TCL_VERSION
     Tk        Tk::TK_VERSION
     日本語化? Tk::JAPANIZED_TK

Tcl/Tk と ruby/tk との違いは？
******************************

 what Tcl/Tk ruby/Tk
 variable set a 123 a = 123 or a = '123'
  initialization
 re-assignment set b $a b = a

 lists/arrays set a {1 2 fred 7.8} a = [1, 2, 'fred', 7.8]
 re-assignment list set b $a b = a

 associative set a(Jan) 456.02 a = {'Jan' => 456.02, 'Feb' => 534.96}
  arrays set a(Feb) 534.96
 re-assignment foreach i \ b = a
                    [array names a] {
                   set b($i) = $a($i) }

 expressions set a [expr $b+$c] a = b + c

 increment incr i i += 1

 declare proc plus {a b} { def plus(a, b)
  subroutines expr $a + $b } return a + b
                                          end

 variable scope local default local default
                   override w/ "global"

 call plus 1 2 plus(1,2)
  subroutines

 statement sep newline or at ";" newline or at ";"

 statement "\" - newline none required
  continuation

 verbatim strings {} "
  e.g.  {a \ lot@ of $stuff} 'a \ lot@ of $stuff'

 escaped strings "" ""
  e.g.  "Who\nWhat\nIdunno" "Who\nWhat\nIdunno"

 STDOUT puts "Hello World!"  print "Hello!\n"
                   puts stdout "Hello!"  $stdout.print "Hello World!\n"

どうやって新しいスクリプト、モジュール、拡張を入れたら良いの？
**************************************************************

`スクリプト'
     普通の ruby スクリプト同じに

`モジュール'
     どういったのに相当するのかな？

`Extensions'
     どういったのに相当するのかな？

どうやって新しいモジュールを書けば良いの？
******************************************

Perl/Tk と違って、現在の ruby/tk は、Tcl/Tk 非依存でないので、C で、ごり
ごりモジュールを書くことはない？tcltk-ext 使用して、Tix, BLT
http://www.tcltk.com/blt/ とか整備したいなああと、expect も

複合 Widgets について
*********************

複合 Widgets とは、pure な Tcl/Tk が持っている widget やruby/tk のクラス
を組み合わせて、100% pure ruby/tk widget を作ったもの (^^;ライブラリの
tkscrollbox.rb が、例らしいです。

[ruby-list:5610]
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5610
[ruby-list:5611]
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5611で、解説
されています。

ダイアログボックスありますか？
==============================

TkDialog クラスというのがあります。使い方は、Ruby_Tk-widget-demo を参照
のこと

ファイル選択は？
================

ある。使い方は、Ruby_Tk-widget-demo の filebox.rb を参照のこと

カラーエディターは？
====================

Ruby_Tk-widget-demo の色選択ダイアログを改造すれば？Perl/Tk のモジュール
にこういうのがあるのか？

tkerror に相当するものは？
==========================

ruby に備わっている 例外処理以外にあるのかな？

テーブルはありますか？
======================

100% pure ruby/tk な、テーブル クラスはないtcltk-ext を使って BLT
http://www.tcltk.com/blt/ を呼び出せば実現できると思う。または、Tktable
http://oprs.mchh.siemens.de/tcl/capp/とか。

プログラミング開発ツール
************************

ruby の起動オプションに -w をつけて起動？

Tcl/Tk から ruby/Tk へのコンバータありますか？
==============================================

今のところありません

ruby/tk 用のデバッガってありますか？
====================================

ない？

ruby/tk に GUI ビルダーありますか？
===================================

ない

どうやったらスクリーンをクリアできるの？
****************************************

ruby/tk の中で X アプリケーションを描画？
*****************************************

Microsoft Windows(tm) でも使えますか？
**************************************

使えます。Windows95 Tcl7.6jp/Tk4.2jp + ruby??? で起動を確かめました

   * Cygwin版
     `Tcl7.6jp+Tk4.2jp'
          OK?

     `Tcl8.0.x+Tk8.0.x'
          OK?

     `Tcl8.1.x+Tk8.1.x'
          OK?

     `Tcl8.2.x+Tk8.2.x'
          OK?

   * mswin32版
     `Tcl7.6jp+Tk4.2jp'
          OK?

     `Tcl8.0.x+Tk8.0.x'
          OK?

     `Tcl8.1.x+Tk8.1.x'
          OK?

     `Tcl8.2.x+Tk8.2.x'
          OK?

ruby/tk では、日本語使えるの？
******************************

日本語化された Tcl/Tk を入れていれば、日本語が使えるはずです。(Windows
で、日本語化されていないTcl/Tk 8.x 系はどうなんだろう？)

ruby から使えるツールキットって他にありますか？
***********************************************

`EZWGL モジュール'
     EZWGL http://www.ma.utexas.edu/~mzou/EZWGL/ を扱うモジュールが前田
     さんによって作られています。現在ネットワーク上では手に入らないかも？

`FLTK モジュール'
     FLTK http://fltk.easysw.com/ を扱うモジュールを立石さんによって作ら
     れています。立石さんWeb http://kt-www.jaist.ac.jp:8000/~ttate/ftp/
     から手にいれることができます。

`gtk モジュール'
     gtk http://www.gtk.org/ を扱うモジュールがまつもと さんによって作ら
     れています。現在は、五十嵐さんがメンテしています。contrib/ にありま
     す

`XForms モジュール'
     XForms http://bragg.phys.uwm.edu/xforms/ を扱うモジュールが立石さん
     によって作られています。contrib/ にあります

`Xtoolkit モジュール'
     Athena widget や Motif を扱うモジュールが前田さんによって作られてい
     ますcontrib/ にあります

`XView モジュール'
     XView を扱うモジュールが立石さんによって作られていますcontrib/ にあ
     ります

`Xlibモジュール'
     Xlib を扱うモジュールがもりきゅうさんによって作られていますMoriq
     Ruby http://www.users.yun.co.jp/~moriq/ruby/にあります

どこで、グラフィックス関連の情報を得られますか？
************************************************

`GD モジュール'
     GIF ライブラリである(最近はPNGライブラリになっちゃった) GD
     http://www.boutell.com/gd/ が ruby から使えますcontrib/ にあります

`Open, Mesa-GL モジュール'
     contrib/ にあります

ruby/tk で書かれた主なアプリケーションは？
******************************************

`Ruby_Tk-widget-demo'
     永井氏らによる Tcl/Tk の widget demo の ruby/tk 版です。contrib/ に
     あります

`emie'
     あ伊藤氏作のメールリーダです。contrib/ にあります

`mine'
     前橋氏作のテキストエディタです。contrib/ にあります

`Othello game'
     前田氏作のオセロゲームです。現在ネットワーク上では手に入らないかも？

`SGmail'
     鴫原氏作のメールリーダです。SGmail http://www.sgmail.org/ から手に
     いれることができます。

`hanoi'
     Python のデモをコンバートしてみました[ruby-list:6616]
     http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/~poffice/mail/ruby/6616
     から手にいれることができます。

`箱入り娘'
     「箱入り娘」tk版です。I like Ruby
     http://www2a.biglobe.ne.jp/~seki/ruby/ から手にいれることができます。

`TKCAL'
     ふなば氏作のカレンダーです。Ruby
     http://www.kt.rim.or.jp/~tadf/ruby.html から手にいれることができま
     す。

ruby/tk の歴史は？
******************

   *  tk 相当前から
   *  tcltklib 1997 Sep.
   *  tcltk-ext
   *  tcltklib, tk に

将来
****

どうやったらこの FAQ の最新バージョンを手に入れられるの？
*********************************************************

未定

謝辞
****

     ruby の作者である まつもと さん
     Tcl/Tk の作者である John K. Ousterhout 博士
     ruby-list ML で私の幼稚な質問に答えてくださった方々
     その他 ruby/tk を使用している人々