♪ Lite & Seen Lite は みんなの道具。
なんですか
ruby を 知らない方も多いと思います。ruby は 「るびぃ」と発音するようです。日本人が提案したプログラム言語だそうです。パソコンの急激な普及で そのソフトを扱うビジネスは数多くの成功者をこの世に送り出しています。
ruby は 新しいスタイルのビジネスモデルで開発されているようです。マイクロソフト社の Windows や Excel は 株式会社が権利を独占する形でソフトの開発をしているようですが、Linux などは その方式とは異なる開発スタイルだということをテレビの番組で知りました。
おそらく ruby は Linux のような フリーソフトと呼ばれている「ビジネスモデル」による、日本で初めて成功した(しつつある)製品です。無償で提供される製品が フリーソフト だと勘違いされている方も多いと思いますが、それは「おまけ」や「特典サービス」などとして昔からあります。ruby という 日本初の本格的なプログラム言語が生まれたことは画期的です。まちがいなく 大きな成功が約束されています。そうであって欲しいものです。フリーソフトの本質は、新しい「ビジネスモデル」です。
プログラム言語とはいえど「ことば」は自然であるべきです。フリーソフトは、より自然に近い開発手法であると考えます。人々の行動の軸が、感動から共感へシフトしつつある今日この頃、あなたはどのような考えをお持ちでしょうか。
Lite & Seen Lite と いう このホームページでは JW_CAD という 「フリーチャージのソフト」を研究しているのですが、いまのところ趣味の領域を越えるものではなく、ビジネスモデルとしては中途半端です。
Ruby/Tk は ruby を利用して tcl/tk という Windows の部品が手軽に利用できるソフト( tcl/tk は 1980年代後半に公開 )です。ruby は 知らないが tcl/tk は知っているというくらい著名なソフトです。tcl/tk は 音声から動画まで(おそらく)扱うことのできるソフトで しかも ruby と同じスクリプト言語です。
Ruby/Tk は ruby が使える tcl/tk だと思います。Ruby/Tk は tcl/tk の ruby語 の 通訳だとも考えられます。
下図は Ruby/Tk の サンプルプログラム xyplot.rb を利用して 地震波の強震データを表示したものです。plotchart.rb というライブラリを利用すれば Excel のように、いろいろな図表を作ることができるらしいのですが、ruby のサンプルプログラムだけで、使いこなすのはむずかしいと感じました。リアルタイムでデータをプロットしたりもできそうなのですが、わかりませんでした。
_tk_xyplot.rbw
ELNS.DAT

表示を工夫することもできるようです。
_tk_xyplot3.rbw

右図は 同様にして 地震波の強震データから 地震応答スペクトルを求めたものです。計算は 30秒程度 かかりました。
_tk_modal_resp4.rbw
そろそろ ruby などの スクリプト言語でも 技術計算がこなせる時代が到来しつつあるようです。
これからの技術計算プログラムは ruby や Java で書かれることが多くなることでしょう。
ruby や Java は たいていの OS で動くこと、インターネット上で利用できる( ruby はできつつある )こと、開発環境を無償で自由に入手できるなど 時代を先取りしたコンセプトを持って整備されているようです。
BASIC が かえってこないことを、うすうす感じている今日この頃、Ruby/Tk を見つけました。
BASIC の 使いやすさはすでに「伝説」なのでしょう。プログラム言語のルネッサンスとでも思って Ruby/Tk を習いましょうか。
インストールは大嫌い
ruby や Tcl/Tk のインストールを これから行おうとされる方は ひとりで頑張らないで 詳しそうな方にお願いしてください。
それでも、やってみようと言う方は
ruby のダウンロードは、ルビーの公式サイト? http://www.ruby-lang.org/ja/downloads/ に紹介されています。
Tcl/Tk のダウンロードは、くろの(chrono)さんのホームページが http://lldev.jp/ruby/tips/ruby_tk_install.html たよりになると思います。
動きますか
Ruby/Tk は Tcl/Tk を ruby とは別にインストールする必要があるので、管理人は本当に苦労しました。
ruby を開発されている方々も そろそろ本気で ユーザーの立場にたって リリースしていただければ ruby は 間違いなくブレークすると思うのですが・・・
Ruby/Tk は 試したくても試せない、使いたくても使えない ミステリアスなフリーソフト( スフィンクスソフト ) なのです。
こつをつかむまでは大変です
さて Ruby/Tk を 習いましょう。とりあえず、画面に「ようこそ!」と書いてみます。

require 'tk'
txt = TkText.new.pack.insert 'end', "Ruby/Tk は こつをつかむまでは大変です。"
TkLabel.new(txt) { text 'ようこそ!'; font 'Gothic 12 bold'; fg 'white'; bg 'blue'; place 'x'=>20, 'y'=>50 }
Tk.mainloop
locate 20,50; print 'ようこそ!' のように書ければいいのですが・・・こつをつかむまでは大変そうです。
1行目の require 'tk' は tk.rb というライブラリを利用する宣言文です。最後の行の Tk.mainloop が なければ 文字を表示した瞬間にプログラムが終了してしまいます。
2行目の TkText.new.pack で テキストウィジェットという便利そうな部品を呼び込んでいます。これがなくても「ようこそ!」は表示されます。
print 1 + 1 は 3行目の text 'ようこそ!' を text eval('1 + 1') とします。数学関数も text eval('Math.sin(Math::PI/4.0)') で利用できます。( 普通は include Math を宣言しておいて sin(PI/4.0) とします )
ここまでくれば a = 1; b = 2; print a + b が 気になります。変数に値を代入してその結果を簡単に表示できなければ、プログラムを作る気すらおこりません。

require 'tk'
txt = TkText.new.pack
a = 1
b = 2
TkLabel.new(txt) { text eval('a + b'); font 'Mincho 12'; bg 'white'; place 'x'=>20, 'y'=>50 }
Tk.mainloop
たったこれっぽっちのことでも、結構大変です。BASIC は どこをほっつき歩いているのでしょうか?
input "a = ", a; input "b =", b; print "a + b =", a + b は かなり面倒です。慣れてくれば、もう少し簡単になるとは思うのですが。

include Math
require 'tk'
txt = TkText.new.pack
TkLabel.new(txt) { text ' a ='; width 5; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>10, 'y'=>20 }
TkLabel.new(txt) { text ' b ='; width 5; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>10, 'y'=>50 }
TkLabel.new(txt) { text 'a+b ='; width 5; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>10, 'y'=>80 }
a = TkEntry.new(txt) { width 20; font 'Gothic 12'; place 'x'=>60, 'y'=>20 }
b = TkEntry.new(txt) { width 20; font 'Gothic 12'; place 'x'=>60, 'y'=>50 }
c = TkLabel.new(txt) { width 20; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>60, 'y'=>80 }
a.focus
a.bind 'Return', proc { c.text( (eval(a.value).to_f + eval(b.value).to_f).to_s ); b.focus }
b.bind 'Return', proc { c.text( (eval(a.value).to_f + eval(b.value).to_f).to_s ); a.focus }
Tk.mainloop
それでも、蒸発した BASIC の帰りをいつまでも待ってはいられません。Ruby/Tk に わずかな望みをかけましょう。
ファイル操作ができました
ファイル操作で、プログラム作りをあきらめる方も多いと思いますが、Ruby/Tk は 便利です。Windows の エクスプローラーのような画面を立ち上げるだけであれば 下記のようなプログラムで実行できました。
require 'tk'
Tk.getOpenFile
すこしは使えそうなものを作ってみました。ファイル名を読み込み、そのファイルをノートパッドで開いて編集するプログラムです。
_tk_getopen.rbw
File → Open で 下の画面が表示されます。
File → Open は 選択したファイル名を表示するだけです。

File → Edit で notepad で 選択したファイルを開きます。

簡単そうですが、エキスプローラー風の画面の色や大きさをどうやって変えたらよいのか?・・・きっといろいろできるのだとは思うのですが、きれいな画面でもそれなりに欲がでるので ややこしいです。
LINE 文 が使いたい
すこしまえ 画面に「ようこそ!」と書いてみましたが、その画面には 線が引けないことがわかりました。
TkText を TkCanvas とすれば 画面に線が引けるようです。「ようこそ!」と書いてみました。

require 'tk'
can = TkCanvas.new { bg 'white'; width 480; height 310; relief 'sunken'; borderwidth 1; pack }
TkLabel.new(can) { text 'ようこそ!'; font 'Gothic 12 bold'; fg 'white'; bg 'blue'; place 'x'=>20, 'y'=>50 }
Tk.mainloop
おなじように a = 1; b = 2; print a + b は

require 'tk'
can = TkCanvas.new { bg 'white'; width 480; height 310; relief 'sunken'; borderwidth 1; pack }
a = 1
b = 2
TkLabel.new(can) { text eval('a + b'); font 'Mincho 12'; bg 'white'; place 'x'=>20, 'y'=>50 }
Tk.mainloop
input "a = ", a; input "b =", b; print "a + b =", a + b も 同じように

include Math
require 'tk'
can = TkCanvas.new { highlightcolor '#d6d7ce'; bg 'white'; width 480; height 310; relief 'sunken'; borderwidth 1; pack }
TkLabel.new(can) { text ' a ='; width 5; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>10, 'y'=>20 }
TkLabel.new(can) { text ' b ='; width 5; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>10, 'y'=>50 }
TkLabel.new(can) { text 'a+b ='; width 5; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>10, 'y'=>80 }
a = TkEntry.new(can) { width 20; font 'Gothic 12'; place 'x'=>60, 'y'=>20 }
b = TkEntry.new(can) { width 20; font 'Gothic 12'; place 'x'=>60, 'y'=>50 }
c = TkLabel.new(can) { width 20; anchor 'w'; font 'Gothic 12'; bg 'white'; place 'x'=>60, 'y'=>80 }
a.focus
a.bind 'Return', proc { c.text( (eval(a.value).to_f + eval(b.value).to_f).to_s ); b.focus }
b.bind 'Return', proc { c.text( (eval(a.value).to_f + eval(b.value).to_f).to_s ); a.focus }
Tk.mainloop
LINE 文 が使えました。LINE(x1,y1)-(x2,y2) は TkcLine.new( * ,x1,y1,x2,y2) のようになります。

require 'tk'
screen = TkCanvas.new { bg 'white'; width 480; height 310; relief 'sunken'; borderwidth 1; pack }
TkLabel.new(screen) { text 'ようこそ!'; font 'Gothic 12 bold'; fg 'white'; bg 'blue'; place 'x'=>20, 'y'=>50 }
TkcLine.new(screen, 20, 80, 200, 80){ width 2; fill 'red' }
Tk.mainloop
TkcLine は 直線のほか、曲線( ベジェ曲線? )も引けるようです。

require 'tk'
screen = TkCanvas.new { bg 'white'; width 480; height 310; relief 'sunken'; borderwidth 1; pack }
TkLabel.new(screen) { text 'ようこそ!'; font 'Gothic 12 bold'; fg 'white'; bg 'blue'; place 'x'=>20, 'y'=>50 }
hp = [[ 20, 80],[ 80, 100],[ 140, 60],[ 200, 80]]
TkcLine.new(screen, hp){ width 1; fill 'blue'; dash [1,1] }
TkcLine.new(screen, hp){ width 2; smooth 'on'; fill 'red'; arrow 'both' }
Tk.mainloop
線は点のセット( 集合 )で表わすこともできるようです。
hp = [ 20, 80 , 80, 100 , 140, 60 , 200, 80 ] は
hp = [[ 20, 80],[ 80, 100],[ 140, 60],[ 200, 80]] とすることも許しているようです。
仕事でつかえるの?
処理速度やデータ容量が問題ですが、ラフスケッチ程度( 概略の検討 )なら十分に活用できると思います。
余談ですが VBScript ( Windows に付属している BASIC ) や VB あるいは VBA と ruby は 似ています。
例えば VBScript で
が ruby なら
if j>12 then
else
y=a[j]*(x-tx[j])**2+ty[j]
end
となります。だだ ruby には goto 文がないので 行番号は認識できないと思います。
BASIC の時代には パソコンの製造メーカーが代われば BASIC のプログラムをそのまま利用することができませんでした。ところが ruby は 製造メーカーのみならず OS が異なっても 同じプログラムが利用できるようです。ruby には プログラム言語の「ISO」や「JIS」の規格がないにもかかわらず、そうした工業製品の標準規格の精神が反映されていることは皮肉な現実です。「フリーウェア」というビジネスモデルは 製品の品質とか保証を ユーザー( 利用者 )にゆだねているからでしょうか。
地震による建物の揺れ
冒頭で紹介した 地震関係の計算の続きです。FORTRAN や BASIC のプログラムは数多く紹介されています。それを Ruby/Tk でやってみました。
1質点-1自由度-減衰系 の 強震データによる 時刻暦応答解析です。学術用語は、わけがわからないことが多いです。
平たくいえば「地震で平屋の建物はどう揺れる」のか試してみました。
固有周期を T = 0.3 sec で計算しているので 1秒間で 山が3つ( 横軸が秒数 )くらいあることがよくわかります。
→ ちなみに プログラムの起動から下図の表示まで 数秒 でした。簡単な時刻暦地震応答解析は プログラム電卓の感覚で行えるようになっています。
_tk_modal_resp2.rbw
ELNS.DAT

おなじことを、まる(質点)が動くアニメーションにしてみようと思います。
→ ホームページで動くようにできればいいのですが、方法がわかりませんでした。
→ いまのところ、これ以上手を加えると「スローモーション」になってしまいます。
_tk_modal_anime.rbw
ELNS.DAT
HACHINS.DAT
HACHIEW.DAT
TAFTNS.DAT

録画・再生ボタンや速度計などを付ければ 高級感がでるかもしれません。

荷重項の計算( 構造計算のうち準備計算と呼ばれているもの )
_tk_cmq.rbw

コンボボックスで「キー」↑↓による操作を「マウス」による選択と同じ動作にする方法がわからなかった。
鋼材選択メニュー !tk_jkata2.rbw
関連事項 【 Ruby/Tk の 利用実験 : Seen Lite S 】 外部変形での利用例
「キー」と「マウス」操作がどちらも可能なメニューです。
「キー」は ←→↑↓ で操作します。
「マウス」は ボタンの上をポインタが移動させれば 鋼種 が変わります。「マウスホイール」を回せば 断面サイズが変更できます。
選択されたデータは 左下に表示され 「Enter」キー あるいは ボタンの上の「マウス左クリック」で exjish_temp.txt に出力されます。
選択終了ボタンは 同じ処理をしてメニューを終了します。
下記のファイルに !tk_jkata.rbw があります。( データフォルダの変更はできません )
_tk_jkata.lzh

結構 使えますよ
おつきあい「ありがとうございました」 Ruby/Tk は 近い将来ブレークの予感がします。ruby や Ruby/Tk には 確かに BASIC のプログラム感があります。プログラム容量が少なくてすむことも ruby や Ruby/Tk の特徴だと思いました。
Windows の 部品の再現のみならず ユーザー自身が比較的簡単に 自分にあった部品を本当に手作りできることが Ruby/Tk の魅力なのでしょう。
本ページは 時代遅れの感もあるかとは思います。それでも、建物の地震解析を、こんなに簡単にアニメーションにできるとは思いませんでした。
3Dの時代に 2Dでもあるまいに。そうかもしれません。それでも基礎は大切です。
「タンカー」も「風呂敷」も 荷物を運ぶ道具です。
ソフトを使いこなすことも重要です。ですが、そろそろ、つたない技術でもオリジナルなものを周囲の人に伝えていく努力が必要なのではないでしょうか?そして、それを受け入れていく寛容な社会こそ、これから私たちが目指してゆく方向ではないでしょうか。
健康第一!! またお会いいたしましょう。
| 前へ | 表紙へ |